sylas-edge-worker 0.2.21

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 (163) hide show
  1. package/README.md +293 -0
  2. package/dist/ActivityPoster.d.ts +15 -0
  3. package/dist/ActivityPoster.d.ts.map +1 -0
  4. package/dist/ActivityPoster.js +194 -0
  5. package/dist/ActivityPoster.js.map +1 -0
  6. package/dist/AgentSessionManager.d.ts +280 -0
  7. package/dist/AgentSessionManager.d.ts.map +1 -0
  8. package/dist/AgentSessionManager.js +1412 -0
  9. package/dist/AgentSessionManager.js.map +1 -0
  10. package/dist/AskUserQuestionHandler.d.ts +97 -0
  11. package/dist/AskUserQuestionHandler.d.ts.map +1 -0
  12. package/dist/AskUserQuestionHandler.js +206 -0
  13. package/dist/AskUserQuestionHandler.js.map +1 -0
  14. package/dist/AttachmentService.d.ts +69 -0
  15. package/dist/AttachmentService.d.ts.map +1 -0
  16. package/dist/AttachmentService.js +369 -0
  17. package/dist/AttachmentService.js.map +1 -0
  18. package/dist/ChatSessionHandler.d.ts +87 -0
  19. package/dist/ChatSessionHandler.d.ts.map +1 -0
  20. package/dist/ChatSessionHandler.js +231 -0
  21. package/dist/ChatSessionHandler.js.map +1 -0
  22. package/dist/ConfigManager.d.ts +91 -0
  23. package/dist/ConfigManager.d.ts.map +1 -0
  24. package/dist/ConfigManager.js +227 -0
  25. package/dist/ConfigManager.js.map +1 -0
  26. package/dist/EdgeWorker.d.ts +670 -0
  27. package/dist/EdgeWorker.d.ts.map +1 -0
  28. package/dist/EdgeWorker.js +3801 -0
  29. package/dist/EdgeWorker.js.map +1 -0
  30. package/dist/GitService.d.ts +39 -0
  31. package/dist/GitService.d.ts.map +1 -0
  32. package/dist/GitService.js +432 -0
  33. package/dist/GitService.js.map +1 -0
  34. package/dist/GlobalSessionRegistry.d.ts +142 -0
  35. package/dist/GlobalSessionRegistry.d.ts.map +1 -0
  36. package/dist/GlobalSessionRegistry.js +254 -0
  37. package/dist/GlobalSessionRegistry.js.map +1 -0
  38. package/dist/PromptBuilder.d.ts +175 -0
  39. package/dist/PromptBuilder.d.ts.map +1 -0
  40. package/dist/PromptBuilder.js +884 -0
  41. package/dist/PromptBuilder.js.map +1 -0
  42. package/dist/RepositoryRouter.d.ts +152 -0
  43. package/dist/RepositoryRouter.d.ts.map +1 -0
  44. package/dist/RepositoryRouter.js +480 -0
  45. package/dist/RepositoryRouter.js.map +1 -0
  46. package/dist/RunnerSelectionService.d.ts +62 -0
  47. package/dist/RunnerSelectionService.d.ts.map +1 -0
  48. package/dist/RunnerSelectionService.js +379 -0
  49. package/dist/RunnerSelectionService.js.map +1 -0
  50. package/dist/SharedApplicationServer.d.ts +107 -0
  51. package/dist/SharedApplicationServer.d.ts.map +1 -0
  52. package/dist/SharedApplicationServer.js +247 -0
  53. package/dist/SharedApplicationServer.js.map +1 -0
  54. package/dist/SharedWebhookServer.d.ts +39 -0
  55. package/dist/SharedWebhookServer.d.ts.map +1 -0
  56. package/dist/SharedWebhookServer.js +150 -0
  57. package/dist/SharedWebhookServer.js.map +1 -0
  58. package/dist/SlackChatAdapter.d.ts +25 -0
  59. package/dist/SlackChatAdapter.d.ts.map +1 -0
  60. package/dist/SlackChatAdapter.js +143 -0
  61. package/dist/SlackChatAdapter.js.map +1 -0
  62. package/dist/UserAccessControl.d.ts +69 -0
  63. package/dist/UserAccessControl.d.ts.map +1 -0
  64. package/dist/UserAccessControl.js +171 -0
  65. package/dist/UserAccessControl.js.map +1 -0
  66. package/dist/WorktreeIncludeService.d.ts +32 -0
  67. package/dist/WorktreeIncludeService.d.ts.map +1 -0
  68. package/dist/WorktreeIncludeService.js +123 -0
  69. package/dist/WorktreeIncludeService.js.map +1 -0
  70. package/dist/index.d.ts +22 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +17 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/label-prompt-template.md +27 -0
  75. package/dist/procedures/ProcedureAnalyzer.d.ts +69 -0
  76. package/dist/procedures/ProcedureAnalyzer.d.ts.map +1 -0
  77. package/dist/procedures/ProcedureAnalyzer.js +271 -0
  78. package/dist/procedures/ProcedureAnalyzer.js.map +1 -0
  79. package/dist/procedures/index.d.ts +7 -0
  80. package/dist/procedures/index.d.ts.map +1 -0
  81. package/dist/procedures/index.js +7 -0
  82. package/dist/procedures/index.js.map +1 -0
  83. package/dist/procedures/registry.d.ts +156 -0
  84. package/dist/procedures/registry.d.ts.map +1 -0
  85. package/dist/procedures/registry.js +240 -0
  86. package/dist/procedures/registry.js.map +1 -0
  87. package/dist/procedures/types.d.ts +103 -0
  88. package/dist/procedures/types.d.ts.map +1 -0
  89. package/dist/procedures/types.js +5 -0
  90. package/dist/procedures/types.js.map +1 -0
  91. package/dist/prompt-assembly/types.d.ts +80 -0
  92. package/dist/prompt-assembly/types.d.ts.map +1 -0
  93. package/dist/prompt-assembly/types.js +8 -0
  94. package/dist/prompt-assembly/types.js.map +1 -0
  95. package/dist/prompts/builder.md +191 -0
  96. package/dist/prompts/debugger.md +128 -0
  97. package/dist/prompts/graphite-orchestrator.md +362 -0
  98. package/dist/prompts/orchestrator.md +290 -0
  99. package/dist/prompts/scoper.md +95 -0
  100. package/dist/prompts/standard-issue-assigned-user-prompt.md +33 -0
  101. package/dist/prompts/subroutines/changelog-update.md +79 -0
  102. package/dist/prompts/subroutines/coding-activity.md +12 -0
  103. package/dist/prompts/subroutines/concise-summary.md +67 -0
  104. package/dist/prompts/subroutines/debugger-fix.md +92 -0
  105. package/dist/prompts/subroutines/debugger-reproduction.md +74 -0
  106. package/dist/prompts/subroutines/full-delegation.md +68 -0
  107. package/dist/prompts/subroutines/get-approval.md +175 -0
  108. package/dist/prompts/subroutines/gh-pr.md +80 -0
  109. package/dist/prompts/subroutines/git-commit.md +37 -0
  110. package/dist/prompts/subroutines/plan-summary.md +21 -0
  111. package/dist/prompts/subroutines/preparation.md +16 -0
  112. package/dist/prompts/subroutines/question-answer.md +8 -0
  113. package/dist/prompts/subroutines/question-investigation.md +8 -0
  114. package/dist/prompts/subroutines/release-execution.md +81 -0
  115. package/dist/prompts/subroutines/release-summary.md +60 -0
  116. package/dist/prompts/subroutines/user-testing-summary.md +87 -0
  117. package/dist/prompts/subroutines/user-testing.md +48 -0
  118. package/dist/prompts/subroutines/validation-fixer.md +56 -0
  119. package/dist/prompts/subroutines/verbose-summary.md +46 -0
  120. package/dist/prompts/subroutines/verifications.md +77 -0
  121. package/dist/prompts/todolist-system-prompt-extension.md +15 -0
  122. package/dist/sinks/IActivitySink.d.ts +60 -0
  123. package/dist/sinks/IActivitySink.d.ts.map +1 -0
  124. package/dist/sinks/IActivitySink.js +2 -0
  125. package/dist/sinks/IActivitySink.js.map +1 -0
  126. package/dist/sinks/LinearActivitySink.d.ts +69 -0
  127. package/dist/sinks/LinearActivitySink.d.ts.map +1 -0
  128. package/dist/sinks/LinearActivitySink.js +111 -0
  129. package/dist/sinks/LinearActivitySink.js.map +1 -0
  130. package/dist/sinks/NoopActivitySink.d.ts +13 -0
  131. package/dist/sinks/NoopActivitySink.d.ts.map +1 -0
  132. package/dist/sinks/NoopActivitySink.js +17 -0
  133. package/dist/sinks/NoopActivitySink.js.map +1 -0
  134. package/dist/sinks/index.d.ts +9 -0
  135. package/dist/sinks/index.d.ts.map +1 -0
  136. package/dist/sinks/index.js +8 -0
  137. package/dist/sinks/index.js.map +1 -0
  138. package/dist/types.d.ts +32 -0
  139. package/dist/types.d.ts.map +1 -0
  140. package/dist/types.js +2 -0
  141. package/dist/types.js.map +1 -0
  142. package/dist/validation/ValidationLoopController.d.ts +54 -0
  143. package/dist/validation/ValidationLoopController.d.ts.map +1 -0
  144. package/dist/validation/ValidationLoopController.js +242 -0
  145. package/dist/validation/ValidationLoopController.js.map +1 -0
  146. package/dist/validation/index.d.ts +7 -0
  147. package/dist/validation/index.d.ts.map +1 -0
  148. package/dist/validation/index.js +7 -0
  149. package/dist/validation/index.js.map +1 -0
  150. package/dist/validation/types.d.ts +82 -0
  151. package/dist/validation/types.d.ts.map +1 -0
  152. package/dist/validation/types.js +29 -0
  153. package/dist/validation/types.js.map +1 -0
  154. package/label-prompt-template.md +27 -0
  155. package/package.json +56 -0
  156. package/prompt-template.md +116 -0
  157. package/prompts/builder.md +191 -0
  158. package/prompts/debugger.md +128 -0
  159. package/prompts/graphite-orchestrator.md +362 -0
  160. package/prompts/orchestrator.md +290 -0
  161. package/prompts/scoper.md +95 -0
  162. package/prompts/standard-issue-assigned-user-prompt.md +33 -0
  163. package/prompts/todolist-system-prompt-extension.md +15 -0
@@ -0,0 +1,271 @@
1
+ /**
2
+ * ProcedureAnalyzer - Intelligent analysis of agent sessions to determine procedures
3
+ *
4
+ * Uses a SimpleAgentRunner (Claude or Gemini) to analyze requests and determine
5
+ * which procedure (sequence of subroutines) should be executed.
6
+ */
7
+ import { createLogger, } from "sylas-core";
8
+ import { SimpleGeminiRunner } from "sylas-gemini-runner";
9
+ import { SimpleClaudeRunner } from "sylas-simple-agent-runner";
10
+ import { getProcedureForClassification, PROCEDURES } from "./registry.js";
11
+ export class ProcedureAnalyzer {
12
+ analysisRunner;
13
+ procedures = new Map();
14
+ logger;
15
+ constructor(config) {
16
+ this.logger =
17
+ config.logger ?? createLogger({ component: "ProcedureAnalyzer" });
18
+ // Determine which runner to use
19
+ const runnerType = config.runnerType || "gemini";
20
+ // Use runner-specific default models if not provided
21
+ const defaultModel = runnerType === "claude" ? "haiku" : "gemini-2.5-flash-lite";
22
+ const defaultFallbackModel = runnerType === "claude" ? "sonnet" : "gemini-2.0-flash-exp";
23
+ // Create runner configuration
24
+ const runnerConfig = {
25
+ validResponses: [
26
+ "question",
27
+ "documentation",
28
+ "transient",
29
+ "planning",
30
+ "code",
31
+ "debugger",
32
+ "orchestrator",
33
+ "user-testing",
34
+ "release",
35
+ ],
36
+ sylasHome: config.sylasHome,
37
+ model: config.model || defaultModel,
38
+ fallbackModel: defaultFallbackModel,
39
+ systemPrompt: this.buildAnalysisSystemPrompt(),
40
+ maxTurns: 1,
41
+ timeoutMs: config.timeoutMs || 10000,
42
+ };
43
+ // Initialize the appropriate runner based on type
44
+ this.analysisRunner =
45
+ runnerType === "claude"
46
+ ? new SimpleClaudeRunner(runnerConfig)
47
+ : new SimpleGeminiRunner(runnerConfig);
48
+ // Load all predefined procedures from registry
49
+ this.loadPredefinedProcedures();
50
+ }
51
+ /**
52
+ * Build the system prompt for request analysis and classification
53
+ */
54
+ buildAnalysisSystemPrompt() {
55
+ return `You are a request classifier for a software agent system.
56
+
57
+ Analyze the Linear issue request and classify it into ONE of these categories:
58
+
59
+ **question**: User is asking a question, seeking information, or requesting explanation.
60
+ - Examples: "How does X work?", "What is the purpose of Y?", "Explain the architecture"
61
+
62
+ **documentation**: User wants documentation, markdown, or comments edited (no code changes).
63
+ - Examples: "Update the README", "Add docstrings to functions", "Fix typos in docs"
64
+
65
+ **transient**: Request involves MCP tools, temporary files, or no codebase interaction.
66
+ - Examples: "Search the web for X", "Generate a diagram", "Use Linear MCP to check issues"
67
+
68
+ **planning**: Request has vague requirements, needs clarification, or asks for an implementation plan.
69
+ - Examples: "Can you help with the authentication system?", "I need to improve performance", "Add a new feature for user management"
70
+ - Use when requirements are unclear, missing details, or user asks for a plan/proposal
71
+ - DO NOT use if the request has clear, specific requirements (use "code" instead)
72
+ - DO NOT use for adding/writing tests, fixing tests, or other test-related work (use "code" instead)
73
+
74
+ **debugger**: User EXPLICITLY requests the full debugging workflow with reproduction and approval.
75
+ - ONLY use this if the user specifically asks for: "debug this with approval workflow", "reproduce the bug first", "show me the root cause before fixing"
76
+ - DO NOT use for regular bug reports - those should use "code"
77
+ - Examples: "Debug this issue and get my approval before fixing", "Reproduce the authentication bug with approval checkpoint"
78
+
79
+ **orchestrator**: User EXPLICITLY requests decomposition into sub-issues with specialized agent delegation.
80
+ - ONLY use this if the user specifically asks for: "break this into sub-issues", "orchestrate this work", "use sub-agents", "delegate to specialized agents"
81
+ - DO NOT use for regular complex work - those should use "code"
82
+ - Examples: "Orchestrate this feature with sub-issues", "Break this down and delegate to specialized agents", "Create sub-tasks for this epic"
83
+
84
+ **code**: Request involves code changes with clear, specific requirements (DEFAULT for most work).
85
+ - Examples: "Fix bug in X", "Add feature Y", "Refactor module Z", "Implement new API endpoint", "Fix the login issue"
86
+ - Use this for ALL standard bug fixes and features with clear requirements
87
+ - Use this for ALL test-related work: "Add unit tests", "Fix failing tests", "Write test coverage", etc.
88
+ - Use this when user explicitly says "Classify as full development", "classify as code", or similar
89
+
90
+ **user-testing**: User EXPLICITLY requests a manual testing or user testing session.
91
+ - ONLY use this if the user specifically asks for: "test this for me", "run a testing session", "perform user testing", "manual testing"
92
+ - Examples: "Test the login flow manually", "Run user testing on the checkout feature", "Help me test this integration"
93
+ - DO NOT use for automated test writing (use "code" instead)
94
+ - This is for interactive, user-guided testing sessions
95
+
96
+ **release**: User EXPLICITLY requests a release, publish, or deployment workflow.
97
+ - ONLY use this if the user specifically asks for: "release", "publish", "deploy to npm", "create a release", "publish packages"
98
+ - Examples: "Release the new version", "Publish to npm", "Create a new release", "Deploy version 1.2.0"
99
+ - DO NOT use for regular code changes that mention versions (use "code" instead)
100
+ - This is for executing the full release/publish workflow
101
+
102
+ IMPORTANT: Respond with ONLY the classification word, nothing else.`;
103
+ }
104
+ /**
105
+ * Load predefined procedures from registry
106
+ */
107
+ loadPredefinedProcedures() {
108
+ for (const [name, procedure] of Object.entries(PROCEDURES)) {
109
+ this.procedures.set(name, procedure);
110
+ }
111
+ }
112
+ /**
113
+ * Analyze a request and determine which procedure to use
114
+ */
115
+ async determineRoutine(requestText) {
116
+ try {
117
+ // Classify the request using analysis runner
118
+ const result = await this.analysisRunner.query(`Classify this Linear issue request:\n\n${requestText}`);
119
+ const classification = result.response;
120
+ // Get procedure name for this classification
121
+ const procedureName = getProcedureForClassification(classification);
122
+ // Get procedure definition
123
+ const procedure = this.procedures.get(procedureName);
124
+ if (!procedure) {
125
+ throw new Error(`Procedure "${procedureName}" not found in registry`);
126
+ }
127
+ return {
128
+ classification,
129
+ procedure,
130
+ reasoning: `Classified as "${classification}" → using procedure "${procedureName}"`,
131
+ };
132
+ }
133
+ catch (error) {
134
+ // Fallback to full-development on error
135
+ this.logger.info("Error during analysis:", error);
136
+ const fallbackProcedure = this.procedures.get("full-development");
137
+ if (!fallbackProcedure) {
138
+ throw new Error("Fallback procedure 'full-development' not found");
139
+ }
140
+ return {
141
+ classification: "code",
142
+ procedure: fallbackProcedure,
143
+ reasoning: `Fallback to full-development due to error: ${error}`,
144
+ };
145
+ }
146
+ }
147
+ /**
148
+ * Get the next subroutine for a session
149
+ * Returns null if procedure is complete
150
+ */
151
+ getNextSubroutine(session) {
152
+ const procedureMetadata = session.metadata?.procedure;
153
+ if (!procedureMetadata) {
154
+ // No procedure metadata - session doesn't use procedures
155
+ return null;
156
+ }
157
+ const procedure = this.procedures.get(procedureMetadata.procedureName);
158
+ if (!procedure) {
159
+ this.logger.error(`Procedure "${procedureMetadata.procedureName}" not found`);
160
+ return null;
161
+ }
162
+ const nextIndex = procedureMetadata.currentSubroutineIndex + 1;
163
+ if (nextIndex >= procedure.subroutines.length) {
164
+ // Procedure complete
165
+ return null;
166
+ }
167
+ return procedure.subroutines[nextIndex] ?? null;
168
+ }
169
+ /**
170
+ * Get the current subroutine for a session
171
+ */
172
+ getCurrentSubroutine(session) {
173
+ const procedureMetadata = session.metadata?.procedure;
174
+ if (!procedureMetadata) {
175
+ return null;
176
+ }
177
+ const procedure = this.procedures.get(procedureMetadata.procedureName);
178
+ if (!procedure) {
179
+ return null;
180
+ }
181
+ const currentIndex = procedureMetadata.currentSubroutineIndex;
182
+ if (currentIndex < 0 || currentIndex >= procedure.subroutines.length) {
183
+ return null;
184
+ }
185
+ return procedure.subroutines[currentIndex] ?? null;
186
+ }
187
+ /**
188
+ * Initialize procedure metadata for a new session
189
+ */
190
+ initializeProcedureMetadata(session, procedure) {
191
+ if (!session.metadata) {
192
+ session.metadata = {};
193
+ }
194
+ session.metadata.procedure = {
195
+ procedureName: procedure.name,
196
+ currentSubroutineIndex: 0,
197
+ subroutineHistory: [],
198
+ };
199
+ }
200
+ /**
201
+ * Record subroutine completion and advance to next
202
+ */
203
+ advanceToNextSubroutine(session, sessionId, result) {
204
+ const procedureMetadata = session.metadata?.procedure;
205
+ if (!procedureMetadata) {
206
+ throw new Error("Cannot advance: session has no procedure metadata");
207
+ }
208
+ const currentSubroutine = this.getCurrentSubroutine(session);
209
+ if (currentSubroutine) {
210
+ const isOpenCodeSession = session.openCodeSessionId !== undefined;
211
+ const isCursorSession = !isOpenCodeSession && session.cursorSessionId !== undefined;
212
+ const isCodexSession = !isOpenCodeSession &&
213
+ !isCursorSession &&
214
+ session.codexSessionId !== undefined;
215
+ const isGeminiSession = !isOpenCodeSession &&
216
+ !isCursorSession &&
217
+ !isCodexSession &&
218
+ session.geminiSessionId !== undefined;
219
+ const isClaudeSession = !isOpenCodeSession &&
220
+ !isCursorSession &&
221
+ !isCodexSession &&
222
+ !isGeminiSession;
223
+ procedureMetadata.subroutineHistory.push({
224
+ subroutine: currentSubroutine.name,
225
+ completedAt: Date.now(),
226
+ claudeSessionId: isClaudeSession ? sessionId : null,
227
+ geminiSessionId: isGeminiSession ? sessionId : null,
228
+ codexSessionId: isCodexSession ? sessionId : null,
229
+ cursorSessionId: isCursorSession ? sessionId : null,
230
+ openCodeSessionId: isOpenCodeSession ? sessionId : null,
231
+ ...(result !== undefined && { result }),
232
+ });
233
+ }
234
+ // Advance index
235
+ procedureMetadata.currentSubroutineIndex++;
236
+ }
237
+ /**
238
+ * Get the result from the last completed subroutine in the history.
239
+ * Returns null if there is no history or no result stored.
240
+ */
241
+ getLastSubroutineResult(session) {
242
+ const procedureMetadata = session.metadata?.procedure;
243
+ if (!procedureMetadata) {
244
+ return null;
245
+ }
246
+ const history = procedureMetadata.subroutineHistory;
247
+ if (history.length === 0) {
248
+ return null;
249
+ }
250
+ return history[history.length - 1]?.result ?? null;
251
+ }
252
+ /**
253
+ * Check if procedure is complete
254
+ */
255
+ isProcedureComplete(session) {
256
+ return this.getNextSubroutine(session) === null;
257
+ }
258
+ /**
259
+ * Register a custom procedure
260
+ */
261
+ registerProcedure(procedure) {
262
+ this.procedures.set(procedure.name, procedure);
263
+ }
264
+ /**
265
+ * Get procedure by name
266
+ */
267
+ getProcedure(name) {
268
+ return this.procedures.get(name);
269
+ }
270
+ }
271
+ //# sourceMappingURL=ProcedureAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcedureAnalyzer.js","sourceRoot":"","sources":["../../src/procedures/ProcedureAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Procedure analysis system for intelligent workflow selection
3
+ */
4
+ export * from "./ProcedureAnalyzer.js";
5
+ export * from "./registry.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Procedure analysis system for intelligent workflow selection
3
+ */
4
+ export * from "./ProcedureAnalyzer.js";
5
+ export * from "./registry.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Registry of predefined procedures and analysis rules
3
+ */
4
+ import type { ProcedureDefinition, RequestClassification } from "./types.js";
5
+ /**
6
+ * Predefined subroutine definitions
7
+ */
8
+ export declare const SUBROUTINES: {
9
+ readonly primary: {
10
+ readonly name: "primary";
11
+ readonly promptPath: "primary";
12
+ readonly description: "Main work execution phase";
13
+ };
14
+ readonly debuggerReproduction: {
15
+ readonly name: "debugger-reproduction";
16
+ readonly promptPath: "subroutines/debugger-reproduction.md";
17
+ readonly description: "Reproduce bug and perform root cause analysis";
18
+ };
19
+ readonly getApproval: {
20
+ readonly name: "get-approval";
21
+ readonly promptPath: "subroutines/get-approval.md";
22
+ readonly description: "Request user approval before proceeding";
23
+ readonly singleTurn: true;
24
+ readonly requiresApproval: true;
25
+ };
26
+ readonly debuggerFix: {
27
+ readonly name: "debugger-fix";
28
+ readonly promptPath: "subroutines/debugger-fix.md";
29
+ readonly description: "Implement minimal fix based on approved reproduction";
30
+ };
31
+ readonly verifications: {
32
+ readonly name: "verifications";
33
+ readonly promptPath: "subroutines/verifications.md";
34
+ readonly description: "Run tests, linting, and type checking";
35
+ readonly usesValidationLoop: true;
36
+ };
37
+ readonly validationFixer: {
38
+ readonly name: "validation-fixer";
39
+ readonly promptPath: "subroutines/validation-fixer.md";
40
+ readonly description: "Fix validation failures from the verifications subroutine";
41
+ };
42
+ readonly gitCommit: {
43
+ readonly name: "git-commit";
44
+ readonly promptPath: "subroutines/git-commit.md";
45
+ readonly description: "Stage, commit, and push changes to remote";
46
+ };
47
+ readonly ghPr: {
48
+ readonly name: "gh-pr";
49
+ readonly promptPath: "subroutines/gh-pr.md";
50
+ readonly description: "Create or update GitHub Pull Request";
51
+ };
52
+ readonly changelogUpdate: {
53
+ readonly name: "changelog-update";
54
+ readonly promptPath: "subroutines/changelog-update.md";
55
+ readonly description: "Update changelog (only if changelog files exist)";
56
+ };
57
+ readonly conciseSummary: {
58
+ readonly name: "concise-summary";
59
+ readonly promptPath: "subroutines/concise-summary.md";
60
+ readonly singleTurn: true;
61
+ readonly description: "Brief summary for simple requests";
62
+ readonly suppressThoughtPosting: true;
63
+ readonly disallowAllTools: true;
64
+ };
65
+ readonly verboseSummary: {
66
+ readonly name: "verbose-summary";
67
+ readonly promptPath: "subroutines/verbose-summary.md";
68
+ readonly singleTurn: true;
69
+ readonly description: "Detailed summary with implementation details";
70
+ readonly suppressThoughtPosting: true;
71
+ readonly disallowAllTools: true;
72
+ };
73
+ readonly questionInvestigation: {
74
+ readonly name: "question-investigation";
75
+ readonly promptPath: "subroutines/question-investigation.md";
76
+ readonly description: "Gather information needed to answer a question";
77
+ };
78
+ readonly questionAnswer: {
79
+ readonly name: "question-answer";
80
+ readonly promptPath: "subroutines/question-answer.md";
81
+ readonly singleTurn: true;
82
+ readonly description: "Format final answer to user question";
83
+ readonly suppressThoughtPosting: true;
84
+ readonly disallowAllTools: true;
85
+ };
86
+ readonly codingActivity: {
87
+ readonly name: "coding-activity";
88
+ readonly promptPath: "subroutines/coding-activity.md";
89
+ readonly description: "Implementation phase for code changes (no git/gh operations)";
90
+ };
91
+ readonly preparation: {
92
+ readonly name: "preparation";
93
+ readonly promptPath: "subroutines/preparation.md";
94
+ readonly description: "Analyze request to determine if clarification or planning is needed";
95
+ };
96
+ readonly planSummary: {
97
+ readonly name: "plan-summary";
98
+ readonly promptPath: "subroutines/plan-summary.md";
99
+ readonly singleTurn: true;
100
+ readonly description: "Present clarifying questions or implementation plan";
101
+ readonly suppressThoughtPosting: true;
102
+ readonly disallowAllTools: true;
103
+ };
104
+ readonly userTesting: {
105
+ readonly name: "user-testing";
106
+ readonly promptPath: "subroutines/user-testing.md";
107
+ readonly description: "Perform testing as requested by the user";
108
+ };
109
+ readonly userTestingSummary: {
110
+ readonly name: "user-testing-summary";
111
+ readonly promptPath: "subroutines/user-testing-summary.md";
112
+ readonly singleTurn: true;
113
+ readonly description: "Summary of user testing session results";
114
+ readonly suppressThoughtPosting: true;
115
+ readonly disallowAllTools: true;
116
+ };
117
+ readonly releaseExecution: {
118
+ readonly name: "release-execution";
119
+ readonly promptPath: "subroutines/release-execution.md";
120
+ readonly description: "Execute release process using project skill or gather release info via AskUserQuestion";
121
+ };
122
+ readonly releaseSummary: {
123
+ readonly name: "release-summary";
124
+ readonly promptPath: "subroutines/release-summary.md";
125
+ readonly singleTurn: true;
126
+ readonly description: "Summary of the release process";
127
+ readonly suppressThoughtPosting: true;
128
+ readonly disallowAllTools: true;
129
+ };
130
+ readonly fullDelegation: {
131
+ readonly name: "full-delegation";
132
+ readonly promptPath: "subroutines/full-delegation.md";
133
+ readonly description: "Full delegation to a smart runner — coding, testing, committing, PR creation, and summary in a single session";
134
+ };
135
+ };
136
+ /**
137
+ * Predefined procedure definitions
138
+ */
139
+ export declare const PROCEDURES: Record<string, ProcedureDefinition>;
140
+ /**
141
+ * Mapping from request classification to procedure name
142
+ */
143
+ export declare const CLASSIFICATION_TO_PROCEDURE: Record<RequestClassification, string>;
144
+ /**
145
+ * Get a procedure definition by name
146
+ */
147
+ export declare function getProcedure(name: string): ProcedureDefinition | undefined;
148
+ /**
149
+ * Get procedure name for a given classification
150
+ */
151
+ export declare function getProcedureForClassification(classification: RequestClassification): string;
152
+ /**
153
+ * Get all available procedure names
154
+ */
155
+ export declare function getAllProcedureNames(): string[];
156
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/procedures/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkId,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAmF1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAC/C,qBAAqB,EACrB,MAAM,CAWN,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,cAAc,EAAE,qBAAqB,GACnC,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}