@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
@@ -0,0 +1,178 @@
1
+ import path from "node:path";
2
+ import { pathExists, readText } from "./fs.js";
3
+ const OPENCODE_AGENT_NAMES = ["planner-sisyphus", "librarian", "explore", "oracle"];
4
+ const SAFE_READ_ONLY_COMMANDS = new Set(["rg", "cat", "sed", "ls", "find", "git status", "git diff"]);
5
+ const REQUIRED_WRITE_ALLOW_PATHS = [".aiws/tmp/", ".aiws/changes/*/analysis/", ".aiws/changes/*/review/", ".aiws/changes/*/evidence/"];
6
+ const REQUIRED_DENY_PATHS = [".aiws/secrets/", ".env*"];
7
+ const REQUIRED_DENY_COMMANDS = ["rm", "mv", "git commit", "git push", "npm publish"];
8
+ function relativeOrDot(value) {
9
+ return value ? value.replaceAll(path.sep, "/") : ".";
10
+ }
11
+ function readAgentState(raw, agentName) {
12
+ const agents = raw && typeof raw === "object" && raw.agents && typeof raw.agents === "object" ? raw.agents : {};
13
+ const entry = agents[agentName];
14
+ return {
15
+ present: !!entry && typeof entry === "object",
16
+ enabled: !!(entry && typeof entry === "object" && entry.enabled === true),
17
+ replacePlan: entry && typeof entry === "object" && typeof entry.replace_plan === "boolean" ? entry.replace_plan : null,
18
+ promptAppendConfigured: !!(entry &&
19
+ typeof entry === "object" &&
20
+ typeof entry.prompt_append === "string" &&
21
+ entry.prompt_append.trim().length > 0),
22
+ };
23
+ }
24
+ function readApprovalWhitelistState(raw) {
25
+ const policy = raw &&
26
+ typeof raw === "object" &&
27
+ raw.aiws &&
28
+ typeof raw.aiws === "object" &&
29
+ raw.aiws.autonomy &&
30
+ typeof raw.aiws.autonomy === "object" &&
31
+ raw.aiws.autonomy.approval_whitelist &&
32
+ typeof raw.aiws.autonomy.approval_whitelist === "object"
33
+ ? raw.aiws.autonomy.approval_whitelist
34
+ : null;
35
+ const readOnlyCommands = Array.isArray(policy?.read_only_commands)
36
+ ? policy.read_only_commands.filter((value) => typeof value === "string" && value.trim().length > 0)
37
+ : [];
38
+ const writeAllowPaths = Array.isArray(policy?.write_allow_paths)
39
+ ? policy.write_allow_paths.filter((value) => typeof value === "string" && value.trim().length > 0)
40
+ : [];
41
+ const denyPaths = Array.isArray(policy?.deny_paths)
42
+ ? policy.deny_paths.filter((value) => typeof value === "string" && value.trim().length > 0)
43
+ : [];
44
+ const denyCommands = Array.isArray(policy?.deny_commands)
45
+ ? policy.deny_commands.filter((value) => typeof value === "string" && value.trim().length > 0)
46
+ : [];
47
+ const mode = typeof policy?.mode === "string" && policy.mode.trim().length > 0 ? policy.mode : "";
48
+ const hostPermissionMode = typeof policy?.host_permission_mode === "string" && policy.host_permission_mode.trim().length > 0
49
+ ? policy.host_permission_mode
50
+ : "";
51
+ const enabled = policy?.enabled === true;
52
+ const safeReadOnlyCommands = readOnlyCommands.every((value) => SAFE_READ_ONLY_COMMANDS.has(value));
53
+ const requiredWritePathsPresent = REQUIRED_WRITE_ALLOW_PATHS.every((value) => writeAllowPaths.includes(value));
54
+ const requiredDenyPathsPresent = REQUIRED_DENY_PATHS.every((value) => denyPaths.includes(value));
55
+ const requiredDenyCommandsPresent = REQUIRED_DENY_COMMANDS.every((value) => denyCommands.includes(value));
56
+ const modeValid = mode === "assist-only";
57
+ return {
58
+ present: !!policy,
59
+ enabled,
60
+ mode,
61
+ hostPermissionMode,
62
+ readOnlyCommands,
63
+ writeAllowPaths,
64
+ denyPaths,
65
+ denyCommands,
66
+ configured: enabled &&
67
+ modeValid &&
68
+ safeReadOnlyCommands &&
69
+ readOnlyCommands.length > 0 &&
70
+ requiredWritePathsPresent &&
71
+ requiredDenyPathsPresent &&
72
+ requiredDenyCommandsPresent &&
73
+ hostPermissionMode === "manual-only",
74
+ };
75
+ }
76
+ export async function detectOpenCodeEnvironment(workspaceRoot) {
77
+ const opencodeDir = path.join(workspaceRoot, ".opencode");
78
+ const configPath = path.join(opencodeDir, "oh-my-opencode.json");
79
+ const examplePath = path.join(opencodeDir, "oh-my-opencode.json.example");
80
+ const opencodeDirExists = await pathExists(opencodeDir);
81
+ const configExists = await pathExists(configPath);
82
+ const exampleExists = await pathExists(examplePath);
83
+ let config = null;
84
+ let configStatus = "missing";
85
+ let configError = "";
86
+ if (configExists) {
87
+ try {
88
+ config = JSON.parse(await readText(configPath));
89
+ configStatus = "loaded";
90
+ }
91
+ catch (error) {
92
+ configStatus = "invalid";
93
+ configError = error instanceof Error ? error.message : String(error);
94
+ }
95
+ }
96
+ const agents = Object.fromEntries(OPENCODE_AGENT_NAMES.map((name) => [name, readAgentState(config, name)]));
97
+ const enabledAgents = OPENCODE_AGENT_NAMES.filter((name) => agents[name]?.enabled === true);
98
+ const recommendedAgentsReady = ["planner-sisyphus", "librarian", "explore", "oracle"].every((name) => agents[name]?.enabled === true);
99
+ const backgroundTasksConfigured = !!(config && typeof config === "object" && config.backgroundTasks && typeof config.backgroundTasks === "object");
100
+ const autoResumeEnabled = !!(config &&
101
+ typeof config === "object" &&
102
+ config.experimental &&
103
+ typeof config.experimental === "object" &&
104
+ config.experimental.auto_resume === true);
105
+ const approvalWhitelist = readApprovalWhitelistState(config);
106
+ const claudeSettingsExamplePath = path.join(workspaceRoot, ".claude", "settings.json.example");
107
+ const approvalWhitelistHelperPath = path.join(opencodeDir, "helpers", "approval-whitelist-check.sh");
108
+ const approvalWhitelistRunnerPath = path.join(opencodeDir, "helpers", "approval-whitelist-run.sh");
109
+ const approvalWhitelistWatchdogPath = path.join(opencodeDir, "helpers", "approval-whitelist-watchdog.sh");
110
+ const tmuxScanHelperPath = path.join(opencodeDir, "helpers", "tmux-swarm-scan.sh");
111
+ const tmuxRescueHelperPath = path.join(opencodeDir, "helpers", "tmux-swarm-rescue.sh");
112
+ const claudeSettingsExampleExists = await pathExists(claudeSettingsExamplePath);
113
+ const approvalWhitelistHelperExists = await pathExists(approvalWhitelistHelperPath);
114
+ const approvalWhitelistRunnerExists = await pathExists(approvalWhitelistRunnerPath);
115
+ const approvalWhitelistWatchdogExists = await pathExists(approvalWhitelistWatchdogPath);
116
+ const tmuxScanHelperExists = await pathExists(tmuxScanHelperPath);
117
+ const tmuxRescueHelperExists = await pathExists(tmuxRescueHelperPath);
118
+ const watchdogSuperviseReady = configStatus === "loaded" &&
119
+ approvalWhitelist.configured &&
120
+ approvalWhitelistHelperExists &&
121
+ approvalWhitelistRunnerExists &&
122
+ approvalWhitelistWatchdogExists;
123
+ const autonomyReady = configStatus === "loaded" &&
124
+ agents["planner-sisyphus"]?.promptAppendConfigured === true &&
125
+ backgroundTasksConfigured &&
126
+ autoResumeEnabled &&
127
+ approvalWhitelist.configured &&
128
+ claudeSettingsExampleExists &&
129
+ approvalWhitelistHelperExists &&
130
+ approvalWhitelistRunnerExists &&
131
+ approvalWhitelistWatchdogExists &&
132
+ tmuxScanHelperExists &&
133
+ tmuxRescueHelperExists;
134
+ return {
135
+ workspaceRoot,
136
+ opencodeDir,
137
+ opencodeDirExists,
138
+ configPath,
139
+ configExists,
140
+ configStatus,
141
+ configError,
142
+ examplePath,
143
+ exampleExists,
144
+ mode: configStatus === "loaded" ? "oMo-enabled" : "standard-opencode",
145
+ recommendedAgentsReady,
146
+ enabledAgents,
147
+ agents,
148
+ backgroundTasksConfigured,
149
+ autoResumeEnabled,
150
+ approvalWhitelist,
151
+ watchdogSuperviseReady,
152
+ autonomyReady,
153
+ claudeSettingsExamplePath,
154
+ claudeSettingsExampleExists,
155
+ approvalWhitelistHelperPath,
156
+ approvalWhitelistHelperExists,
157
+ approvalWhitelistRunnerPath,
158
+ approvalWhitelistRunnerExists,
159
+ approvalWhitelistWatchdogPath,
160
+ approvalWhitelistWatchdogExists,
161
+ tmuxScanHelperPath,
162
+ tmuxScanHelperExists,
163
+ tmuxRescueHelperPath,
164
+ tmuxRescueHelperExists,
165
+ rel: {
166
+ opencodeDir: relativeOrDot(path.relative(workspaceRoot, opencodeDir)),
167
+ configPath: relativeOrDot(path.relative(workspaceRoot, configPath)),
168
+ examplePath: relativeOrDot(path.relative(workspaceRoot, examplePath)),
169
+ claudeSettingsExamplePath: relativeOrDot(path.relative(workspaceRoot, claudeSettingsExamplePath)),
170
+ approvalWhitelistHelperPath: relativeOrDot(path.relative(workspaceRoot, approvalWhitelistHelperPath)),
171
+ approvalWhitelistRunnerPath: relativeOrDot(path.relative(workspaceRoot, approvalWhitelistRunnerPath)),
172
+ approvalWhitelistWatchdogPath: relativeOrDot(path.relative(workspaceRoot, approvalWhitelistWatchdogPath)),
173
+ tmuxScanHelperPath: relativeOrDot(path.relative(workspaceRoot, tmuxScanHelperPath)),
174
+ tmuxRescueHelperPath: relativeOrDot(path.relative(workspaceRoot, tmuxRescueHelperPath)),
175
+ },
176
+ };
177
+ }
178
+ //# sourceMappingURL=opencode-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-env.js","sourceRoot":"","sources":["../src/opencode-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function joinRel(rootDir: string, relPosix: string): string;
2
+ export declare function normalizeRel(rel: string): string;
@@ -0,0 +1,8 @@
1
+ import path from "node:path";
2
+ export function joinRel(rootDir, relPosix) {
3
+ return path.join(rootDir, ...String(relPosix).split("/"));
4
+ }
5
+ export function normalizeRel(rel) {
6
+ return String(rel).replaceAll("\\", "/").replaceAll(/\/+/g, "/").replace(/^\/+/, "");
7
+ }
8
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,QAAgB;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvF,CAAC"}
package/dist/spec.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export interface SpecPackage {
2
+ rootDir: string;
3
+ version: string;
4
+ }
5
+ export declare function loadSpecPackage(): Promise<SpecPackage>;
6
+ export interface Template {
7
+ templateId: string;
8
+ templateDir: string;
9
+ manifest: any;
10
+ specVersion: string;
11
+ }
12
+ export declare function loadTemplate(templateId: string): Promise<Template>;
13
+ export declare function loadWorkflowGovernanceRules(): Promise<any>;
14
+ export declare function loadWorkflowStageContracts(): Promise<any>;
15
+ export declare function loadWorkflowRouterRules(): Promise<any>;
16
+ export declare function loadWorkflowReviewGates(): Promise<any>;
17
+ export declare function loadWorkflowDelegationContracts(): Promise<any>;
package/dist/spec.js ADDED
@@ -0,0 +1,174 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs/promises";
3
+ import { createRequire } from "node:module";
4
+ import { fileURLToPath } from "node:url";
5
+ import { pathExists, readText } from "./fs.js";
6
+ import { UserError } from "./errors.js";
7
+ import { validateJsonSchemaLite } from "./json-schema-lite.js";
8
+ const specJsonDocCache = new Map();
9
+ export async function loadSpecPackage() {
10
+ const require = createRequire(import.meta.url);
11
+ let pkgJsonPath = null;
12
+ try {
13
+ pkgJsonPath = require.resolve("@aipper/aiws-spec/package.json");
14
+ }
15
+ catch {
16
+ pkgJsonPath = null;
17
+ }
18
+ let rootDir;
19
+ if (pkgJsonPath) {
20
+ rootDir = path.dirname(pkgJsonPath);
21
+ }
22
+ else {
23
+ const here = fileURLToPath(import.meta.url);
24
+ rootDir = path.resolve(path.dirname(here), "../../spec");
25
+ const fallbackPkg = path.join(rootDir, "package.json");
26
+ if (!(await pathExists(fallbackPkg))) {
27
+ throw new UserError("Cannot locate @aipper/aiws-spec. Install it or run inside the monorepo.", {
28
+ exitCode: 1,
29
+ });
30
+ }
31
+ }
32
+ const pkg = JSON.parse(await readText(path.join(rootDir, "package.json")));
33
+ const version = String(pkg.version || "").trim() || "0.0.0";
34
+ return { rootDir, version };
35
+ }
36
+ export async function loadTemplate(templateId) {
37
+ if (!templateId || templateId.includes("..") || templateId.includes("/") || templateId.includes("\\")) {
38
+ throw new UserError(`Invalid template id: ${templateId}`);
39
+ }
40
+ const spec = await loadSpecPackage();
41
+ const templateDir = path.join(spec.rootDir, "templates", templateId);
42
+ const manifestPath = path.join(templateDir, "manifest.json");
43
+ try {
44
+ await fs.access(manifestPath);
45
+ }
46
+ catch {
47
+ throw new UserError(`Template not found: ${templateId}`, {
48
+ details: `Missing: ${manifestPath}`,
49
+ });
50
+ }
51
+ const manifest = JSON.parse(await readText(manifestPath));
52
+ return { templateId, templateDir, manifest, specVersion: spec.version };
53
+ }
54
+ async function loadSpecJsonDoc(relPath) {
55
+ const spec = await loadSpecPackage();
56
+ const absPath = path.join(spec.rootDir, relPath);
57
+ const cacheKey = `${spec.rootDir}:${relPath}`;
58
+ if (specJsonDocCache.has(cacheKey)) {
59
+ return { spec, data: specJsonDocCache.get(cacheKey), absPath };
60
+ }
61
+ const raw = await readText(absPath);
62
+ let data;
63
+ try {
64
+ data = JSON.parse(raw);
65
+ }
66
+ catch (error) {
67
+ throw new UserError(`Invalid JSON in spec doc: ${relPath}`, {
68
+ details: error instanceof Error ? error.message : String(error),
69
+ });
70
+ }
71
+ specJsonDocCache.set(cacheKey, data);
72
+ return { spec, data, absPath };
73
+ }
74
+ async function loadValidatedSpecJsonDoc(relPath, schemaRelPath) {
75
+ const loaded = await loadSpecJsonDoc(relPath);
76
+ const { data: schema } = await loadSpecJsonDoc(schemaRelPath);
77
+ validateJsonSchemaLite(loaded.data, schema, { source: loaded.absPath });
78
+ return loaded;
79
+ }
80
+ export async function loadWorkflowGovernanceRules() {
81
+ const relPath = path.join("docs", "workflow-governance-rules.json");
82
+ const schemaRelPath = path.join("docs", "workflow-governance-rules.schema.json");
83
+ const { spec, data } = await loadValidatedSpecJsonDoc(relPath, schemaRelPath);
84
+ const governanceRules = data.governanceRules;
85
+ const guidanceRules = data.guidanceRules;
86
+ return {
87
+ ok: true,
88
+ source: "@aipper/aiws-spec/docs/workflow-governance-rules.json",
89
+ specVersion: spec.version,
90
+ version: Number(data?.version || 1),
91
+ description: String(data?.description || ""),
92
+ governanceRules,
93
+ guidanceRules,
94
+ };
95
+ }
96
+ export async function loadWorkflowStageContracts() {
97
+ const relPath = path.join("docs", "workflow-stage-contracts.json");
98
+ const schemaRelPath = path.join("docs", "workflow-stage-contracts.schema.json");
99
+ const { spec, data } = await loadValidatedSpecJsonDoc(relPath, schemaRelPath);
100
+ const stages = data.stages;
101
+ return {
102
+ ok: true,
103
+ source: "@aipper/aiws-spec/docs/workflow-stage-contracts.json",
104
+ specVersion: spec.version,
105
+ version: Number(data?.version || 1),
106
+ description: String(data?.description || ""),
107
+ standardChain: Array.isArray(data?.standardChain) ? data.standardChain : [],
108
+ notes: Array.isArray(data?.notes) ? data.notes : [],
109
+ stages,
110
+ };
111
+ }
112
+ export async function loadWorkflowRouterRules() {
113
+ const relPath = path.join("docs", "workflow-router-rules.json");
114
+ const schemaRelPath = path.join("docs", "workflow-router-rules.schema.json");
115
+ const { spec, data } = await loadValidatedSpecJsonDoc(relPath, schemaRelPath);
116
+ return {
117
+ ok: true,
118
+ source: "@aipper/aiws-spec/docs/workflow-router-rules.json",
119
+ specVersion: spec.version,
120
+ version: Number(data?.version || 1),
121
+ title: String(data?.title || ""),
122
+ description: String(data?.description || ""),
123
+ truthFiles: Array.isArray(data?.truthFiles) ? data.truthFiles : [],
124
+ bootstrapEntry: data.bootstrapEntry,
125
+ universalSequence: Array.isArray(data?.universalSequence) ? data.universalSequence : [],
126
+ routingRules: Array.isArray(data?.routingRules) ? data.routingRules : [],
127
+ routeCases: Array.isArray(data?.routeCases) ? data.routeCases : [],
128
+ clarificationTriggers: Array.isArray(data?.clarificationTriggers) ? data.clarificationTriggers : [],
129
+ universalRules: Array.isArray(data?.universalRules) ? data.universalRules : [],
130
+ notes: Array.isArray(data?.notes) ? data.notes : [],
131
+ };
132
+ }
133
+ export async function loadWorkflowReviewGates() {
134
+ const relPath = path.join("docs", "workflow-review-gates.json");
135
+ const schemaRelPath = path.join("docs", "workflow-review-gates.schema.json");
136
+ const { spec, data } = await loadValidatedSpecJsonDoc(relPath, schemaRelPath);
137
+ return {
138
+ ok: true,
139
+ source: "@aipper/aiws-spec/docs/workflow-review-gates.json",
140
+ specVersion: spec.version,
141
+ version: Number(data?.version || 1),
142
+ title: String(data?.title || ""),
143
+ description: String(data?.description || ""),
144
+ gates: Array.isArray(data?.gates) ? data.gates : [],
145
+ unifiedRules: Array.isArray(data?.unifiedRules) ? data.unifiedRules : [],
146
+ evidence: Array.isArray(data?.evidence) ? data.evidence : [],
147
+ notes: Array.isArray(data?.notes) ? data.notes : [],
148
+ };
149
+ }
150
+ export async function loadWorkflowDelegationContracts() {
151
+ const relPath = path.join("docs", "workflow-delegation-contracts.json");
152
+ const schemaRelPath = path.join("docs", "workflow-delegation-contracts.schema.json");
153
+ const { spec, data } = await loadValidatedSpecJsonDoc(relPath, schemaRelPath);
154
+ return {
155
+ ok: true,
156
+ source: "@aipper/aiws-spec/docs/workflow-delegation-contracts.json",
157
+ specVersion: spec.version,
158
+ version: Number(data?.version || 1),
159
+ title: String(data?.title || ""),
160
+ description: String(data?.description || ""),
161
+ purpose: Array.isArray(data?.purpose) ? data.purpose : [],
162
+ truthFiles: Array.isArray(data?.truthFiles) ? data.truthFiles : [],
163
+ delegationFlow: Array.isArray(data?.delegationFlow) ? data.delegationFlow : [],
164
+ roleTypes: Array.isArray(data?.roleTypes) ? data.roleTypes : [],
165
+ artifactTargets: Array.isArray(data?.artifactTargets) ? data.artifactTargets : [],
166
+ reviewConvergence: data?.reviewConvergence || {},
167
+ fallbackMode: data?.fallbackMode || {},
168
+ toolCapabilityMatrix: Array.isArray(data?.toolCapabilityMatrix) ? data.toolCapabilityMatrix : [],
169
+ universalRules: Array.isArray(data?.universalRules) ? data.universalRules : [],
170
+ reworkLoopProtocol: data?.reworkLoopProtocol || {},
171
+ notes: Array.isArray(data?.notes) ? data.notes : [],
172
+ };
173
+ }
174
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare function expandManifestEntries(templateDir: string, entries: string[]): Promise<string[]>;
2
+ export declare function templatePath(templateDir: string, relPosix: string): string;
3
+ export interface CopyTemplateFileOptions {
4
+ templateDir: string;
5
+ workspaceRoot: string;
6
+ relPosix: string;
7
+ chmod?: number;
8
+ }
9
+ export declare function copyTemplateFileToWorkspace(options: CopyTemplateFileOptions): Promise<void>;
10
+ export interface ApplyManagedBlocksOptions {
11
+ templateDir: string;
12
+ workspaceRoot: string;
13
+ fileRel: string;
14
+ blockIds: string[];
15
+ insertIfMissing: boolean;
16
+ }
17
+ export declare function applyManagedBlocksFromTemplate(options: ApplyManagedBlocksOptions): Promise<{
18
+ changed: boolean;
19
+ }>;
20
+ export declare function ensureWorkspaceDir(workspaceRoot: string, relPosix: string): Promise<void>;
@@ -0,0 +1,123 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs/promises";
3
+ import { listFilesRecursive, pathExists, copyFile, readText, writeText, ensureDir } from "./fs.js";
4
+ import { normalizeRel, joinRel } from "./path-utils.js";
5
+ import { normalizeNewlines } from "./hash.js";
6
+ import { extractTemplateBlock, upsertManagedBlock } from "./managed-blocks.js";
7
+ import { UserError } from "./errors.js";
8
+ function extractLeadingFrontmatter(text) {
9
+ const t = normalizeNewlines(text);
10
+ if (!t.startsWith("---\n"))
11
+ return null;
12
+ const end = t.indexOf("\n---\n", 4);
13
+ if (end === -1)
14
+ return null;
15
+ const closeEnd = end + "\n---\n".length;
16
+ return {
17
+ chunk: t.slice(0, closeEnd),
18
+ rest: t.slice(closeEnd),
19
+ };
20
+ }
21
+ function syncLeadingFrontmatter(currentText, templateText) {
22
+ const templateFm = extractLeadingFrontmatter(templateText);
23
+ if (!templateFm)
24
+ return { nextText: currentText, changed: false };
25
+ const currentFm = extractLeadingFrontmatter(currentText);
26
+ if (!currentFm) {
27
+ const nextText = `${templateFm.chunk}${currentText}`;
28
+ return { nextText, changed: nextText !== currentText };
29
+ }
30
+ const nextText = `${templateFm.chunk}${currentFm.rest}`;
31
+ return { nextText, changed: nextText !== currentText };
32
+ }
33
+ function templateRelCandidates(relPosix) {
34
+ const rel = normalizeRel(relPosix);
35
+ if (!rel)
36
+ return [];
37
+ const out = [rel];
38
+ if (rel === ".gitignore" || rel.endsWith("/.gitignore")) {
39
+ out.push(rel.replace(/(^|\/)\.gitignore$/, "$1gitignore"));
40
+ }
41
+ return Array.from(new Set(out));
42
+ }
43
+ async function resolveTemplateSourcePath(templateDir, relPosix) {
44
+ for (const cand of templateRelCandidates(relPosix)) {
45
+ const abs = templatePath(templateDir, cand);
46
+ if (await pathExists(abs))
47
+ return abs;
48
+ }
49
+ return templatePath(templateDir, relPosix);
50
+ }
51
+ export async function expandManifestEntries(templateDir, entries) {
52
+ const out = new Set();
53
+ for (const raw of entries) {
54
+ const e = normalizeRel(raw);
55
+ if (!e)
56
+ continue;
57
+ if (e.includes("**")) {
58
+ const idx = e.indexOf("**");
59
+ const prefix = e.slice(0, idx).replace(/\/+$/, "");
60
+ if (!prefix)
61
+ continue;
62
+ const files = await listFilesRecursive(templateDir, prefix);
63
+ for (const f of files)
64
+ out.add(normalizeRel(f));
65
+ continue;
66
+ }
67
+ out.add(e);
68
+ }
69
+ return Array.from(out).sort();
70
+ }
71
+ export function templatePath(templateDir, relPosix) {
72
+ const rel = normalizeRel(relPosix);
73
+ return path.join(templateDir, ...rel.split("/"));
74
+ }
75
+ export async function copyTemplateFileToWorkspace(options) {
76
+ const rel = normalizeRel(options.relPosix);
77
+ const src = await resolveTemplateSourcePath(options.templateDir, rel);
78
+ const dest = joinRel(options.workspaceRoot, rel);
79
+ if (!(await pathExists(src))) {
80
+ const tried = templateRelCandidates(rel).map((c) => templatePath(options.templateDir, c));
81
+ throw new UserError(`Template file missing: ${options.relPosix}`, { details: `Tried:\n- ${tried.join("\n- ")}` });
82
+ }
83
+ const copyOpts = typeof options.chmod === "number" ? { chmod: options.chmod } : {};
84
+ await copyFile(src, dest, Object.keys(copyOpts).length > 0 ? copyOpts : undefined);
85
+ }
86
+ export async function applyManagedBlocksFromTemplate(options) {
87
+ const fileRel = normalizeRel(options.fileRel);
88
+ const dest = joinRel(options.workspaceRoot, fileRel);
89
+ const src = await resolveTemplateSourcePath(options.templateDir, fileRel);
90
+ if (!(await pathExists(src))) {
91
+ const tried = templateRelCandidates(fileRel).map((c) => templatePath(options.templateDir, c));
92
+ throw new UserError(`Template file missing: ${fileRel}`, { details: `Tried:\n- ${tried.join("\n- ")}` });
93
+ }
94
+ const templateText = normalizeNewlines(await readText(src));
95
+ if (!(await pathExists(dest))) {
96
+ await ensureDir(path.dirname(dest));
97
+ await writeText(dest, templateText);
98
+ return { changed: true };
99
+ }
100
+ const currentText = normalizeNewlines(await readText(dest));
101
+ const syncedFrontmatter = syncLeadingFrontmatter(currentText, templateText);
102
+ let nextText = syncedFrontmatter.nextText;
103
+ let anyChanged = syncedFrontmatter.changed;
104
+ for (const blockId of options.blockIds) {
105
+ const { blockChunk, innerText } = extractTemplateBlock(templateText, blockId);
106
+ const res = upsertManagedBlock(nextText, blockId, innerText, {
107
+ insertIfMissing: options.insertIfMissing,
108
+ templateBlockChunk: blockChunk,
109
+ });
110
+ nextText = res.nextText;
111
+ if (res.changed)
112
+ anyChanged = true;
113
+ }
114
+ if (anyChanged) {
115
+ await writeText(dest, nextText);
116
+ }
117
+ return { changed: anyChanged };
118
+ }
119
+ export async function ensureWorkspaceDir(workspaceRoot, relPosix) {
120
+ const abs = joinRel(workspaceRoot, relPosix);
121
+ await fs.mkdir(abs, { recursive: true });
122
+ }
123
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface ResolveWorkspaceRootOptions {
2
+ create?: boolean;
3
+ }
4
+ export declare function resolveWorkspaceRoot(targetPath: string, options?: ResolveWorkspaceRootOptions): Promise<string>;
@@ -0,0 +1,19 @@
1
+ import path from "node:path";
2
+ import fs from "node:fs/promises";
3
+ import { pathExists } from "./fs.js";
4
+ import { UserError } from "./errors.js";
5
+ export async function resolveWorkspaceRoot(targetPath, options) {
6
+ const abs = path.resolve(process.cwd(), targetPath || ".");
7
+ if (await pathExists(abs)) {
8
+ const st = await fs.stat(abs);
9
+ if (!st.isDirectory())
10
+ throw new UserError(`Not a directory: ${abs}`);
11
+ return abs;
12
+ }
13
+ if (options?.create) {
14
+ await fs.mkdir(abs, { recursive: true });
15
+ return abs;
16
+ }
17
+ throw new UserError(`Path does not exist: ${abs}`);
18
+ }
19
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,OAAqC;IAErC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC;IAC3D,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;AACrD,CAAC"}
package/package.json CHANGED
@@ -1,24 +1,32 @@
1
1
  {
2
2
  "name": "@aipper/aiws",
3
- "version": "0.0.29",
3
+ "version": "0.0.30",
4
4
  "description": "AI Workspace CLI (init/update/validate) for Claude Code / OpenCode / Codex.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "aiws": "./bin/aiws.js"
8
8
  },
9
9
  "dependencies": {
10
- "@aipper/aiws-spec": "0.0.29"
10
+ "@aipper/aiws-spec": "0.0.30"
11
11
  },
12
12
  "files": [
13
13
  "bin",
14
- "src",
14
+ "dist",
15
15
  "README.md"
16
16
  ],
17
+ "scripts": {
18
+ "build": "tsc && cp src/dashboard/index.html src/dashboard/style.css dist/dashboard/",
19
+ "prepack": "npm run build"
20
+ },
17
21
  "engines": {
18
22
  "node": ">=20"
19
23
  },
20
24
  "license": "MIT",
21
25
  "publishConfig": {
22
26
  "access": "public"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^25.9.0",
30
+ "typescript": "^6.0.3"
23
31
  }
24
32
  }