@straiffi/archon 1.0.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 (124) hide show
  1. package/README.md +224 -0
  2. package/dist/cli.js +216 -0
  3. package/dist/client/assets/index-8_-boBBA.css +2 -0
  4. package/dist/client/assets/index-s_jjeqha.js +176 -0
  5. package/dist/client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  6. package/dist/client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  7. package/dist/client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  8. package/dist/client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  9. package/dist/client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  10. package/dist/client/favicon.svg +62 -0
  11. package/dist/client/icons.svg +24 -0
  12. package/dist/client/index.html +14 -0
  13. package/dist/server/db.js +764 -0
  14. package/dist/server/db.js.map +1 -0
  15. package/dist/server/index.js +5134 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/lib/agent.js +1302 -0
  18. package/dist/server/lib/agent.js.map +1 -0
  19. package/dist/server/lib/buildChains.js +2 -0
  20. package/dist/server/lib/buildChains.js.map +1 -0
  21. package/dist/server/lib/buildFlow.js +59 -0
  22. package/dist/server/lib/buildFlow.js.map +1 -0
  23. package/dist/server/lib/buildSequences.js +599 -0
  24. package/dist/server/lib/buildSequences.js.map +1 -0
  25. package/dist/server/lib/bundleActivity.js +95 -0
  26. package/dist/server/lib/bundleActivity.js.map +1 -0
  27. package/dist/server/lib/bundlePullRequests.js +126 -0
  28. package/dist/server/lib/bundlePullRequests.js.map +1 -0
  29. package/dist/server/lib/chatMessages.js +60 -0
  30. package/dist/server/lib/chatMessages.js.map +1 -0
  31. package/dist/server/lib/chatTargets.js +123 -0
  32. package/dist/server/lib/chatTargets.js.map +1 -0
  33. package/dist/server/lib/chatTicketProposals.js +180 -0
  34. package/dist/server/lib/chatTicketProposals.js.map +1 -0
  35. package/dist/server/lib/chats.js +279 -0
  36. package/dist/server/lib/chats.js.map +1 -0
  37. package/dist/server/lib/config.js +3 -0
  38. package/dist/server/lib/config.js.map +1 -0
  39. package/dist/server/lib/cors.js +30 -0
  40. package/dist/server/lib/cors.js.map +1 -0
  41. package/dist/server/lib/directoryPicker.js +174 -0
  42. package/dist/server/lib/directoryPicker.js.map +1 -0
  43. package/dist/server/lib/git.js +1284 -0
  44. package/dist/server/lib/git.js.map +1 -0
  45. package/dist/server/lib/integrations/github.js +511 -0
  46. package/dist/server/lib/integrations/github.js.map +1 -0
  47. package/dist/server/lib/integrations/index.js +162 -0
  48. package/dist/server/lib/integrations/index.js.map +1 -0
  49. package/dist/server/lib/integrations/jira.js +283 -0
  50. package/dist/server/lib/integrations/jira.js.map +1 -0
  51. package/dist/server/lib/integrations/planning.js +27 -0
  52. package/dist/server/lib/integrations/planning.js.map +1 -0
  53. package/dist/server/lib/integrations/types.js +2 -0
  54. package/dist/server/lib/integrations/types.js.map +1 -0
  55. package/dist/server/lib/lightweightPrompt.js +88 -0
  56. package/dist/server/lib/lightweightPrompt.js.map +1 -0
  57. package/dist/server/lib/models.js +219 -0
  58. package/dist/server/lib/models.js.map +1 -0
  59. package/dist/server/lib/preview.js +377 -0
  60. package/dist/server/lib/preview.js.map +1 -0
  61. package/dist/server/lib/previewProxy.js +659 -0
  62. package/dist/server/lib/previewProxy.js.map +1 -0
  63. package/dist/server/lib/projectAutoConfig.js +682 -0
  64. package/dist/server/lib/projectAutoConfig.js.map +1 -0
  65. package/dist/server/lib/projectFileSuggestions.js +133 -0
  66. package/dist/server/lib/projectFileSuggestions.js.map +1 -0
  67. package/dist/server/lib/projectMemory.js +1519 -0
  68. package/dist/server/lib/projectMemory.js.map +1 -0
  69. package/dist/server/lib/projectMemoryPrompt.js +390 -0
  70. package/dist/server/lib/projectMemoryPrompt.js.map +1 -0
  71. package/dist/server/lib/projectMemoryScan.js +681 -0
  72. package/dist/server/lib/projectMemoryScan.js.map +1 -0
  73. package/dist/server/lib/projectMemorySuggestions.js +166 -0
  74. package/dist/server/lib/projectMemorySuggestions.js.map +1 -0
  75. package/dist/server/lib/projectMemoryTransfer.js +958 -0
  76. package/dist/server/lib/projectMemoryTransfer.js.map +1 -0
  77. package/dist/server/lib/projects.js +569 -0
  78. package/dist/server/lib/projects.js.map +1 -0
  79. package/dist/server/lib/promptSkills.js +28 -0
  80. package/dist/server/lib/promptSkills.js.map +1 -0
  81. package/dist/server/lib/queue.js +15 -0
  82. package/dist/server/lib/queue.js.map +1 -0
  83. package/dist/server/lib/reviewFindings.js +390 -0
  84. package/dist/server/lib/reviewFindings.js.map +1 -0
  85. package/dist/server/lib/run.js +416 -0
  86. package/dist/server/lib/run.js.map +1 -0
  87. package/dist/server/lib/runtimePaths.js +93 -0
  88. package/dist/server/lib/runtimePaths.js.map +1 -0
  89. package/dist/server/lib/shell.js +27 -0
  90. package/dist/server/lib/shell.js.map +1 -0
  91. package/dist/server/lib/skills.js +124 -0
  92. package/dist/server/lib/skills.js.map +1 -0
  93. package/dist/server/lib/startDev.js +18 -0
  94. package/dist/server/lib/startDev.js.map +1 -0
  95. package/dist/server/lib/staticClient.js +80 -0
  96. package/dist/server/lib/staticClient.js.map +1 -0
  97. package/dist/server/lib/terminal.js +366 -0
  98. package/dist/server/lib/terminal.js.map +1 -0
  99. package/dist/server/lib/ticketDependencies.js +174 -0
  100. package/dist/server/lib/ticketDependencies.js.map +1 -0
  101. package/dist/server/lib/ticketMessages.js +65 -0
  102. package/dist/server/lib/ticketMessages.js.map +1 -0
  103. package/dist/server/lib/ticketOpenQuestions.js +128 -0
  104. package/dist/server/lib/ticketOpenQuestions.js.map +1 -0
  105. package/dist/server/lib/ticketUndo.js +549 -0
  106. package/dist/server/lib/ticketUndo.js.map +1 -0
  107. package/dist/server/lib/tickets.js +981 -0
  108. package/dist/server/lib/tickets.js.map +1 -0
  109. package/dist/server/lib/types.js +2 -0
  110. package/dist/server/lib/types.js.map +1 -0
  111. package/dist/server/package.json +3 -0
  112. package/dist/server/workers/build.js +229 -0
  113. package/dist/server/workers/build.js.map +1 -0
  114. package/dist/server/workers/chat.js +190 -0
  115. package/dist/server/workers/chat.js.map +1 -0
  116. package/dist/server/workers/followUp.js +204 -0
  117. package/dist/server/workers/followUp.js.map +1 -0
  118. package/dist/server/workers/plan.js +1130 -0
  119. package/dist/server/workers/plan.js.map +1 -0
  120. package/dist/server/workers/planFollowUp.js +360 -0
  121. package/dist/server/workers/planFollowUp.js.map +1 -0
  122. package/dist/server/workers/review.js +167 -0
  123. package/dist/server/workers/review.js.map +1 -0
  124. package/package.json +40 -0
@@ -0,0 +1,204 @@
1
+ import db from '../db.js';
2
+ import { runAgent } from '../lib/agent.js';
3
+ import config from '../lib/config.js';
4
+ import { persistProjectMemorySuggestions } from '../lib/projectMemory.js';
5
+ import { resolveWorktreePath } from '../lib/git.js';
6
+ import { getProjectMemoryPromptBlock } from '../lib/projectMemoryPrompt.js';
7
+ import { PROJECT_MEMORY_SUGGESTION_PROMPT_RULES } from '../lib/projectMemorySuggestions.js';
8
+ import { getEffectiveProject } from '../lib/projects.js';
9
+ import { enqueue, isRunning } from '../lib/queue.js';
10
+ import { getLatestReviewMarkdownForContext } from '../lib/reviewFindings.js';
11
+ import { registerBundleActivity, unregisterBundleActivity } from '../lib/bundleActivity.js';
12
+ import { buildOpenQuestionsPromptBlock, createTicketOpenQuestionsContext, formatAssistantMessageWithOpenQuestions, OPEN_QUESTIONS_RESPONSE_RULES, parseAgentResponseWithOpenQuestions, } from '../lib/ticketOpenQuestions.js';
13
+ import { prependSkillPromptBlock } from '../lib/promptSkills.js';
14
+ import { clearTicketStreamingResponse, createTicketMessage, markTicketDescriptionVisibleInBundle, } from '../lib/ticketMessages.js';
15
+ import { captureStageSuccess } from '../lib/ticketUndo.js';
16
+ import { autoParkTicketIfStale, getTicket, resolveTicketBranch, resolveTicketTool, resolveTicketWorkerKey } from '../lib/tickets.js';
17
+ const getErrorMessage = (error) => {
18
+ return error instanceof Error ? error.message : String(error);
19
+ };
20
+ const updateStatus = (ticketId, status, log, io) => {
21
+ db.prepare('UPDATE tickets SET agent_status = ?, agent_log = ?, streaming_response = NULL, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(status, log ?? null, ticketId);
22
+ const updatedTicket = getTicket(ticketId);
23
+ if (updatedTicket?.worktree_bundle_id && updatedTicket.state !== 'plan') {
24
+ markTicketDescriptionVisibleInBundle(ticketId);
25
+ }
26
+ const emittedTicket = getTicket(ticketId) ?? updatedTicket;
27
+ if (emittedTicket) {
28
+ io.emit('ticket:updated', emittedTicket);
29
+ }
30
+ };
31
+ const clearBuildCompletion = (ticketId) => {
32
+ db.prepare('UPDATE tickets SET build_completed_at = NULL, auto_park_dismissed_at = NULL, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(ticketId);
33
+ };
34
+ const markBuildCompleted = (ticketId) => {
35
+ db.prepare('UPDATE tickets SET build_completed_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(ticketId);
36
+ };
37
+ const getBuildOpenQuestionsBlock = (ticket) => {
38
+ return buildOpenQuestionsPromptBlock(ticket.planning_context?.open_questions ?? []);
39
+ };
40
+ const followUpPrompt = (ticket, instruction) => {
41
+ const projectMemory = getProjectMemoryPromptBlock(ticket.project_id, {
42
+ stage: 'follow_up',
43
+ title: ticket.title,
44
+ description: ticket.description,
45
+ });
46
+ const openQuestionsBlock = getBuildOpenQuestionsBlock(ticket);
47
+ return prependSkillPromptBlock(`Continue working on this ticket in the current worktree. Do not restart from scratch unless the requested change requires it.
48
+
49
+ <ticket>
50
+ ${ticket.description || ticket.title}
51
+ </ticket>
52
+
53
+ ${projectMemory ? `${projectMemory}
54
+
55
+ ` : ''}
56
+
57
+ ${openQuestionsBlock ? `${openQuestionsBlock}
58
+
59
+ ` : ''}
60
+
61
+ <follow_up_instruction>
62
+ ${instruction}
63
+ </follow_up_instruction>
64
+
65
+ Apply only the requested changes in the current project worktree. If the ticket references linked projects or other repositories, treat them as read-only context and do not modify them. Do NOT commit your changes.
66
+
67
+ ${OPEN_QUESTIONS_RESPONSE_RULES}
68
+
69
+ ${PROJECT_MEMORY_SUGGESTION_PROMPT_RULES}`, ticket.skills);
70
+ };
71
+ const hasPreviousReviewFollowUp = (ticket) => {
72
+ return (ticket.messages ?? []).some(message => message.role === 'user' && message.kind === 'follow_up');
73
+ };
74
+ const reviewFindingsFollowUpPrompt = (ticket, reviewFindings, instruction) => {
75
+ const projectMemory = getProjectMemoryPromptBlock(ticket.project_id, {
76
+ stage: 'follow_up',
77
+ title: ticket.title,
78
+ description: ticket.description,
79
+ });
80
+ return `You are applying fixes based on a completed code review. This is an implementation task, not a review task.
81
+
82
+ <review_findings>
83
+ ${reviewFindings}
84
+ </review_findings>
85
+
86
+ ${projectMemory ? `${projectMemory}
87
+
88
+ ` : ''}
89
+
90
+ <follow_up_instruction>
91
+ ${instruction}
92
+ </follow_up_instruction>
93
+
94
+ Use the review findings as the source of truth unless the follow-up instruction narrows the scope. Apply only the requested changes in the current project worktree. Do not re-review the code. Do not respond with findings unless the instruction explicitly asks for another review. If the follow-up references linked projects or other repositories, treat them as read-only context and do not modify them. Do NOT commit your changes.
95
+
96
+ ${PROJECT_MEMORY_SUGGESTION_PROMPT_RULES}`;
97
+ };
98
+ export const startFollowUp = (ticket, io, instruction) => {
99
+ const jobKey = resolveTicketWorkerKey(ticket, 'follow_up');
100
+ if (!jobKey || isRunning(jobKey)) {
101
+ return false;
102
+ }
103
+ updateStatus(ticket.id, 'running', null, io);
104
+ const activityKind = ticket.state === 'build' ? 'build_follow_up' : 'review_follow_up';
105
+ enqueue(jobKey, async () => {
106
+ registerBundleActivity(ticket, activityKind);
107
+ try {
108
+ const project = getEffectiveProject(ticket);
109
+ if (!project) {
110
+ updateStatus(ticket.id, 'error', 'Ticket project no longer exists', io);
111
+ return;
112
+ }
113
+ const branch = resolveTicketBranch(ticket);
114
+ if (!branch) {
115
+ updateStatus(ticket.id, 'error', 'Worktree not ready yet', io);
116
+ return;
117
+ }
118
+ const cwd = ticket.bundle?.kind === 'project_root' ? project.repo_path : resolveWorktreePath(branch, project);
119
+ const tool = resolveTicketTool(ticket, config.tool ?? 'opencode');
120
+ const isBuildTicket = ticket.state === 'build';
121
+ const isReviewTicket = ticket.state === 'review';
122
+ const latestReviewFindings = isBuildTicket
123
+ ? ''
124
+ : getLatestReviewMarkdownForContext({
125
+ ticketId: ticket.id,
126
+ projectId: ticket.project_id,
127
+ worktreeBundleId: ticket.worktree_bundle_id,
128
+ });
129
+ if (isBuildTicket) {
130
+ clearBuildCompletion(ticket.id);
131
+ }
132
+ const isReviewResume = isReviewTicket && Boolean(ticket.session_id) && hasPreviousReviewFollowUp(ticket);
133
+ const prompt = isBuildTicket
134
+ ? followUpPrompt(ticket, instruction)
135
+ : prependSkillPromptBlock(reviewFindingsFollowUpPrompt(ticket, latestReviewFindings, instruction), ticket.skills);
136
+ const resumeSessionId = isBuildTicket || isReviewResume ? ticket.session_id : null;
137
+ const finalResponse = await runAgent({
138
+ ticketId: ticket.id,
139
+ tool,
140
+ prompt,
141
+ cwd,
142
+ model: ticket.model,
143
+ variant: ticket.variant,
144
+ resumeSessionId,
145
+ trackBuildProcess: isBuildTicket || isReviewTicket,
146
+ emitSuccessUpdate: false,
147
+ io,
148
+ });
149
+ const parsedResponse = typeof finalResponse === 'string'
150
+ ? parseAgentResponseWithOpenQuestions(finalResponse)
151
+ : { response: '', openQuestions: [], suggestions: [] };
152
+ const assistantMessage = isBuildTicket
153
+ ? formatAssistantMessageWithOpenQuestions({
154
+ response: parsedResponse.response,
155
+ openQuestions: parsedResponse.openQuestions,
156
+ })
157
+ : parsedResponse.response.trim();
158
+ if (assistantMessage) {
159
+ createTicketMessage({
160
+ ticketId: ticket.id,
161
+ role: 'assistant',
162
+ kind: 'final_response',
163
+ content: assistantMessage,
164
+ });
165
+ }
166
+ const completedTicket = getTicket(ticket.id) ?? ticket;
167
+ if (isBuildTicket && completedTicket.agent_status === 'done') {
168
+ db.prepare('UPDATE tickets SET planning_context_json = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?').run(JSON.stringify(createTicketOpenQuestionsContext(completedTicket, parsedResponse.openQuestions)), ticket.id);
169
+ }
170
+ if (project.memory_enabled && parsedResponse.suggestions.length > 0) {
171
+ persistProjectMemorySuggestions(project.id, ticket.id, 'follow_up', parsedResponse.suggestions);
172
+ }
173
+ clearTicketStreamingResponse(ticket.id);
174
+ const completedWithMessage = getTicket(ticket.id);
175
+ if (completedWithMessage) {
176
+ io.emit('ticket:updated', completedWithMessage);
177
+ }
178
+ const updated = getTicket(ticket.id);
179
+ if (isBuildTicket && updated?.agent_status === 'done') {
180
+ markBuildCompleted(ticket.id);
181
+ captureStageSuccess(ticket.id, 'build');
182
+ const completed = autoParkTicketIfStale(ticket.id);
183
+ if (completed) {
184
+ io.emit('ticket:updated', completed);
185
+ }
186
+ }
187
+ else if (!isBuildTicket && updated?.agent_status === 'done') {
188
+ captureStageSuccess(ticket.id, 'review');
189
+ const completed = autoParkTicketIfStale(ticket.id);
190
+ if (completed) {
191
+ io.emit('ticket:updated', completed);
192
+ }
193
+ }
194
+ }
195
+ catch (error) {
196
+ updateStatus(ticket.id, 'error', getErrorMessage(error), io);
197
+ }
198
+ finally {
199
+ unregisterBundleActivity(ticket, activityKind);
200
+ }
201
+ });
202
+ return true;
203
+ };
204
+ //# sourceMappingURL=followUp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"followUp.js","sourceRoot":"","sources":["../../../server/workers/followUp.ts"],"names":[],"mappings":"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"}