@wandoupeas/coding-forge 0.1.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 (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/dist/agent/adapters/base.d.ts +9 -0
  4. package/dist/agent/adapters/base.d.ts.map +1 -0
  5. package/dist/agent/adapters/base.js +2 -0
  6. package/dist/agent/adapters/base.js.map +1 -0
  7. package/dist/agent/adapters/claude-code.d.ts +4 -0
  8. package/dist/agent/adapters/claude-code.d.ts.map +1 -0
  9. package/dist/agent/adapters/claude-code.js +25 -0
  10. package/dist/agent/adapters/claude-code.js.map +1 -0
  11. package/dist/agent/adapters/codex.d.ts +4 -0
  12. package/dist/agent/adapters/codex.d.ts.map +1 -0
  13. package/dist/agent/adapters/codex.js +27 -0
  14. package/dist/agent/adapters/codex.js.map +1 -0
  15. package/dist/agent/adapters/command-bridge.d.ts +67 -0
  16. package/dist/agent/adapters/command-bridge.d.ts.map +1 -0
  17. package/dist/agent/adapters/command-bridge.js +266 -0
  18. package/dist/agent/adapters/command-bridge.js.map +1 -0
  19. package/dist/agent/adapters/index.d.ts +7 -0
  20. package/dist/agent/adapters/index.d.ts.map +1 -0
  21. package/dist/agent/adapters/index.js +25 -0
  22. package/dist/agent/adapters/index.js.map +1 -0
  23. package/dist/agent/adapters/stub.d.ts +3 -0
  24. package/dist/agent/adapters/stub.d.ts.map +1 -0
  25. package/dist/agent/adapters/stub.js +66 -0
  26. package/dist/agent/adapters/stub.js.map +1 -0
  27. package/dist/agent/context.d.ts +36 -0
  28. package/dist/agent/context.d.ts.map +1 -0
  29. package/dist/agent/context.js +16 -0
  30. package/dist/agent/context.js.map +1 -0
  31. package/dist/agent/handlers/index.d.ts +6 -0
  32. package/dist/agent/handlers/index.d.ts.map +1 -0
  33. package/dist/agent/handlers/index.js +61 -0
  34. package/dist/agent/handlers/index.js.map +1 -0
  35. package/dist/agent/index.d.ts +18 -0
  36. package/dist/agent/index.d.ts.map +1 -0
  37. package/dist/agent/index.js +37 -0
  38. package/dist/agent/index.js.map +1 -0
  39. package/dist/agent/types.d.ts +21 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +5 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/cli/agent-briefing.d.ts +24 -0
  44. package/dist/cli/agent-briefing.d.ts.map +1 -0
  45. package/dist/cli/agent-briefing.js +133 -0
  46. package/dist/cli/agent-briefing.js.map +1 -0
  47. package/dist/cli/commands/checkpoint.d.ts +12 -0
  48. package/dist/cli/commands/checkpoint.d.ts.map +1 -0
  49. package/dist/cli/commands/checkpoint.js +86 -0
  50. package/dist/cli/commands/checkpoint.js.map +1 -0
  51. package/dist/cli/commands/dashboard.d.ts +14 -0
  52. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  53. package/dist/cli/commands/dashboard.js +192 -0
  54. package/dist/cli/commands/dashboard.js.map +1 -0
  55. package/dist/cli/commands/doctor.d.ts +27 -0
  56. package/dist/cli/commands/doctor.d.ts.map +1 -0
  57. package/dist/cli/commands/doctor.js +425 -0
  58. package/dist/cli/commands/doctor.js.map +1 -0
  59. package/dist/cli/commands/init.d.ts +19 -0
  60. package/dist/cli/commands/init.d.ts.map +1 -0
  61. package/dist/cli/commands/init.js +303 -0
  62. package/dist/cli/commands/init.js.map +1 -0
  63. package/dist/cli/commands/knowledge.d.ts +6 -0
  64. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  65. package/dist/cli/commands/knowledge.js +408 -0
  66. package/dist/cli/commands/knowledge.js.map +1 -0
  67. package/dist/cli/commands/logs.d.ts +50 -0
  68. package/dist/cli/commands/logs.d.ts.map +1 -0
  69. package/dist/cli/commands/logs.js +248 -0
  70. package/dist/cli/commands/logs.js.map +1 -0
  71. package/dist/cli/commands/mailbox.d.ts +12 -0
  72. package/dist/cli/commands/mailbox.d.ts.map +1 -0
  73. package/dist/cli/commands/mailbox.js +131 -0
  74. package/dist/cli/commands/mailbox.js.map +1 -0
  75. package/dist/cli/commands/onboard.d.ts +43 -0
  76. package/dist/cli/commands/onboard.d.ts.map +1 -0
  77. package/dist/cli/commands/onboard.js +313 -0
  78. package/dist/cli/commands/onboard.js.map +1 -0
  79. package/dist/cli/commands/plan.d.ts +16 -0
  80. package/dist/cli/commands/plan.d.ts.map +1 -0
  81. package/dist/cli/commands/plan.js +211 -0
  82. package/dist/cli/commands/plan.js.map +1 -0
  83. package/dist/cli/commands/resume.d.ts +102 -0
  84. package/dist/cli/commands/resume.d.ts.map +1 -0
  85. package/dist/cli/commands/resume.js +256 -0
  86. package/dist/cli/commands/resume.js.map +1 -0
  87. package/dist/cli/commands/review.d.ts +13 -0
  88. package/dist/cli/commands/review.d.ts.map +1 -0
  89. package/dist/cli/commands/review.js +91 -0
  90. package/dist/cli/commands/review.js.map +1 -0
  91. package/dist/cli/commands/run.d.ts +19 -0
  92. package/dist/cli/commands/run.d.ts.map +1 -0
  93. package/dist/cli/commands/run.js +161 -0
  94. package/dist/cli/commands/run.js.map +1 -0
  95. package/dist/cli/commands/superpowers.d.ts +21 -0
  96. package/dist/cli/commands/superpowers.d.ts.map +1 -0
  97. package/dist/cli/commands/superpowers.js +135 -0
  98. package/dist/cli/commands/superpowers.js.map +1 -0
  99. package/dist/cli/commands/ui.d.ts +14 -0
  100. package/dist/cli/commands/ui.d.ts.map +1 -0
  101. package/dist/cli/commands/ui.js +41 -0
  102. package/dist/cli/commands/ui.js.map +1 -0
  103. package/dist/cli/commands/verify.d.ts +11 -0
  104. package/dist/cli/commands/verify.d.ts.map +1 -0
  105. package/dist/cli/commands/verify.js +46 -0
  106. package/dist/cli/commands/verify.js.map +1 -0
  107. package/dist/cli/index.d.ts +9 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +69 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/logger.d.ts +18 -0
  112. package/dist/cli/utils/logger.d.ts.map +1 -0
  113. package/dist/cli/utils/logger.js +57 -0
  114. package/dist/cli/utils/logger.js.map +1 -0
  115. package/dist/core/checkpoint.d.ts +54 -0
  116. package/dist/core/checkpoint.d.ts.map +1 -0
  117. package/dist/core/checkpoint.js +227 -0
  118. package/dist/core/checkpoint.js.map +1 -0
  119. package/dist/core/context.d.ts +36 -0
  120. package/dist/core/context.d.ts.map +1 -0
  121. package/dist/core/context.js +71 -0
  122. package/dist/core/context.js.map +1 -0
  123. package/dist/core/deliverable.d.ts +34 -0
  124. package/dist/core/deliverable.d.ts.map +1 -0
  125. package/dist/core/deliverable.js +125 -0
  126. package/dist/core/deliverable.js.map +1 -0
  127. package/dist/core/harness-hints.d.ts +43 -0
  128. package/dist/core/harness-hints.d.ts.map +1 -0
  129. package/dist/core/harness-hints.js +162 -0
  130. package/dist/core/harness-hints.js.map +1 -0
  131. package/dist/core/logger.d.ts +104 -0
  132. package/dist/core/logger.d.ts.map +1 -0
  133. package/dist/core/logger.js +199 -0
  134. package/dist/core/logger.js.map +1 -0
  135. package/dist/core/mailbox.d.ts +69 -0
  136. package/dist/core/mailbox.d.ts.map +1 -0
  137. package/dist/core/mailbox.js +225 -0
  138. package/dist/core/mailbox.js.map +1 -0
  139. package/dist/core/planning.d.ts +110 -0
  140. package/dist/core/planning.d.ts.map +1 -0
  141. package/dist/core/planning.js +832 -0
  142. package/dist/core/planning.js.map +1 -0
  143. package/dist/core/runtime.d.ts +22 -0
  144. package/dist/core/runtime.d.ts.map +1 -0
  145. package/dist/core/runtime.js +364 -0
  146. package/dist/core/runtime.js.map +1 -0
  147. package/dist/core/session.d.ts +62 -0
  148. package/dist/core/session.d.ts.map +1 -0
  149. package/dist/core/session.js +266 -0
  150. package/dist/core/session.js.map +1 -0
  151. package/dist/core/superpowers-registry.d.ts +20 -0
  152. package/dist/core/superpowers-registry.d.ts.map +1 -0
  153. package/dist/core/superpowers-registry.js +180 -0
  154. package/dist/core/superpowers-registry.js.map +1 -0
  155. package/dist/core/superpowers-runs.d.ts +19 -0
  156. package/dist/core/superpowers-runs.d.ts.map +1 -0
  157. package/dist/core/superpowers-runs.js +231 -0
  158. package/dist/core/superpowers-runs.js.map +1 -0
  159. package/dist/core/task.d.ts +43 -0
  160. package/dist/core/task.d.ts.map +1 -0
  161. package/dist/core/task.js +232 -0
  162. package/dist/core/task.js.map +1 -0
  163. package/dist/core/threads.d.ts +23 -0
  164. package/dist/core/threads.d.ts.map +1 -0
  165. package/dist/core/threads.js +92 -0
  166. package/dist/core/threads.js.map +1 -0
  167. package/dist/core/worker.d.ts +48 -0
  168. package/dist/core/worker.d.ts.map +1 -0
  169. package/dist/core/worker.js +181 -0
  170. package/dist/core/worker.js.map +1 -0
  171. package/dist/core/workflow-context.d.ts +16 -0
  172. package/dist/core/workflow-context.d.ts.map +1 -0
  173. package/dist/core/workflow-context.js +102 -0
  174. package/dist/core/workflow-context.js.map +1 -0
  175. package/dist/core/workspace.d.ts +13 -0
  176. package/dist/core/workspace.d.ts.map +1 -0
  177. package/dist/core/workspace.js +208 -0
  178. package/dist/core/workspace.js.map +1 -0
  179. package/dist/testing/index.d.ts +21 -0
  180. package/dist/testing/index.d.ts.map +1 -0
  181. package/dist/testing/index.js +55 -0
  182. package/dist/testing/index.js.map +1 -0
  183. package/dist/types/index.d.ts +298 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +5 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/ui/assets/index-DLwnhrrc.css +1 -0
  188. package/dist/ui/assets/index-cDUGEuwi.js +234 -0
  189. package/dist/ui/http/handlers/project-artifacts.d.ts +3 -0
  190. package/dist/ui/http/handlers/project-artifacts.d.ts.map +1 -0
  191. package/dist/ui/http/handlers/project-artifacts.js +20 -0
  192. package/dist/ui/http/handlers/project-artifacts.js.map +1 -0
  193. package/dist/ui/http/handlers/project-overview.d.ts +3 -0
  194. package/dist/ui/http/handlers/project-overview.d.ts.map +1 -0
  195. package/dist/ui/http/handlers/project-overview.js +20 -0
  196. package/dist/ui/http/handlers/project-overview.js.map +1 -0
  197. package/dist/ui/http/handlers/project-recovery.d.ts +3 -0
  198. package/dist/ui/http/handlers/project-recovery.d.ts.map +1 -0
  199. package/dist/ui/http/handlers/project-recovery.js +20 -0
  200. package/dist/ui/http/handlers/project-recovery.js.map +1 -0
  201. package/dist/ui/http/handlers/project-runtime.d.ts +3 -0
  202. package/dist/ui/http/handlers/project-runtime.d.ts.map +1 -0
  203. package/dist/ui/http/handlers/project-runtime.js +20 -0
  204. package/dist/ui/http/handlers/project-runtime.js.map +1 -0
  205. package/dist/ui/http/handlers/project-tasks.d.ts +3 -0
  206. package/dist/ui/http/handlers/project-tasks.d.ts.map +1 -0
  207. package/dist/ui/http/handlers/project-tasks.js +20 -0
  208. package/dist/ui/http/handlers/project-tasks.js.map +1 -0
  209. package/dist/ui/http/handlers/projects.d.ts +23 -0
  210. package/dist/ui/http/handlers/projects.d.ts.map +1 -0
  211. package/dist/ui/http/handlers/projects.js +29 -0
  212. package/dist/ui/http/handlers/projects.js.map +1 -0
  213. package/dist/ui/http/router.d.ts +5 -0
  214. package/dist/ui/http/router.d.ts.map +1 -0
  215. package/dist/ui/http/router.js +81 -0
  216. package/dist/ui/http/router.js.map +1 -0
  217. package/dist/ui/http/server.d.ts +29 -0
  218. package/dist/ui/http/server.d.ts.map +1 -0
  219. package/dist/ui/http/server.js +143 -0
  220. package/dist/ui/http/server.js.map +1 -0
  221. package/dist/ui/index.html +13 -0
  222. package/dist/ui/project-registry.d.ts +9 -0
  223. package/dist/ui/project-registry.d.ts.map +1 -0
  224. package/dist/ui/project-registry.js +19 -0
  225. package/dist/ui/project-registry.js.map +1 -0
  226. package/dist/ui/project-scanner.d.ts +10 -0
  227. package/dist/ui/project-scanner.d.ts.map +1 -0
  228. package/dist/ui/project-scanner.js +135 -0
  229. package/dist/ui/project-scanner.js.map +1 -0
  230. package/dist/ui/read-models/artifacts.d.ts +58 -0
  231. package/dist/ui/read-models/artifacts.d.ts.map +1 -0
  232. package/dist/ui/read-models/artifacts.js +97 -0
  233. package/dist/ui/read-models/artifacts.js.map +1 -0
  234. package/dist/ui/read-models/overview.d.ts +38 -0
  235. package/dist/ui/read-models/overview.d.ts.map +1 -0
  236. package/dist/ui/read-models/overview.js +55 -0
  237. package/dist/ui/read-models/overview.js.map +1 -0
  238. package/dist/ui/read-models/recovery.d.ts +18 -0
  239. package/dist/ui/read-models/recovery.d.ts.map +1 -0
  240. package/dist/ui/read-models/recovery.js +26 -0
  241. package/dist/ui/read-models/recovery.js.map +1 -0
  242. package/dist/ui/read-models/runtime.d.ts +53 -0
  243. package/dist/ui/read-models/runtime.d.ts.map +1 -0
  244. package/dist/ui/read-models/runtime.js +86 -0
  245. package/dist/ui/read-models/runtime.js.map +1 -0
  246. package/dist/ui/read-models/tasks.d.ts +34 -0
  247. package/dist/ui/read-models/tasks.d.ts.map +1 -0
  248. package/dist/ui/read-models/tasks.js +46 -0
  249. package/dist/ui/read-models/tasks.js.map +1 -0
  250. package/dist/utils/config.d.ts +30 -0
  251. package/dist/utils/config.d.ts.map +1 -0
  252. package/dist/utils/config.js +152 -0
  253. package/dist/utils/config.js.map +1 -0
  254. package/dist/utils/file.d.ts +24 -0
  255. package/dist/utils/file.d.ts.map +1 -0
  256. package/dist/utils/file.js +42 -0
  257. package/dist/utils/file.js.map +1 -0
  258. package/dist/utils/lock.d.ts +7 -0
  259. package/dist/utils/lock.d.ts.map +1 -0
  260. package/dist/utils/lock.js +36 -0
  261. package/dist/utils/lock.js.map +1 -0
  262. package/package.json +78 -0
@@ -0,0 +1,266 @@
1
+ /**
2
+ * 会话管理系统
3
+ * 支持跨会话状态恢复
4
+ */
5
+ import { writeFile, readFile } from 'fs/promises';
6
+ import { join } from 'path';
7
+ import { existsSync } from 'fs';
8
+ import { normalizeWorkflowContext } from './workflow-context.js';
9
+ import { withFileLock } from '../utils/lock.js';
10
+ import { ensureDir } from '../utils/file.js';
11
+ const SESSIONS_DIR = '.webforge/sessions';
12
+ const SESSION_INDEX = '.webforge/sessions/index.json';
13
+ const SESSION_INDEX_LOCK = '.webforge/sessions/index.lock';
14
+ /**
15
+ * 保存会话快照
16
+ */
17
+ export async function saveSession(sessionId, tasks, phases, options) {
18
+ const basePath = options?.basePath;
19
+ await withSessionLock(sessionId, async () => {
20
+ await ensureDir(resolveSessionPath(basePath, SESSIONS_DIR));
21
+ const existing = await readSessionSnapshot(sessionId, basePath);
22
+ const now = new Date().toISOString();
23
+ const session = {
24
+ id: sessionId,
25
+ name: options?.name || existing?.session.name || `Session ${sessionId.slice(-4)}`,
26
+ createdAt: existing?.session.createdAt || now,
27
+ lastActive: now,
28
+ status: existing?.session.status || 'active',
29
+ currentPhaseId: options?.currentPhaseId ?? existing?.session.currentPhaseId,
30
+ currentTaskId: options?.currentTaskId ?? existing?.session.currentTaskId,
31
+ contextSummary: options?.context ?? existing?.session.contextSummary,
32
+ nextAction: options?.nextAction ?? existing?.session.nextAction,
33
+ workflowContext: options?.workflowContext ?? existing?.session.workflowContext,
34
+ stats: {
35
+ tasksCompleted: tasks.filter(t => t.status === 'completed').length,
36
+ totalTasks: tasks.length
37
+ }
38
+ };
39
+ const snapshot = buildSessionSnapshot(session, tasks, phases);
40
+ await persistSessionSnapshot(snapshot, basePath);
41
+ }, basePath);
42
+ }
43
+ /**
44
+ * 加载会话
45
+ */
46
+ export async function loadSession(sessionId, basePath) {
47
+ return withSessionLock(sessionId, async () => {
48
+ const snapshot = await readSessionSnapshot(sessionId, basePath);
49
+ if (!snapshot) {
50
+ return null;
51
+ }
52
+ snapshot.session.lastActive = new Date().toISOString();
53
+ snapshot.resumeGuidance = buildResumeGuidance(snapshot.session);
54
+ await persistSessionSnapshot(snapshot, basePath);
55
+ return snapshot;
56
+ }, basePath);
57
+ }
58
+ /**
59
+ * 列出所有会话
60
+ */
61
+ export async function listSessions(basePath) {
62
+ return withFileLock(resolveSessionPath(basePath, SESSION_INDEX_LOCK), async () => {
63
+ const sessions = await loadSessionIndexUnlocked(basePath);
64
+ return sessions
65
+ .map(normalizeSessionIndexEntry)
66
+ .sort((a, b) => new Date(b.lastActive).getTime() - new Date(a.lastActive).getTime());
67
+ });
68
+ }
69
+ /**
70
+ * 获取最新的活动会话
71
+ */
72
+ export async function getLatestSession(basePath) {
73
+ const sessions = await listSessions(basePath);
74
+ return sessions[0] || null;
75
+ }
76
+ /**
77
+ * 暂停会话
78
+ */
79
+ export async function pauseSession(sessionId, basePath) {
80
+ await updateSessionStatus(sessionId, 'paused', basePath);
81
+ }
82
+ /**
83
+ * 完成会话
84
+ */
85
+ export async function completeSession(sessionId, basePath) {
86
+ await updateSessionStatus(sessionId, 'completed', basePath);
87
+ }
88
+ export async function applySessionWorkflowContext(sessionId, workflowContext, basePath) {
89
+ await withSessionLock(sessionId, async () => {
90
+ const snapshot = await readSessionSnapshot(sessionId, basePath);
91
+ if (!snapshot) {
92
+ return;
93
+ }
94
+ snapshot.session.workflowContext = workflowContext;
95
+ snapshot.resumeGuidance = buildResumeGuidance(snapshot.session);
96
+ await persistSessionSnapshot(snapshot, basePath);
97
+ }, basePath);
98
+ }
99
+ /**
100
+ * 更新会话索引
101
+ */
102
+ async function updateSessionIndex(session, basePath) {
103
+ await withFileLock(resolveSessionPath(basePath, SESSION_INDEX_LOCK), async () => {
104
+ const sessions = (await loadSessionIndexUnlocked(basePath)).map(normalizeSessionIndexEntry);
105
+ const index = sessions.findIndex(item => item.id === session.id);
106
+ if (index >= 0) {
107
+ sessions[index] = session;
108
+ }
109
+ else {
110
+ sessions.push(session);
111
+ }
112
+ const payload = {
113
+ sessions: sessions.map(toSessionIndexEntry)
114
+ };
115
+ await writeFile(resolveSessionPath(basePath, SESSION_INDEX), JSON.stringify(payload, null, 2));
116
+ });
117
+ }
118
+ async function readSessionSnapshot(sessionId, basePath) {
119
+ const sessionPath = resolveSessionPath(basePath, join(SESSIONS_DIR, `${sessionId}.json`));
120
+ if (!existsSync(sessionPath)) {
121
+ return null;
122
+ }
123
+ try {
124
+ const content = await readFile(sessionPath, 'utf-8');
125
+ const data = JSON.parse(content);
126
+ if (!data.session || !Array.isArray(data.tasksSnapshot) || !Array.isArray(data.phasesSnapshot)) {
127
+ return null;
128
+ }
129
+ const legacySession = data.session;
130
+ const session = {
131
+ id: legacySession.id || sessionId,
132
+ name: legacySession.name || `Session ${sessionId.slice(-4)}`,
133
+ createdAt: legacySession.createdAt || legacySession.created_at || new Date().toISOString(),
134
+ lastActive: legacySession.lastActive || legacySession.last_active || legacySession.createdAt || legacySession.created_at || new Date().toISOString(),
135
+ status: legacySession.status || 'active',
136
+ currentPhaseId: legacySession.currentPhaseId ?? legacySession.currentPhase,
137
+ currentTaskId: legacySession.currentTaskId ?? legacySession.currentTask,
138
+ contextSummary: legacySession.contextSummary ?? legacySession.context_summary,
139
+ nextAction: legacySession.nextAction ?? legacySession.next_action,
140
+ workflowContext: normalizeWorkflowContext(legacySession.workflowContext) ?? undefined,
141
+ stats: legacySession.stats ?? {
142
+ tasksCompleted: 0,
143
+ totalTasks: 0
144
+ }
145
+ };
146
+ return {
147
+ session,
148
+ tasksSnapshot: data.tasksSnapshot,
149
+ phasesSnapshot: data.phasesSnapshot,
150
+ resumeGuidance: data.resumeGuidance || buildResumeGuidance(session)
151
+ };
152
+ }
153
+ catch {
154
+ return null;
155
+ }
156
+ }
157
+ async function persistSessionSnapshot(snapshot, basePath) {
158
+ const sessionPath = resolveSessionPath(basePath, join(SESSIONS_DIR, `${snapshot.session.id}.json`));
159
+ await writeFile(sessionPath, JSON.stringify(snapshot, null, 2));
160
+ await updateSessionIndex(snapshot.session, basePath);
161
+ }
162
+ function buildSessionSnapshot(session, tasks, phases) {
163
+ return {
164
+ session,
165
+ tasksSnapshot: tasks,
166
+ phasesSnapshot: phases,
167
+ resumeGuidance: buildResumeGuidance(session)
168
+ };
169
+ }
170
+ function buildResumeGuidance(session) {
171
+ const scope = [];
172
+ if (session.currentPhaseId) {
173
+ scope.push(`phase ${session.currentPhaseId}`);
174
+ }
175
+ if (session.currentTaskId) {
176
+ scope.push(`task ${session.currentTaskId}`);
177
+ }
178
+ const summary = session.contextSummary?.trim();
179
+ const nextAction = session.nextAction?.trim();
180
+ const lead = scope.length > 0 ? `Resume ${scope.join(' / ')}` : `Resume session ${session.name}`;
181
+ const parts = [lead];
182
+ if (summary) {
183
+ parts.push(summary);
184
+ }
185
+ if (nextAction) {
186
+ parts.push(`Next: ${nextAction}`);
187
+ }
188
+ return parts.join('. ');
189
+ }
190
+ async function updateSessionStatus(sessionId, status, basePath) {
191
+ await withSessionLock(sessionId, async () => {
192
+ const snapshot = await readSessionSnapshot(sessionId, basePath);
193
+ if (!snapshot) {
194
+ return;
195
+ }
196
+ snapshot.session.status = status;
197
+ snapshot.session.lastActive = new Date().toISOString();
198
+ snapshot.resumeGuidance = buildResumeGuidance(snapshot.session);
199
+ await persistSessionSnapshot(snapshot, basePath);
200
+ }, basePath);
201
+ }
202
+ async function loadSessionIndexUnlocked(basePath) {
203
+ const indexPath = resolveSessionPath(basePath, SESSION_INDEX);
204
+ if (!existsSync(indexPath)) {
205
+ return [];
206
+ }
207
+ try {
208
+ const content = await readFile(indexPath, 'utf-8');
209
+ const parsed = JSON.parse(content);
210
+ return Array.isArray(parsed)
211
+ ? parsed
212
+ : Array.isArray(parsed?.sessions)
213
+ ? parsed.sessions
214
+ : [];
215
+ }
216
+ catch {
217
+ return [];
218
+ }
219
+ }
220
+ function getSessionLockPath(sessionId, basePath) {
221
+ return resolveSessionPath(basePath, join(SESSIONS_DIR, '.locks', `${sessionId}.lock`));
222
+ }
223
+ async function withSessionLock(sessionId, fn, basePath) {
224
+ return withFileLock(getSessionLockPath(sessionId, basePath), fn);
225
+ }
226
+ function resolveSessionPath(basePath, relativePath) {
227
+ return basePath ? join(basePath, relativePath) : relativePath;
228
+ }
229
+ function normalizeSessionIndexEntry(entry) {
230
+ const legacy = entry;
231
+ return {
232
+ id: legacy.id,
233
+ name: legacy.name,
234
+ createdAt: legacy.createdAt || legacy.created_at,
235
+ lastActive: legacy.lastActive || legacy.last_active,
236
+ status: legacy.status,
237
+ currentPhaseId: legacy.currentPhaseId || legacy.currentPhase,
238
+ currentTaskId: legacy.currentTaskId || legacy.currentTask,
239
+ contextSummary: legacy.contextSummary || legacy.context_summary,
240
+ nextAction: legacy.nextAction || legacy.next_action,
241
+ workflowContext: normalizeWorkflowContext(legacy.workflowContext) ?? undefined,
242
+ stats: legacy.stats
243
+ };
244
+ }
245
+ function toSessionIndexEntry(session) {
246
+ return {
247
+ id: session.id,
248
+ name: session.name,
249
+ createdAt: session.createdAt,
250
+ created_at: session.createdAt,
251
+ lastActive: session.lastActive,
252
+ last_active: session.lastActive,
253
+ status: session.status,
254
+ currentPhaseId: session.currentPhaseId,
255
+ currentPhase: session.currentPhaseId,
256
+ currentTaskId: session.currentTaskId,
257
+ currentTask: session.currentTaskId,
258
+ contextSummary: session.contextSummary,
259
+ context_summary: session.contextSummary,
260
+ nextAction: session.nextAction,
261
+ next_action: session.nextAction,
262
+ workflowContext: session.workflowContext,
263
+ stats: session.stats
264
+ };
265
+ }
266
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { WorkspaceSuperpowersExecutionMode, WorkspaceSuperpowersRegistry } from '../types/index.js';
2
+ interface LegacySuperpowersConfig {
3
+ required?: unknown;
4
+ optional?: unknown;
5
+ execution?: unknown;
6
+ generatedAt?: unknown;
7
+ capabilities?: unknown;
8
+ techStack?: unknown;
9
+ }
10
+ export declare function buildSuperpowersRegistry(options?: {
11
+ required?: string[];
12
+ optional?: string[];
13
+ execution?: WorkspaceSuperpowersExecutionMode | null;
14
+ generatedAt?: string;
15
+ techStack?: Record<string, unknown>;
16
+ }): WorkspaceSuperpowersRegistry;
17
+ export declare function loadSuperpowersRegistry(basePath: string): Promise<WorkspaceSuperpowersRegistry>;
18
+ export declare function normalizeSuperpowersRegistry(raw: LegacySuperpowersConfig): WorkspaceSuperpowersRegistry;
19
+ export {};
20
+ //# sourceMappingURL=superpowers-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superpowers-registry.d.ts","sourceRoot":"","sources":["../../src/core/superpowers-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,iCAAiC,EACjC,4BAA4B,EAC7B,MAAM,mBAAmB,CAAC;AAE3B,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6ED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,iCAAiC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,4BAA4B,CAepC;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,4BAA4B,CAAC,CAUvC;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,uBAAuB,GAC3B,4BAA4B,CAiC9B"}
@@ -0,0 +1,180 @@
1
+ import { existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { readJson } from '../utils/file.js';
4
+ const CAPABILITY_DEFINITIONS = [
5
+ {
6
+ id: 'brainstorming',
7
+ kind: 'workflow',
8
+ owner: 'superpowers',
9
+ purpose: '在需求、方案和架构仍然发散时先完成设计收敛。',
10
+ writes: ['.webforge/knowledge/', '.webforge/sessions/'],
11
+ artifacts: ['decision notes', 'design clarifications']
12
+ },
13
+ {
14
+ id: 'writing-plans',
15
+ kind: 'workflow',
16
+ owner: 'superpowers',
17
+ purpose: '把已经稳定的 spec 拆成可执行的任务与实现步骤。',
18
+ writes: ['.webforge/tasks.json', '.webforge/phases.json', 'docs/superpowers/plans/'],
19
+ artifacts: ['implementation plan', 'task graph updates']
20
+ },
21
+ {
22
+ id: 'subagent-driven-development',
23
+ kind: 'workflow',
24
+ owner: 'superpowers',
25
+ purpose: '在当前会话中按任务波次调度隔离子 agent 实施计划。',
26
+ writes: ['.webforge/sessions/', '.webforge/mailboxes/'],
27
+ artifacts: ['wave metadata', 'review markers']
28
+ },
29
+ {
30
+ id: 'executing-plans',
31
+ kind: 'workflow',
32
+ owner: 'superpowers',
33
+ purpose: '在当前会话中按计划批量推进实现并做检查点控制。',
34
+ writes: ['.webforge/sessions/', '.webforge/runtime.json'],
35
+ artifacts: ['execution checkpoints', 'plan progress']
36
+ },
37
+ {
38
+ id: 'using-git-worktrees',
39
+ kind: 'workflow',
40
+ owner: 'superpowers',
41
+ purpose: '为隔离实现和并行开发创建独立 worktree 工作区。',
42
+ writes: ['.webforge/sessions/', '.webforge/runtime.json'],
43
+ artifacts: ['worktree metadata', 'branch isolation']
44
+ },
45
+ {
46
+ id: 'strategic-compact',
47
+ kind: 'workflow',
48
+ owner: 'superpowers',
49
+ purpose: '在合适边界主动 compact,避免上下文在错误时机被截断。',
50
+ writes: ['.webforge/sessions/'],
51
+ artifacts: ['compact handoff', 'next action snapshot']
52
+ },
53
+ {
54
+ id: 'continuous-learning-v2',
55
+ kind: 'workflow',
56
+ owner: 'superpowers',
57
+ purpose: '持续沉淀个人偏好和可复用 instincts。',
58
+ writes: [],
59
+ artifacts: ['personal instincts', 'learned behaviors']
60
+ },
61
+ {
62
+ id: 'gsd-thread',
63
+ kind: 'workflow',
64
+ owner: 'superpowers',
65
+ purpose: '维护跨 session 的持久线程上下文。',
66
+ writes: ['.webforge/sessions/'],
67
+ artifacts: ['thread references', 'cross-session context']
68
+ },
69
+ {
70
+ id: 'gsd-resume-work',
71
+ kind: 'workflow',
72
+ owner: 'superpowers',
73
+ purpose: '在恢复阶段重建前一会话的工作上下文。',
74
+ writes: ['.webforge/sessions/', '.webforge/runtime.json'],
75
+ artifacts: ['resume guidance', 'thread linkage']
76
+ }
77
+ ];
78
+ export function buildSuperpowersRegistry(options = {}) {
79
+ const execution = options.execution ?? null;
80
+ return {
81
+ version: '1',
82
+ required: normalizeStringList(options.required),
83
+ optional: normalizeStringList(options.optional),
84
+ execution,
85
+ generatedAt: options.generatedAt ?? new Date().toISOString(),
86
+ capabilities: CAPABILITY_DEFINITIONS.map((capability) => ({
87
+ ...capability,
88
+ recommended: isRecommendedCapability(capability.id, execution)
89
+ })),
90
+ ...(options.techStack ? { techStack: options.techStack } : {})
91
+ };
92
+ }
93
+ export async function loadSuperpowersRegistry(basePath) {
94
+ const registryPath = join(basePath, '.webforge', 'superpowers.json');
95
+ if (!existsSync(registryPath)) {
96
+ return buildSuperpowersRegistry();
97
+ }
98
+ return normalizeSuperpowersRegistry(await readJson(registryPath));
99
+ }
100
+ export function normalizeSuperpowersRegistry(raw) {
101
+ const execution = normalizeExecutionMode(raw.execution);
102
+ const registry = buildSuperpowersRegistry({
103
+ required: normalizeStringList(raw.required),
104
+ optional: normalizeStringList(raw.optional),
105
+ execution,
106
+ generatedAt: typeof raw.generatedAt === 'string' && raw.generatedAt.length > 0
107
+ ? raw.generatedAt
108
+ : undefined,
109
+ techStack: isRecord(raw.techStack) ? raw.techStack : undefined
110
+ });
111
+ if (!Array.isArray(raw.capabilities)) {
112
+ return registry;
113
+ }
114
+ const capabilities = raw.capabilities
115
+ .map((item) => normalizeCapability(item, execution))
116
+ .filter((item) => item !== null);
117
+ if (capabilities.length === 0) {
118
+ return registry;
119
+ }
120
+ const missing = registry.capabilities.filter((capability) => !capabilities.some((item) => item.id === capability.id));
121
+ return {
122
+ ...registry,
123
+ capabilities: [...capabilities, ...missing]
124
+ };
125
+ }
126
+ function normalizeCapability(value, execution) {
127
+ if (!isRecord(value) || typeof value.id !== 'string' || value.id.length === 0) {
128
+ return null;
129
+ }
130
+ const base = CAPABILITY_DEFINITIONS.find((capability) => capability.id === value.id) ?? {
131
+ id: value.id,
132
+ kind: 'workflow',
133
+ owner: 'superpowers',
134
+ purpose: '',
135
+ writes: [],
136
+ artifacts: []
137
+ };
138
+ return {
139
+ id: base.id,
140
+ kind: 'workflow',
141
+ owner: 'superpowers',
142
+ purpose: typeof value.purpose === 'string' && value.purpose.length > 0
143
+ ? value.purpose
144
+ : base.purpose,
145
+ writes: normalizeStringList(value.writes ?? base.writes),
146
+ artifacts: normalizeStringList(value.artifacts ?? base.artifacts),
147
+ recommended: typeof value.recommended === 'boolean'
148
+ ? value.recommended
149
+ : isRecommendedCapability(base.id, execution)
150
+ };
151
+ }
152
+ function isRecommendedCapability(capabilityId, execution) {
153
+ if (execution === null) {
154
+ return false;
155
+ }
156
+ if (capabilityId === 'writing-plans') {
157
+ return true;
158
+ }
159
+ if (execution === 'subagent') {
160
+ return (capabilityId === 'subagent-driven-development' ||
161
+ capabilityId === 'using-git-worktrees');
162
+ }
163
+ if (execution === 'inline') {
164
+ return capabilityId === 'executing-plans';
165
+ }
166
+ return false;
167
+ }
168
+ function normalizeExecutionMode(value) {
169
+ return value === 'subagent' || value === 'inline' ? value : null;
170
+ }
171
+ function normalizeStringList(value) {
172
+ if (!Array.isArray(value)) {
173
+ return [];
174
+ }
175
+ return Array.from(new Set(value.filter((item) => typeof item === 'string' && item.length > 0)));
176
+ }
177
+ function isRecord(value) {
178
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
179
+ }
180
+ //# sourceMappingURL=superpowers-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superpowers-registry.js","sourceRoot":"","sources":["../../src/core/superpowers-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { WorkspaceSuperpowersArtifact, WorkspaceSuperpowersRun, WorkspaceSuperpowersRunMetadata } from '../types/index.js';
2
+ export interface RecordSuperpowersRunInput {
3
+ workflow: string;
4
+ summary: string;
5
+ taskId?: string;
6
+ sessionId?: string;
7
+ artifacts: WorkspaceSuperpowersArtifact[];
8
+ metadata?: WorkspaceSuperpowersRunMetadata;
9
+ }
10
+ export interface SuperpowersRunReadiness {
11
+ missingArtifacts: string[];
12
+ missingWorktreePath: string | null;
13
+ missingCompactSessionId: string | null;
14
+ }
15
+ export declare function loadSuperpowersRuns(basePath: string): Promise<WorkspaceSuperpowersRun[]>;
16
+ export declare function getLatestSuperpowersRun(basePath: string): Promise<WorkspaceSuperpowersRun | null>;
17
+ export declare function recordSuperpowersRun(basePath: string, input: RecordSuperpowersRunInput): Promise<WorkspaceSuperpowersRun>;
18
+ export declare function inspectSuperpowersRun(basePath: string, run: WorkspaceSuperpowersRun): SuperpowersRunReadiness;
19
+ //# sourceMappingURL=superpowers-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superpowers-runs.d.ts","sourceRoot":"","sources":["../../src/core/superpowers-runs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,4BAA4B,EAE5B,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAS3B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,4BAA4B,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,+BAA+B,CAAC;CAC5C;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAGzC;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CA2ClC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,uBAAuB,GAC3B,uBAAuB,CAoBzB"}