@beacon-build/sdk 1.15.0

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 (255) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +21 -0
  3. package/dist/cli/backlog.d.ts +14 -0
  4. package/dist/cli/backlog.d.ts.map +1 -0
  5. package/dist/cli/backlog.js +228 -0
  6. package/dist/cli/backlog.js.map +1 -0
  7. package/dist/cli/claude-md-check.d.ts +18 -0
  8. package/dist/cli/claude-md-check.d.ts.map +1 -0
  9. package/dist/cli/claude-md-check.js +57 -0
  10. package/dist/cli/claude-md-check.js.map +1 -0
  11. package/dist/cli/context.d.ts +14 -0
  12. package/dist/cli/context.d.ts.map +1 -0
  13. package/dist/cli/context.js +465 -0
  14. package/dist/cli/context.js.map +1 -0
  15. package/dist/cli/help.d.ts +17 -0
  16. package/dist/cli/help.d.ts.map +1 -0
  17. package/dist/cli/help.js +71 -0
  18. package/dist/cli/help.js.map +1 -0
  19. package/dist/cli/index.d.ts +22 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +212 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/cli/project-log.d.ts +16 -0
  24. package/dist/cli/project-log.d.ts.map +1 -0
  25. package/dist/cli/project-log.js +185 -0
  26. package/dist/cli/project-log.js.map +1 -0
  27. package/dist/cli/setup-worktree.d.ts +23 -0
  28. package/dist/cli/setup-worktree.d.ts.map +1 -0
  29. package/dist/cli/setup-worktree.js +396 -0
  30. package/dist/cli/setup-worktree.js.map +1 -0
  31. package/dist/cli/update-client.d.ts +14 -0
  32. package/dist/cli/update-client.d.ts.map +1 -0
  33. package/dist/cli/update-client.js +629 -0
  34. package/dist/cli/update-client.js.map +1 -0
  35. package/dist/cli/workflow-sync.d.ts +19 -0
  36. package/dist/cli/workflow-sync.d.ts.map +1 -0
  37. package/dist/cli/workflow-sync.js +133 -0
  38. package/dist/cli/workflow-sync.js.map +1 -0
  39. package/dist/clients/admin/agents.client.d.ts +38 -0
  40. package/dist/clients/admin/agents.client.d.ts.map +1 -0
  41. package/dist/clients/admin/agents.client.js +90 -0
  42. package/dist/clients/admin/agents.client.js.map +1 -0
  43. package/dist/clients/admin/alerts.client.d.ts +8 -0
  44. package/dist/clients/admin/alerts.client.d.ts.map +1 -0
  45. package/dist/clients/admin/alerts.client.js +11 -0
  46. package/dist/clients/admin/alerts.client.js.map +1 -0
  47. package/dist/clients/admin/assets.client.d.ts +19 -0
  48. package/dist/clients/admin/assets.client.d.ts.map +1 -0
  49. package/dist/clients/admin/assets.client.js +27 -0
  50. package/dist/clients/admin/assets.client.js.map +1 -0
  51. package/dist/clients/admin/board-messages.client.d.ts +13 -0
  52. package/dist/clients/admin/board-messages.client.d.ts.map +1 -0
  53. package/dist/clients/admin/board-messages.client.js +16 -0
  54. package/dist/clients/admin/board-messages.client.js.map +1 -0
  55. package/dist/clients/admin/conversation-messages.client.d.ts +11 -0
  56. package/dist/clients/admin/conversation-messages.client.d.ts.map +1 -0
  57. package/dist/clients/admin/conversation-messages.client.js +27 -0
  58. package/dist/clients/admin/conversation-messages.client.js.map +1 -0
  59. package/dist/clients/admin/db.client.d.ts +12 -0
  60. package/dist/clients/admin/db.client.d.ts.map +1 -0
  61. package/dist/clients/admin/db.client.js +13 -0
  62. package/dist/clients/admin/db.client.js.map +1 -0
  63. package/dist/clients/admin/documents.client.d.ts +23 -0
  64. package/dist/clients/admin/documents.client.d.ts.map +1 -0
  65. package/dist/clients/admin/documents.client.js +33 -0
  66. package/dist/clients/admin/documents.client.js.map +1 -0
  67. package/dist/clients/admin/github-proxy.client.d.ts +12 -0
  68. package/dist/clients/admin/github-proxy.client.d.ts.map +1 -0
  69. package/dist/clients/admin/github-proxy.client.js +10 -0
  70. package/dist/clients/admin/github-proxy.client.js.map +1 -0
  71. package/dist/clients/admin/memories.client.d.ts +25 -0
  72. package/dist/clients/admin/memories.client.d.ts.map +1 -0
  73. package/dist/clients/admin/memories.client.js +67 -0
  74. package/dist/clients/admin/memories.client.js.map +1 -0
  75. package/dist/clients/admin/organizations.client.d.ts +25 -0
  76. package/dist/clients/admin/organizations.client.d.ts.map +1 -0
  77. package/dist/clients/admin/organizations.client.js +33 -0
  78. package/dist/clients/admin/organizations.client.js.map +1 -0
  79. package/dist/clients/admin/planning.client.d.ts +16 -0
  80. package/dist/clients/admin/planning.client.d.ts.map +1 -0
  81. package/dist/clients/admin/planning.client.js +24 -0
  82. package/dist/clients/admin/planning.client.js.map +1 -0
  83. package/dist/clients/admin/projects.client.d.ts +10 -0
  84. package/dist/clients/admin/projects.client.d.ts.map +1 -0
  85. package/dist/clients/admin/projects.client.js +21 -0
  86. package/dist/clients/admin/projects.client.js.map +1 -0
  87. package/dist/clients/admin/sessions.client.d.ts +23 -0
  88. package/dist/clients/admin/sessions.client.d.ts.map +1 -0
  89. package/dist/clients/admin/sessions.client.js +53 -0
  90. package/dist/clients/admin/sessions.client.js.map +1 -0
  91. package/dist/clients/admin/tasks.client.d.ts +21 -0
  92. package/dist/clients/admin/tasks.client.d.ts.map +1 -0
  93. package/dist/clients/admin/tasks.client.js +44 -0
  94. package/dist/clients/admin/tasks.client.js.map +1 -0
  95. package/dist/clients/admin/tool-calls.client.d.ts +12 -0
  96. package/dist/clients/admin/tool-calls.client.d.ts.map +1 -0
  97. package/dist/clients/admin/tool-calls.client.js +29 -0
  98. package/dist/clients/admin/tool-calls.client.js.map +1 -0
  99. package/dist/clients/admin/usage.client.d.ts +23 -0
  100. package/dist/clients/admin/usage.client.d.ts.map +1 -0
  101. package/dist/clients/admin/usage.client.js +37 -0
  102. package/dist/clients/admin/usage.client.js.map +1 -0
  103. package/dist/clients/admin/users.client.d.ts +17 -0
  104. package/dist/clients/admin/users.client.d.ts.map +1 -0
  105. package/dist/clients/admin/users.client.js +24 -0
  106. package/dist/clients/admin/users.client.js.map +1 -0
  107. package/dist/clients/agent/messaging.client.d.ts +13 -0
  108. package/dist/clients/agent/messaging.client.d.ts.map +1 -0
  109. package/dist/clients/agent/messaging.client.js +37 -0
  110. package/dist/clients/agent/messaging.client.js.map +1 -0
  111. package/dist/clients/agent/tasks.client.d.ts +18 -0
  112. package/dist/clients/agent/tasks.client.d.ts.map +1 -0
  113. package/dist/clients/agent/tasks.client.js +68 -0
  114. package/dist/clients/agent/tasks.client.js.map +1 -0
  115. package/dist/clients/auth.client.d.ts +40 -0
  116. package/dist/clients/auth.client.d.ts.map +1 -0
  117. package/dist/clients/auth.client.js +78 -0
  118. package/dist/clients/auth.client.js.map +1 -0
  119. package/dist/clients/ops/agents-ops.client.d.ts +46 -0
  120. package/dist/clients/ops/agents-ops.client.d.ts.map +1 -0
  121. package/dist/clients/ops/agents-ops.client.js +117 -0
  122. package/dist/clients/ops/agents-ops.client.js.map +1 -0
  123. package/dist/clients/ops/board-messages-ops.client.d.ts +14 -0
  124. package/dist/clients/ops/board-messages-ops.client.d.ts.map +1 -0
  125. package/dist/clients/ops/board-messages-ops.client.js +26 -0
  126. package/dist/clients/ops/board-messages-ops.client.js.map +1 -0
  127. package/dist/clients/ops/conversation-messages-ops.client.d.ts +10 -0
  128. package/dist/clients/ops/conversation-messages-ops.client.d.ts.map +1 -0
  129. package/dist/clients/ops/conversation-messages-ops.client.js +20 -0
  130. package/dist/clients/ops/conversation-messages-ops.client.js.map +1 -0
  131. package/dist/clients/ops/documents-ops.client.d.ts +20 -0
  132. package/dist/clients/ops/documents-ops.client.d.ts.map +1 -0
  133. package/dist/clients/ops/documents-ops.client.js +31 -0
  134. package/dist/clients/ops/documents-ops.client.js.map +1 -0
  135. package/dist/clients/ops/memories-ops.client.d.ts +25 -0
  136. package/dist/clients/ops/memories-ops.client.d.ts.map +1 -0
  137. package/dist/clients/ops/memories-ops.client.js +71 -0
  138. package/dist/clients/ops/memories-ops.client.js.map +1 -0
  139. package/dist/clients/ops/ops-db.client.d.ts +29 -0
  140. package/dist/clients/ops/ops-db.client.d.ts.map +1 -0
  141. package/dist/clients/ops/ops-db.client.js +35 -0
  142. package/dist/clients/ops/ops-db.client.js.map +1 -0
  143. package/dist/clients/ops/ops-logs.client.d.ts +22 -0
  144. package/dist/clients/ops/ops-logs.client.d.ts.map +1 -0
  145. package/dist/clients/ops/ops-logs.client.js +24 -0
  146. package/dist/clients/ops/ops-logs.client.js.map +1 -0
  147. package/dist/clients/ops/ops-mq.client.d.ts +19 -0
  148. package/dist/clients/ops/ops-mq.client.d.ts.map +1 -0
  149. package/dist/clients/ops/ops-mq.client.js +16 -0
  150. package/dist/clients/ops/ops-mq.client.js.map +1 -0
  151. package/dist/clients/ops/ops-northflank.client.d.ts +34 -0
  152. package/dist/clients/ops/ops-northflank.client.d.ts.map +1 -0
  153. package/dist/clients/ops/ops-northflank.client.js +42 -0
  154. package/dist/clients/ops/ops-northflank.client.js.map +1 -0
  155. package/dist/clients/ops/ops-storage.client.d.ts +34 -0
  156. package/dist/clients/ops/ops-storage.client.d.ts.map +1 -0
  157. package/dist/clients/ops/ops-storage.client.js +39 -0
  158. package/dist/clients/ops/ops-storage.client.js.map +1 -0
  159. package/dist/clients/ops/projects-ops.client.d.ts +20 -0
  160. package/dist/clients/ops/projects-ops.client.d.ts.map +1 -0
  161. package/dist/clients/ops/projects-ops.client.js +18 -0
  162. package/dist/clients/ops/projects-ops.client.js.map +1 -0
  163. package/dist/clients/ops/realtime-ops.client.d.ts +14 -0
  164. package/dist/clients/ops/realtime-ops.client.d.ts.map +1 -0
  165. package/dist/clients/ops/realtime-ops.client.js +10 -0
  166. package/dist/clients/ops/realtime-ops.client.js.map +1 -0
  167. package/dist/clients/ops/sessions-ops.client.d.ts +29 -0
  168. package/dist/clients/ops/sessions-ops.client.d.ts.map +1 -0
  169. package/dist/clients/ops/sessions-ops.client.js +69 -0
  170. package/dist/clients/ops/sessions-ops.client.js.map +1 -0
  171. package/dist/clients/ops/tasks-ops.client.d.ts +18 -0
  172. package/dist/clients/ops/tasks-ops.client.d.ts.map +1 -0
  173. package/dist/clients/ops/tasks-ops.client.js +37 -0
  174. package/dist/clients/ops/tasks-ops.client.js.map +1 -0
  175. package/dist/clients/ops/tool-calls-ops.client.d.ts +12 -0
  176. package/dist/clients/ops/tool-calls-ops.client.d.ts.map +1 -0
  177. package/dist/clients/ops/tool-calls-ops.client.js +29 -0
  178. package/dist/clients/ops/tool-calls-ops.client.js.map +1 -0
  179. package/dist/clients/ops/usage-workflows-ops.client.d.ts +22 -0
  180. package/dist/clients/ops/usage-workflows-ops.client.d.ts.map +1 -0
  181. package/dist/clients/ops/usage-workflows-ops.client.js +23 -0
  182. package/dist/clients/ops/usage-workflows-ops.client.js.map +1 -0
  183. package/dist/factory/admin-sdk.d.ts +53 -0
  184. package/dist/factory/admin-sdk.d.ts.map +1 -0
  185. package/dist/factory/admin-sdk.js +59 -0
  186. package/dist/factory/admin-sdk.js.map +1 -0
  187. package/dist/factory/agent-sdk.d.ts +22 -0
  188. package/dist/factory/agent-sdk.d.ts.map +1 -0
  189. package/dist/factory/agent-sdk.js +22 -0
  190. package/dist/factory/agent-sdk.js.map +1 -0
  191. package/dist/factory/ops-sdk.d.ts +53 -0
  192. package/dist/factory/ops-sdk.d.ts.map +1 -0
  193. package/dist/factory/ops-sdk.js +56 -0
  194. package/dist/factory/ops-sdk.js.map +1 -0
  195. package/dist/index.d.ts +37 -0
  196. package/dist/index.d.ts.map +1 -0
  197. package/dist/index.js +45 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/legacy/sdk-factory.d.ts +34 -0
  200. package/dist/legacy/sdk-factory.d.ts.map +1 -0
  201. package/dist/legacy/sdk-factory.js +34 -0
  202. package/dist/legacy/sdk-factory.js.map +1 -0
  203. package/dist/lib/context.d.ts +69 -0
  204. package/dist/lib/context.d.ts.map +1 -0
  205. package/dist/lib/context.js +225 -0
  206. package/dist/lib/context.js.map +1 -0
  207. package/dist/lib/db.d.ts +16 -0
  208. package/dist/lib/db.d.ts.map +1 -0
  209. package/dist/lib/db.js +50 -0
  210. package/dist/lib/db.js.map +1 -0
  211. package/dist/lib/logger.d.ts +14 -0
  212. package/dist/lib/logger.d.ts.map +1 -0
  213. package/dist/lib/logger.js +14 -0
  214. package/dist/lib/logger.js.map +1 -0
  215. package/dist/lib/opencode.d.ts +33 -0
  216. package/dist/lib/opencode.d.ts.map +1 -0
  217. package/dist/lib/opencode.js +101 -0
  218. package/dist/lib/opencode.js.map +1 -0
  219. package/dist/lib/utils.d.ts +18 -0
  220. package/dist/lib/utils.d.ts.map +1 -0
  221. package/dist/lib/utils.js +40 -0
  222. package/dist/lib/utils.js.map +1 -0
  223. package/dist/manifest.d.ts +26 -0
  224. package/dist/manifest.d.ts.map +1 -0
  225. package/dist/manifest.js +700 -0
  226. package/dist/manifest.js.map +1 -0
  227. package/dist/realtime/realtime.client.d.ts +76 -0
  228. package/dist/realtime/realtime.client.d.ts.map +1 -0
  229. package/dist/realtime/realtime.client.js +168 -0
  230. package/dist/realtime/realtime.client.js.map +1 -0
  231. package/dist/transport/binary-client.d.ts +23 -0
  232. package/dist/transport/binary-client.d.ts.map +1 -0
  233. package/dist/transport/binary-client.js +69 -0
  234. package/dist/transport/binary-client.js.map +1 -0
  235. package/dist/transport/errors.d.ts +14 -0
  236. package/dist/transport/errors.d.ts.map +1 -0
  237. package/dist/transport/errors.js +57 -0
  238. package/dist/transport/errors.js.map +1 -0
  239. package/dist/transport/http-client.d.ts +23 -0
  240. package/dist/transport/http-client.d.ts.map +1 -0
  241. package/dist/transport/http-client.js +88 -0
  242. package/dist/transport/http-client.js.map +1 -0
  243. package/dist/transport/multipart-client.d.ts +25 -0
  244. package/dist/transport/multipart-client.d.ts.map +1 -0
  245. package/dist/transport/multipart-client.js +87 -0
  246. package/dist/transport/multipart-client.js.map +1 -0
  247. package/dist/transport/ops-api-client.d.ts +39 -0
  248. package/dist/transport/ops-api-client.d.ts.map +1 -0
  249. package/dist/transport/ops-api-client.js +153 -0
  250. package/dist/transport/ops-api-client.js.map +1 -0
  251. package/dist/transport/sse-client.d.ts +33 -0
  252. package/dist/transport/sse-client.d.ts.map +1 -0
  253. package/dist/transport/sse-client.js +127 -0
  254. package/dist/transport/sse-client.js.map +1 -0
  255. package/package.json +32 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,36 @@
1
+ # @beacon-build/sdk Changelog
2
+
3
+ ## 2.0.0 (2026-05-27)
4
+
5
+ ### Breaking Changes
6
+
7
+ - Package renamed from `@beacon-build/client` to `@beacon-build/sdk`
8
+ - New factory functions: `createAdminClient`, `createAgentClient`, `createOpsClient`
9
+ - Old `SdkFactory.forAgent()` replaced by `createAgentClient` + `createOpsClient`
10
+
11
+ ### New Features
12
+
13
+ - `createAdminClient` — User-JWT authenticated SDK with 17 domain clients
14
+ - `createAgentClient` — Agent-JWT authenticated SDK (tasks + messaging)
15
+ - `createOpsClient` — OPS_API_KEY authenticated SDK with 15 clients
16
+ - `createAuthClient` — Auth flow helper (login, register, refresh, logout, me)
17
+ - `MultipartClient` — Multipart upload transport (avatars, assets, storage)
18
+ - `BinaryClient` — Binary download transport (storage proxy)
19
+ - `SseClient` — Generic SSE stream reader (ops db/jobs/logs)
20
+ - Full `RealtimeSdkClient` export (F141)
21
+ - SDK endpoint manifest for OpenAPI coverage testing
22
+
23
+ ### Migration from `@beacon-build/client`
24
+
25
+ Replace all imports:
26
+
27
+ ```typescript
28
+ // Before
29
+ import { SdkFactory, OpsApiClient } from '@beacon-build/client'
30
+
31
+ // After
32
+ import { createAgentClient, createOpsClient } from '@beacon-build/sdk'
33
+ ```
34
+
35
+ Legacy class-based exports (`SdkFactory`, `AgentSdkClient`, etc.) remain available for
36
+ backward compatibility but are deprecated. Migrate to factory functions for new code.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 beacon Platform
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * beacon-backlog — @beacon-build/sdk
4
+ *
5
+ * Generates a backlog.md from the tasks table in PostgreSQL.
6
+ * Supports arbitrary nesting: FeatureSet -> Feature/Task.
7
+ * Renders time totals per group from result.time_h.
8
+ *
9
+ * Usage:
10
+ * beacon-backlog <project> # print to stdout
11
+ * beacon-backlog <project> --write # write to <project>/docs/backlog.md
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=backlog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlog.d.ts","sourceRoot":"","sources":["../../src/cli/backlog.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * beacon-backlog — @beacon-build/sdk
4
+ *
5
+ * Generates a backlog.md from the tasks table in PostgreSQL.
6
+ * Supports arbitrary nesting: FeatureSet -> Feature/Task.
7
+ * Renders time totals per group from result.time_h.
8
+ *
9
+ * Usage:
10
+ * beacon-backlog <project> # print to stdout
11
+ * beacon-backlog <project> --write # write to <project>/docs/backlog.md
12
+ */
13
+ import { Pool } from 'pg';
14
+ import { writeFileSync, readFileSync, existsSync } from 'node:fs';
15
+ import { resolve } from 'node:path';
16
+ import { parse } from 'yaml';
17
+ import { getDatabaseUrl } from '../lib/db.js';
18
+ import { createCliLogger } from '../lib/logger.js';
19
+ const log = createCliLogger('backlog');
20
+ // ─── CLI ────────────────────────────────────────────────────────────────────
21
+ const args = process.argv.slice(2).filter((a) => !a.startsWith('-'));
22
+ const flags = process.argv.slice(2).filter((a) => a.startsWith('-'));
23
+ const project = args[0];
24
+ const doWrite = flags.includes('--write');
25
+ if (!project) {
26
+ log.error('missing required argument', { usage: 'beacon-cli backlog <project> [--write]' });
27
+ process.exit(1);
28
+ }
29
+ // ─── Query ──────────────────────────────────────────────────────────────────
30
+ const pool = new Pool({ connectionString: getDatabaseUrl() });
31
+ const { rows: tasks } = await pool.query(`SELECT id, ref, title, description, type AS task_type, status, priority, size, parent_id, depends_on, result
32
+ FROM tasks
33
+ WHERE project = $1
34
+ ORDER BY ref ASC`, [project]);
35
+ await pool.end();
36
+ if (!tasks.length) {
37
+ log.warn('no tasks found', { project });
38
+ process.exit(1);
39
+ }
40
+ // ─── Helpers ────────────────────────────────────────────────────────────────
41
+ const taskById = new Map(tasks.map((t) => [t.id, t]));
42
+ function sortByTaskId(list) {
43
+ return list.sort((a, b) => {
44
+ const na = parseInt((a.ref ?? '').replace(/\D+/g, ''), 10) || 0;
45
+ const nb = parseInt((b.ref ?? '').replace(/\D+/g, ''), 10) || 0;
46
+ return na - nb;
47
+ });
48
+ }
49
+ function sortByPrioDesc(list) {
50
+ return list.sort((a, b) => {
51
+ if (b.priority !== a.priority)
52
+ return b.priority - a.priority;
53
+ const na = parseInt((a.ref ?? '').replace(/\D+/g, ''), 10) || 0;
54
+ const nb = parseInt((b.ref ?? '').replace(/\D+/g, ''), 10) || 0;
55
+ return na - nb;
56
+ });
57
+ }
58
+ // ─── Build tree ─────────────────────────────────────────────────────────────
59
+ const childrenByParent = new Map();
60
+ for (const t of tasks) {
61
+ if (t.parent_id) {
62
+ if (!childrenByParent.has(t.parent_id))
63
+ childrenByParent.set(t.parent_id, []);
64
+ childrenByParent.get(t.parent_id).push(t);
65
+ }
66
+ }
67
+ const rootFeatureSets = sortByTaskId(tasks.filter((t) => !t.parent_id && t.task_type === 'featureSet'));
68
+ const topLevel = sortByTaskId(tasks.filter((t) => !t.parent_id && t.task_type !== 'featureSet'));
69
+ // ─── Recursive time sum ─────────────────────────────────────────────────────
70
+ function sumTimeH(taskId) {
71
+ const children = childrenByParent.get(taskId) ?? [];
72
+ let total = 0;
73
+ for (const child of children) {
74
+ total += child.result?.time_h ?? 0;
75
+ if (child.task_type === 'featureSet') {
76
+ total += sumTimeH(child.id);
77
+ }
78
+ }
79
+ return total;
80
+ }
81
+ // ─── Format ─────────────────────────────────────────────────────────────────
82
+ const STATUS_ICON = {
83
+ queued: '\u2B1A',
84
+ in_progress: '\u25B6',
85
+ done: '\u2713',
86
+ failed: '\u2717',
87
+ cancelled: '\u2014',
88
+ };
89
+ const PRIORITY_LABEL = {
90
+ 0: '',
91
+ 10: '\u2605',
92
+ 20: '\u2605\u2605',
93
+ 50: '\uD83D\uDD25',
94
+ };
95
+ function formatTask(t, indent = '') {
96
+ const icon = STATUS_ICON[t.status] ?? '?';
97
+ const prio = PRIORITY_LABEL[t.priority] ?? (t.priority > 0 ? `p${t.priority}` : '');
98
+ const size = t.size ? `[${t.size}]` : '';
99
+ const type = !['feature', 'featureSet'].includes(t.task_type) ? `(${t.task_type})` : '';
100
+ const depsArr = Array.isArray(t.depends_on)
101
+ ? t.depends_on
102
+ : typeof t.depends_on === 'string'
103
+ ? JSON.parse(t.depends_on)
104
+ : [];
105
+ const deps = depsArr.map((id) => taskById.get(id)?.ref ?? id.slice(0, 8)).join(', ');
106
+ const id = t.ref ?? t.id.slice(0, 8);
107
+ const parts = [`${indent}- [${icon}] **${id}** ${t.title}`];
108
+ if (size)
109
+ parts.push(size);
110
+ if (prio)
111
+ parts.push(prio);
112
+ if (type)
113
+ parts.push(type);
114
+ if (deps)
115
+ parts.push(`\u2190 ${deps}`);
116
+ return parts.join(' ');
117
+ }
118
+ // ─── Recursive renderer for featureSets ─────────────────────────────────────
119
+ function renderFeatureSet(fs, depth = 0) {
120
+ const result = [];
121
+ const icon = STATUS_ICON[fs.status] ?? '?';
122
+ const headerPrefix = '#'.repeat(3 + depth);
123
+ const timeH = sumTimeH(fs.id);
124
+ const timeSuffix = timeH > 0 ? ` (${timeH.toFixed(1)}h)` : '';
125
+ result.push(`${headerPrefix} ${fs.ref}: ${fs.title} [${icon}]${timeSuffix}`);
126
+ if (fs.description)
127
+ result.push(`> ${fs.description}`);
128
+ result.push('');
129
+ const children = sortByTaskId(childrenByParent.get(fs.id) ?? []);
130
+ const childFeatureSets = children.filter((c) => c.task_type === 'featureSet');
131
+ const childTasks = children.filter((c) => c.task_type !== 'featureSet');
132
+ const indent = ' '.repeat(depth);
133
+ if (childTasks.length) {
134
+ for (const child of childTasks) {
135
+ result.push(formatTask(child, indent));
136
+ }
137
+ result.push('');
138
+ }
139
+ for (const childFs of childFeatureSets) {
140
+ result.push(...renderFeatureSet(childFs, depth + 1));
141
+ }
142
+ return result;
143
+ }
144
+ // ─── Collect all open items ─────────────────────────────────────────────────
145
+ const allOpen = sortByPrioDesc(tasks.filter((t) => t.task_type !== 'featureSet' && (t.status === 'queued' || t.status === 'in_progress')));
146
+ // ─── Build output ──────────────────────────────────────────────────────────
147
+ const lines = [];
148
+ lines.push(`# ${project} \u2014 Backlog`);
149
+ lines.push('');
150
+ lines.push(`> Generated from tasks DB on ${new Date().toISOString().slice(0, 10)}`);
151
+ lines.push('');
152
+ if (allOpen.length) {
153
+ lines.push('## Up Next');
154
+ lines.push('');
155
+ for (const t of allOpen) {
156
+ const parent = t.parent_id ? taskById.get(t.parent_id) : null;
157
+ const parentRef = parent ? ` \u00B7 ${parent.ref}` : '';
158
+ lines.push(formatTask(t) + parentRef);
159
+ }
160
+ lines.push('');
161
+ }
162
+ if (rootFeatureSets.length) {
163
+ lines.push('## Feature Sets');
164
+ lines.push('');
165
+ for (const fs of rootFeatureSets) {
166
+ lines.push(...renderFeatureSet(fs));
167
+ }
168
+ }
169
+ const queued = topLevel.filter((t) => t.status === 'queued' || t.status === 'in_progress');
170
+ const done = topLevel.filter((t) => t.status === 'done');
171
+ const rest = topLevel.filter((t) => !['queued', 'in_progress', 'done'].includes(t.status));
172
+ if (queued.length) {
173
+ lines.push('## Open');
174
+ lines.push('');
175
+ for (const t of queued)
176
+ lines.push(formatTask(t));
177
+ lines.push('');
178
+ }
179
+ if (rest.length) {
180
+ lines.push('## Other');
181
+ lines.push('');
182
+ for (const t of rest)
183
+ lines.push(formatTask(t));
184
+ lines.push('');
185
+ }
186
+ if (done.length) {
187
+ lines.push('<details>');
188
+ lines.push('<summary>Done (' + done.length + ')</summary>');
189
+ lines.push('');
190
+ for (const t of done)
191
+ lines.push(formatTask(t));
192
+ lines.push('');
193
+ lines.push('</details>');
194
+ lines.push('');
195
+ }
196
+ // ─── Output ─────────────────────────────────────────────────────────────────
197
+ const output = lines.join('\n');
198
+ if (doWrite) {
199
+ let root = process.cwd();
200
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
201
+ const candidates = [
202
+ resolve(home, '.beacon-platform', 'projects.yaml'),
203
+ resolve(process.cwd(), 'servers', 'beacon-agent', 'projects.yaml'),
204
+ ];
205
+ for (const yamlPath of candidates) {
206
+ if (!existsSync(yamlPath))
207
+ continue;
208
+ const doc = parse(readFileSync(yamlPath, 'utf-8'));
209
+ const entry = doc?.projects?.[project];
210
+ if (entry?.path) {
211
+ root = entry.path;
212
+ break;
213
+ }
214
+ }
215
+ const outPath = resolve(root, 'docs', 'backlog.md');
216
+ const newContent = output + '\n';
217
+ if (existsSync(outPath) && readFileSync(outPath, 'utf-8') === newContent) {
218
+ log.info('skipped (unchanged)', { path: outPath });
219
+ }
220
+ else {
221
+ writeFileSync(outPath, newContent);
222
+ log.info('written', { path: outPath });
223
+ }
224
+ }
225
+ else {
226
+ console.log(output);
227
+ }
228
+ //# sourceMappingURL=backlog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlog.js","sourceRoot":"","sources":["../../src/cli/backlog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * beacon-claude-md-check — @beacon-build/sdk
4
+ *
5
+ * Validates CLAUDE.md auto-triggers against practice files.
6
+ * Checks that every practice doc in docs/constitution/practices/ has a
7
+ * corresponding entry in the CLAUDE.md auto-trigger table.
8
+ *
9
+ * Usage:
10
+ * beacon-claude-md-check [project-root] # defaults to cwd
11
+ *
12
+ * Exit codes:
13
+ * 0 — all checks passed
14
+ * 1 — gaps found
15
+ * 2 — CLAUDE.md or practices dir not found
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=claude-md-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md-check.d.ts","sourceRoot":"","sources":["../../src/cli/claude-md-check.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * beacon-claude-md-check — @beacon-build/sdk
4
+ *
5
+ * Validates CLAUDE.md auto-triggers against practice files.
6
+ * Checks that every practice doc in docs/constitution/practices/ has a
7
+ * corresponding entry in the CLAUDE.md auto-trigger table.
8
+ *
9
+ * Usage:
10
+ * beacon-claude-md-check [project-root] # defaults to cwd
11
+ *
12
+ * Exit codes:
13
+ * 0 — all checks passed
14
+ * 1 — gaps found
15
+ * 2 — CLAUDE.md or practices dir not found
16
+ */
17
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
18
+ import { join } from 'node:path';
19
+ import { createCliLogger } from '../lib/logger.js';
20
+ const log = createCliLogger('claude-md-check');
21
+ const projectRoot = process.argv[2] ?? process.cwd();
22
+ const claudeMd = join(projectRoot, 'CLAUDE.md');
23
+ const practicesDir = join(projectRoot, 'docs', 'constitution', 'practices');
24
+ if (!existsSync(claudeMd)) {
25
+ log.error('CLAUDE.md not found', { path: claudeMd });
26
+ process.exit(2);
27
+ }
28
+ if (!existsSync(practicesDir)) {
29
+ log.error('practices directory not found', { path: practicesDir });
30
+ process.exit(2);
31
+ }
32
+ const practiceFiles = readdirSync(practicesDir)
33
+ .filter((f) => f.endsWith('.md') && f !== 'README.md')
34
+ .map((f) => f.replace('.md', ''));
35
+ const claudeContent = readFileSync(claudeMd, 'utf-8');
36
+ const referencedPractices = new Set();
37
+ const practiceRefPattern = /practices\/([a-z0-9_-]+)\.md/gi;
38
+ let match;
39
+ while ((match = practiceRefPattern.exec(claudeContent)) !== null) {
40
+ referencedPractices.add(match[1]);
41
+ }
42
+ const missing = practiceFiles.filter((p) => !referencedPractices.has(p));
43
+ const stale = [...referencedPractices].filter((p) => !practiceFiles.includes(p));
44
+ let hasErrors = false;
45
+ if (missing.length > 0) {
46
+ log.error('practices missing from CLAUDE.md auto-triggers', { missing });
47
+ hasErrors = true;
48
+ }
49
+ if (stale.length > 0) {
50
+ log.warn('CLAUDE.md references practices that no longer exist', { stale });
51
+ hasErrors = true;
52
+ }
53
+ if (!hasErrors) {
54
+ log.info('all auto-triggers complete', { practices: practiceFiles.length });
55
+ }
56
+ process.exit(hasErrors ? 1 : 0);
57
+ //# sourceMappingURL=claude-md-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md-check.js","sourceRoot":"","sources":["../../src/cli/claude-md-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * beacon-context — @beacon-build/sdk (F161)
4
+ *
5
+ * Generates context sections split across two files:
6
+ * AGENTS.md — system-agnostic sections: worker, context, monorepo, code-repo
7
+ * CLAUDE.md — Claude Code-specific: triggers; @AGENTS.md import
8
+ *
9
+ * Usage:
10
+ * beacon-context <project> # print to stdout
11
+ * beacon-context <project> --write # write both files
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}