@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
+ import { mkdtemp, readFile, rm, writeFile } from 'fs/promises';
2
+ import { tmpdir } from 'os';
3
+ import { join } from 'path';
4
+ import { spawn } from 'child_process';
5
+ export async function runCommand(request) {
6
+ return new Promise((resolve, reject) => {
7
+ let settled = false;
8
+ const child = spawn(request.command, request.args, {
9
+ cwd: request.cwd,
10
+ stdio: 'pipe',
11
+ env: process.env
12
+ });
13
+ let stdout = '';
14
+ let stderr = '';
15
+ child.stdout.on('data', (chunk) => {
16
+ stdout += String(chunk);
17
+ });
18
+ child.stderr.on('data', (chunk) => {
19
+ stderr += String(chunk);
20
+ });
21
+ const timeout = setTimeout(() => {
22
+ if (settled) {
23
+ return;
24
+ }
25
+ settled = true;
26
+ child.kill('SIGTERM');
27
+ reject(new Error(`External command timed out: ${request.command}`));
28
+ }, 30000);
29
+ child.on('error', (error) => {
30
+ if (settled) {
31
+ return;
32
+ }
33
+ settled = true;
34
+ clearTimeout(timeout);
35
+ reject(error);
36
+ });
37
+ child.on('close', (code) => {
38
+ if (settled) {
39
+ return;
40
+ }
41
+ settled = true;
42
+ clearTimeout(timeout);
43
+ resolve({
44
+ exitCode: code ?? 1,
45
+ stdout,
46
+ stderr
47
+ });
48
+ });
49
+ if (request.input) {
50
+ child.stdin.write(request.input);
51
+ }
52
+ child.stdin.end();
53
+ });
54
+ }
55
+ export const AGENT_RESULT_SCHEMA = {
56
+ type: 'object',
57
+ additionalProperties: false,
58
+ required: ['success', 'summary', 'needsReview'],
59
+ properties: {
60
+ success: { type: 'boolean' },
61
+ summary: { type: 'string' },
62
+ needsReview: { type: 'boolean' },
63
+ error: { type: ['string', 'null'] },
64
+ metadata: { type: 'object' },
65
+ deliverables: {
66
+ type: 'array',
67
+ items: {
68
+ type: 'object',
69
+ additionalProperties: false,
70
+ required: ['type', 'title', 'content'],
71
+ properties: {
72
+ type: {
73
+ type: 'string',
74
+ enum: ['document', 'code', 'test', 'config', 'design', 'review']
75
+ },
76
+ title: { type: 'string' },
77
+ content: { type: 'string' }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ };
83
+ export function buildAgentPrompt(input, config) {
84
+ const knowledgePreview = summarizeEntries(input.context.knowledge.items.map((item) => `${item.id}:${item.title}`), 8);
85
+ const deliverablePreview = summarizeEntries(input.context.deliverables.task.map((item) => `${item.id}:${item.title}`), 6);
86
+ const sessionHint = input.context.sessions.active
87
+ ? `${input.context.sessions.active.id} (${input.context.sessions.active.status})`
88
+ : 'none';
89
+ return [
90
+ 'You are executing a WebForge task through an external agent adapter.',
91
+ 'Operate inside the provided workspace and return ONLY valid JSON that matches the requested schema.',
92
+ '',
93
+ 'Execution rules:',
94
+ `- Provider: ${config.runtimeProfile.provider}`,
95
+ `- Permission profile: ${config.runtimeProfile.permissionProfile}`,
96
+ `- Workspace write allowed: ${input.context.permissions.canWriteWorkspace ? 'yes' : 'no'}`,
97
+ `- Approval required: ${input.context.permissions.requiresApproval ? 'yes' : 'no'}`,
98
+ `- Workspace root: ${input.context.workspace.basePath}`,
99
+ '- Prefer concise, high-signal deliverables for the harness deliverable index.',
100
+ '- If you are blocked by permissions or missing tools, set success=false and explain in error.',
101
+ '- Do not emit markdown fences or extra prose outside the JSON object.',
102
+ '',
103
+ 'Worker profile:',
104
+ `- Name: ${config.name}`,
105
+ `- Role: ${config.role}`,
106
+ `- Skills: ${config.skills.join(', ') || 'none'}`,
107
+ `- System prompt: ${config.systemPrompt}`,
108
+ '',
109
+ 'Task:',
110
+ `- ID: ${input.task.id}`,
111
+ `- Title: ${input.task.title}`,
112
+ `- Description: ${input.task.description ?? 'none'}`,
113
+ `- Phase: ${input.context.phase.id} ${input.context.phase.name}`,
114
+ '',
115
+ 'Workspace state:',
116
+ `- Runtime summary: ${input.context.runtime.summary}`,
117
+ `- Active session: ${sessionHint}`,
118
+ `- Knowledge items: ${input.context.knowledge.items.length}`,
119
+ `- Existing task deliverables: ${input.context.deliverables.task.length}`,
120
+ `- Ready tasks: ${input.context.observation.counts.readyTasks}`,
121
+ `- Blocked tasks: ${input.context.observation.counts.blockedTasks}`,
122
+ `- Pending review items: ${input.context.observation.counts.pendingReview}`,
123
+ `- Unread mailbox messages: ${input.context.observation.counts.unreadMessages}`,
124
+ '',
125
+ 'Method hints:',
126
+ `- Superpowers enabled: ${input.context.superpowers.enabled ? 'yes' : 'no'}`,
127
+ `- Task skills: ${input.context.superpowers.taskSkills.join(', ') || 'none'}`,
128
+ `- Required skills: ${input.context.superpowers.requiredSkills.join(', ') || 'none'}`,
129
+ `- Execution mode: ${input.context.superpowers.executionMode ?? 'none'}`,
130
+ `- Suggested workflow: ${input.context.superpowers.suggestedWorkflow ?? 'none'}`,
131
+ `- Capability registry: ${input.context.superpowers.capabilities.map((capability) => capability.id).join(', ') ||
132
+ 'none'}`,
133
+ '',
134
+ 'Knowledge preview:',
135
+ knowledgePreview,
136
+ '',
137
+ 'Task deliverable preview:',
138
+ deliverablePreview,
139
+ '',
140
+ 'Return JSON with this intent:',
141
+ '- success: whether task execution succeeded',
142
+ '- summary: concise execution summary',
143
+ '- needsReview: whether review is required',
144
+ '- error: failure reason when success=false',
145
+ '- metadata: adapter/provider notes',
146
+ '- deliverables: concise deliverable drafts to persist in .webforge/deliverables/'
147
+ ].join('\n');
148
+ }
149
+ export function mapCodexArgs(command, input, config, schemaPath, outputPath) {
150
+ const args = ['exec', '--skip-git-repo-check', '--color', 'never'];
151
+ if (config.runtimeProfile.permissionProfile === 'workspace-write') {
152
+ args.push('--full-auto');
153
+ }
154
+ else {
155
+ args.push('--sandbox', 'read-only');
156
+ }
157
+ if (config.runtimeProfile.model) {
158
+ args.push('--model', config.runtimeProfile.model);
159
+ }
160
+ args.push('--output-schema', schemaPath, '--output-last-message', outputPath);
161
+ args.push('-C', input.context.workspace.basePath, '-');
162
+ return {
163
+ command,
164
+ args,
165
+ cwd: input.context.workspace.basePath,
166
+ input: buildAgentPrompt(input, config)
167
+ };
168
+ }
169
+ export function mapClaudeArgs(command, input, config) {
170
+ const args = [
171
+ '-p',
172
+ '--output-format',
173
+ 'json',
174
+ '--json-schema',
175
+ JSON.stringify(AGENT_RESULT_SCHEMA),
176
+ '--add-dir',
177
+ input.context.workspace.basePath,
178
+ '--system-prompt',
179
+ config.systemPrompt
180
+ ];
181
+ if (config.runtimeProfile.model) {
182
+ args.push('--model', config.runtimeProfile.model);
183
+ }
184
+ args.push('--permission-mode', config.runtimeProfile.permissionProfile === 'workspace-write' ? 'acceptEdits' : 'plan');
185
+ args.push(buildAgentPrompt(input, config));
186
+ return {
187
+ command,
188
+ args,
189
+ cwd: input.context.workspace.basePath
190
+ };
191
+ }
192
+ export async function withTemporarySchemaFiles(callback) {
193
+ const tempDir = await mkdtemp(join(tmpdir(), 'webforge-agent-adapter-'));
194
+ const schemaPath = join(tempDir, 'result-schema.json');
195
+ const outputPath = join(tempDir, 'result.json');
196
+ await writeFile(schemaPath, JSON.stringify(AGENT_RESULT_SCHEMA, null, 2), 'utf-8');
197
+ try {
198
+ return await callback({ schemaPath, outputPath });
199
+ }
200
+ finally {
201
+ await rm(tempDir, { recursive: true, force: true });
202
+ }
203
+ }
204
+ export async function readStructuredOutput(outputPath, stdout) {
205
+ const preferred = await readFile(outputPath, 'utf-8').catch(() => '');
206
+ return parseAgentExecutionResult(preferred || stdout);
207
+ }
208
+ export function parseAgentExecutionResult(raw) {
209
+ const parsed = parseLooseJson(raw);
210
+ const success = Boolean(parsed.success);
211
+ const summary = typeof parsed.summary === 'string' ? parsed.summary : success ? 'completed task' : 'task failed';
212
+ const deliverables = Array.isArray(parsed.deliverables) ? parsed.deliverables : undefined;
213
+ return {
214
+ success,
215
+ summary,
216
+ needsReview: Boolean(parsed.needsReview),
217
+ error: typeof parsed.error === 'string' ? parsed.error : undefined,
218
+ metadata: isRecord(parsed.metadata) ? parsed.metadata : undefined,
219
+ deliverables
220
+ };
221
+ }
222
+ export function enrichResultMetadata(result, provider, mode, config, extra) {
223
+ return {
224
+ ...result,
225
+ metadata: {
226
+ ...(result.metadata ?? {}),
227
+ adapterProvider: provider,
228
+ adapterMode: mode,
229
+ adapterCommand: config.runtimeProfile.command ?? provider,
230
+ adapterModel: config.runtimeProfile.model ?? null,
231
+ permissionProfile: config.runtimeProfile.permissionProfile,
232
+ ...extra
233
+ }
234
+ };
235
+ }
236
+ function summarizeEntries(entries, limit) {
237
+ if (entries.length === 0) {
238
+ return '- none';
239
+ }
240
+ const selected = entries.slice(0, limit).map((entry) => `- ${entry}`);
241
+ if (entries.length > limit) {
242
+ selected.push(`- ...and ${entries.length - limit} more`);
243
+ }
244
+ return selected.join('\n');
245
+ }
246
+ function parseLooseJson(raw) {
247
+ const trimmed = raw.trim();
248
+ if (trimmed.length === 0) {
249
+ throw new Error('External agent returned empty output');
250
+ }
251
+ try {
252
+ return JSON.parse(trimmed);
253
+ }
254
+ catch {
255
+ const start = trimmed.indexOf('{');
256
+ const end = trimmed.lastIndexOf('}');
257
+ if (start === -1 || end === -1 || end <= start) {
258
+ throw new Error('External agent did not return JSON');
259
+ }
260
+ return JSON.parse(trimmed.slice(start, end + 1));
261
+ }
262
+ }
263
+ function isRecord(value) {
264
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
265
+ }
266
+ //# sourceMappingURL=command-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-bridge.js","sourceRoot":"","sources":["../../../src/agent/adapters/command-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AgentProfileConfig } from '../../types/index.js';
2
+ import type { AgentRuntimeProfile } from '../context.js';
3
+ import type { AgentAdapter } from './base.js';
4
+ export declare function normalizeRuntimeProfile(profile?: AgentProfileConfig): AgentRuntimeProfile;
5
+ export declare function createAgentAdapter(profile: AgentRuntimeProfile): AgentAdapter;
6
+ export type { AgentAdapter } from './base.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK9C,wBAAgB,uBAAuB,CACrC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,mBAAmB,CAQrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAY7E;AAED,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { createClaudeCodeAgentAdapter } from './claude-code.js';
2
+ import { createCodexAgentAdapter } from './codex.js';
3
+ import { createStubAgentAdapter } from './stub.js';
4
+ export function normalizeRuntimeProfile(profile) {
5
+ return {
6
+ provider: profile?.provider ?? 'stub',
7
+ fallbackProvider: profile?.fallback_provider ?? 'stub',
8
+ permissionProfile: profile?.permission_profile ?? 'workspace-write',
9
+ model: profile?.model,
10
+ command: profile?.command
11
+ };
12
+ }
13
+ export function createAgentAdapter(profile) {
14
+ const fallback = createStubAgentAdapter();
15
+ switch (profile.provider) {
16
+ case 'codex':
17
+ return createCodexAgentAdapter(fallback);
18
+ case 'claude-code':
19
+ return createClaudeCodeAgentAdapter(fallback);
20
+ case 'stub':
21
+ default:
22
+ return fallback;
23
+ }
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/adapters/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CACrC,OAA4B;IAE5B,OAAO;QACL,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,MAAM;QACrC,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,IAAI,MAAM;QACtD,iBAAiB,EAAE,OAAO,EAAE,kBAAkB,IAAI,iBAAiB;QACnE,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,OAAO,EAAE,OAAO,EAAE,OAAO;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAE1C,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,aAAa;YAChB,OAAO,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from './base.js';
2
+ export declare function createStubAgentAdapter(): AgentAdapter;
3
+ //# sourceMappingURL=stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../../src/agent/adapters/stub.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,wBAAgB,sBAAsB,IAAI,YAAY,CAoBrD"}
@@ -0,0 +1,66 @@
1
+ export function createStubAgentAdapter() {
2
+ return {
3
+ provider: 'stub',
4
+ async execute(input, config) {
5
+ const deliverable = buildDefaultDeliverable(input, config);
6
+ return {
7
+ success: true,
8
+ summary: `${config.name} completed ${input.task.id}`,
9
+ deliverables: [deliverable],
10
+ needsReview: true,
11
+ metadata: {
12
+ role: config.role,
13
+ skills: config.skills,
14
+ adapterProvider: 'stub',
15
+ permissionProfile: config.runtimeProfile.permissionProfile
16
+ }
17
+ };
18
+ }
19
+ };
20
+ }
21
+ function buildDefaultDeliverable(input, config) {
22
+ return {
23
+ type: detectDeliverableType(input.task.title),
24
+ title: `${input.task.title} 交付物`,
25
+ content: [
26
+ `# ${input.task.title}`,
27
+ '',
28
+ `- Task ID: ${input.task.id}`,
29
+ `- Phase: ${input.context.phase.id} ${input.context.phase.name}`,
30
+ `- Worker Role: ${config.role}`,
31
+ `- Adapter: ${config.runtimeProfile.provider}`,
32
+ `- Permission Profile: ${config.runtimeProfile.permissionProfile}`,
33
+ `- Knowledge Items: ${input.context.knowledge.items.length}`,
34
+ `- Existing Deliverables: ${input.context.deliverables.task.length}`,
35
+ '',
36
+ '## Task Description',
37
+ '',
38
+ input.task.description || '暂无补充描述。',
39
+ '',
40
+ '## Context Notes',
41
+ '',
42
+ input.context.sessions.active
43
+ ? `当前活动会话: ${input.context.sessions.active.id}`
44
+ : '当前没有活动会话。'
45
+ ].join('\n')
46
+ };
47
+ }
48
+ function detectDeliverableType(title) {
49
+ const normalized = title.toLowerCase();
50
+ if (normalized.includes('测试') || normalized.includes('test')) {
51
+ return 'test';
52
+ }
53
+ if (normalized.includes('实现') ||
54
+ normalized.includes('开发') ||
55
+ normalized.includes('code')) {
56
+ return 'code';
57
+ }
58
+ if (normalized.includes('配置') || normalized.includes('config')) {
59
+ return 'config';
60
+ }
61
+ if (normalized.includes('设计') || normalized.includes('ui')) {
62
+ return 'design';
63
+ }
64
+ return 'document';
65
+ }
66
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.js","sourceRoot":"","sources":["../../../src/agent/adapters/stub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { ExecutionContext } from '../core/context.js';
2
+ import type { DeliverableType } from '../core/deliverable.js';
3
+ import type { AgentPermissionProfile, AgentProvider, Task } from '../types/index.js';
4
+ export interface AgentRuntimeProfile {
5
+ provider: AgentProvider;
6
+ fallbackProvider?: AgentProvider;
7
+ permissionProfile: AgentPermissionProfile;
8
+ model?: string;
9
+ command?: string;
10
+ }
11
+ export interface AgentConfig {
12
+ name: string;
13
+ role: string;
14
+ systemPrompt: string;
15
+ skills: string[];
16
+ runtimeProfile: AgentRuntimeProfile;
17
+ }
18
+ export interface AgentExecutionInput {
19
+ task: Task;
20
+ context: ExecutionContext;
21
+ }
22
+ export interface AgentDeliverableDraft {
23
+ type: DeliverableType;
24
+ title: string;
25
+ content: string;
26
+ }
27
+ export interface AgentExecutionResult {
28
+ success: boolean;
29
+ summary: string;
30
+ deliverables?: AgentDeliverableDraft[];
31
+ needsReview: boolean;
32
+ error?: string;
33
+ metadata?: Record<string, unknown>;
34
+ }
35
+ export declare function summarizeExecutionContext(context: ExecutionContext): string;
36
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,IAAI,EACL,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAc3E"}
@@ -0,0 +1,16 @@
1
+ export function summarizeExecutionContext(context) {
2
+ return [
3
+ `task=${context.task.id}`,
4
+ `phase=${context.phase.id}`,
5
+ `knowledge=${context.knowledge.items.length}`,
6
+ `deliverables=${context.deliverables.task.length}`,
7
+ `sessions=${context.sessions.related.length}`,
8
+ `skills=${context.superpowers.taskSkills.length}`,
9
+ `capabilities=${context.superpowers.capabilities.length}`,
10
+ `workflow=${context.workflowContext?.workflow ?? 'none'}`,
11
+ `permission=${context.permissions.profile}`,
12
+ `ready=${context.observation.counts.readyTasks}`,
13
+ `pendingReview=${context.observation.counts.pendingReview}`
14
+ ].join(', ');
15
+ }
16
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AA4CA,MAAM,UAAU,yBAAyB,CAAC,OAAyB;IACjE,OAAO;QACL,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;QACzB,SAAS,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE;QAC3B,aAAa,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;QAC7C,gBAAgB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;QAClD,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;QAC7C,UAAU,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;QACjD,gBAAgB,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE;QACzD,YAAY,OAAO,CAAC,eAAe,EAAE,QAAQ,IAAI,MAAM,EAAE;QACzD,cAAc,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;QAC3C,SAAS,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE;QAChD,iBAAiB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AgentConfig, AgentExecutionInput, AgentExecutionResult } from '../context.js';
2
+ export interface AgentHandler {
3
+ execute(input: AgentExecutionInput, config: AgentConfig): Promise<AgentExecutionResult>;
4
+ }
5
+ export declare function createDefaultAgentHandler(): AgentHandler;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,YAAY;IAC3B,OAAO,CACL,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAiBxD"}
@@ -0,0 +1,61 @@
1
+ export function createDefaultAgentHandler() {
2
+ return {
3
+ async execute(input, config) {
4
+ const deliverable = buildDefaultDeliverable(input, config);
5
+ return {
6
+ success: true,
7
+ summary: `${config.name} completed ${input.task.id}`,
8
+ deliverables: [deliverable],
9
+ needsReview: true,
10
+ metadata: {
11
+ role: config.role,
12
+ skills: config.skills
13
+ }
14
+ };
15
+ }
16
+ };
17
+ }
18
+ function buildDefaultDeliverable(input, config) {
19
+ return {
20
+ type: detectDeliverableType(input.task.title),
21
+ title: `${input.task.title} 交付物`,
22
+ content: [
23
+ `# ${input.task.title}`,
24
+ '',
25
+ `- Task ID: ${input.task.id}`,
26
+ `- Phase: ${input.context.phase.id} ${input.context.phase.name}`,
27
+ `- Worker Role: ${config.role}`,
28
+ `- Knowledge Items: ${input.context.knowledge.items.length}`,
29
+ `- Existing Deliverables: ${input.context.deliverables.task.length}`,
30
+ '',
31
+ '## Task Description',
32
+ '',
33
+ input.task.description || '暂无补充描述。',
34
+ '',
35
+ '## Context Notes',
36
+ '',
37
+ input.context.sessions.active
38
+ ? `当前活动会话: ${input.context.sessions.active.id}`
39
+ : '当前没有活动会话。'
40
+ ].join('\n')
41
+ };
42
+ }
43
+ function detectDeliverableType(title) {
44
+ const normalized = title.toLowerCase();
45
+ if (normalized.includes('测试') || normalized.includes('test')) {
46
+ return 'test';
47
+ }
48
+ if (normalized.includes('实现') ||
49
+ normalized.includes('开发') ||
50
+ normalized.includes('code')) {
51
+ return 'code';
52
+ }
53
+ if (normalized.includes('配置') || normalized.includes('config')) {
54
+ return 'config';
55
+ }
56
+ if (normalized.includes('设计') || normalized.includes('ui')) {
57
+ return 'design';
58
+ }
59
+ return 'document';
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/handlers/index.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM;YACzB,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,cAAc,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;gBACpD,YAAY,EAAE,CAAC,WAAW,CAAC;gBAC3B,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE;oBACR,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAA0B,EAC1B,MAAmB;IAEnB,OAAO;QACL,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7C,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM;QAChC,OAAO,EAAE;YACP,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;YACvB,EAAE;YACF,cAAc,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YAC7B,YAAY,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YAChE,kBAAkB,MAAM,CAAC,IAAI,EAAE;YAC/B,sBAAsB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;YAC5D,4BAA4B,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;YACpE,EAAE;YACF,qBAAqB;YACrB,EAAE;YACF,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS;YACnC,EAAE;YACF,kBAAkB;YAClB,EAAE;YACF,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAC3B,CAAC,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC/C,CAAC,CAAC,WAAW;SAChB,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IACE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Agent 标准执行门面
3
+ * 仅负责接受标准化输入并委托给 handler
4
+ */
5
+ import { AgentConfig, AgentExecutionInput, AgentExecutionResult } from './context.js';
6
+ import type { AgentExecutionEngine } from './adapters/base.js';
7
+ export type AgentTask = AgentExecutionInput;
8
+ export type AgentResult = AgentExecutionResult;
9
+ export { AgentConfig } from './context.js';
10
+ export declare class Agent {
11
+ private readonly config;
12
+ private readonly executor;
13
+ constructor(config: AgentConfig, executor?: AgentExecutionEngine);
14
+ execute(input: AgentExecutionInput): Promise<AgentExecutionResult>;
15
+ getAdapterProvider(): string;
16
+ }
17
+ export declare function reviewTaskDeliverables(taskId: string, basePath?: string): Promise<void>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAC5C,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAG9C,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,oBAAgE;IAMtE,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIxE,kBAAkB,IAAI,MAAM;CAI7B;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Agent 标准执行门面
3
+ * 仅负责接受标准化输入并委托给 handler
4
+ */
5
+ import { listDeliverables } from '../core/deliverable.js';
6
+ import logger from '../cli/utils/logger.js';
7
+ import { createAgentAdapter } from './adapters/index.js';
8
+ export class Agent {
9
+ config;
10
+ executor;
11
+ constructor(config, executor = createAgentAdapter(config.runtimeProfile)) {
12
+ this.config = config;
13
+ this.executor = executor;
14
+ }
15
+ async execute(input) {
16
+ return this.executor.execute(input, this.config);
17
+ }
18
+ getAdapterProvider() {
19
+ const candidate = this.executor;
20
+ return candidate.provider ?? 'custom';
21
+ }
22
+ }
23
+ export async function reviewTaskDeliverables(taskId, basePath = process.cwd()) {
24
+ const deliverables = await listDeliverables(taskId, basePath);
25
+ if (deliverables.length === 0) {
26
+ logger.info('该任务没有交付物需要审核');
27
+ return;
28
+ }
29
+ console.log(`\n📋 任务 "${taskId}" 的交付物:`);
30
+ for (const deliverable of deliverables) {
31
+ console.log(`\n 📄 ${deliverable.title}`);
32
+ console.log(` 路径: ${deliverable.path}`);
33
+ console.log(` 状态: ${deliverable.status}`);
34
+ }
35
+ console.log(`\n💡 使用 webforge review ${taskId} --approve 来审核交付物`);
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAM5C,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qBAAqB,CAAC;AAO5E,MAAM,OAAO,KAAK;IACC,MAAM,CAAc;IACpB,QAAQ,CAAuB;IAEhD,YACE,MAAmB,EACnB,WAAiC,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC;QAE1E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAiC,CAAC;QACzD,OAAO,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACxC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,WAAmB,OAAO,CAAC,GAAG,EAAE;IAEhC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,SAAS,CAAC,CAAC;IAEzC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,mBAAmB,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Agent 类型定义
3
+ */
4
+ export interface AgentConfig {
5
+ name: string;
6
+ systemPrompt: string;
7
+ tools: string[];
8
+ model?: string;
9
+ }
10
+ export interface AgentTask {
11
+ task: string;
12
+ description?: string;
13
+ context: string;
14
+ phase: string;
15
+ }
16
+ export interface AgentResult {
17
+ success: boolean;
18
+ output?: string;
19
+ error?: string;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}