cyrus-edge-worker 0.2.39 → 0.2.41

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 (101) hide show
  1. package/cyrus-skills-plugin/.claude-plugin/plugin.json +4 -0
  2. package/dist/AgentSessionManager.d.ts +4 -58
  3. package/dist/AgentSessionManager.d.ts.map +1 -1
  4. package/dist/AgentSessionManager.js +11 -304
  5. package/dist/AgentSessionManager.js.map +1 -1
  6. package/dist/ChatSessionHandler.d.ts +2 -2
  7. package/dist/ChatSessionHandler.d.ts.map +1 -1
  8. package/dist/ChatSessionHandler.js +2 -4
  9. package/dist/ChatSessionHandler.js.map +1 -1
  10. package/dist/DefaultSkillsDeployer.d.ts +32 -0
  11. package/dist/DefaultSkillsDeployer.d.ts.map +1 -0
  12. package/dist/DefaultSkillsDeployer.js +82 -0
  13. package/dist/DefaultSkillsDeployer.js.map +1 -0
  14. package/dist/EdgeWorker.d.ts +20 -46
  15. package/dist/EdgeWorker.d.ts.map +1 -1
  16. package/dist/EdgeWorker.js +98 -450
  17. package/dist/EdgeWorker.js.map +1 -1
  18. package/dist/PromptBuilder.d.ts +1 -7
  19. package/dist/PromptBuilder.d.ts.map +1 -1
  20. package/dist/PromptBuilder.js +2 -33
  21. package/dist/PromptBuilder.js.map +1 -1
  22. package/dist/RunnerConfigBuilder.d.ts +13 -6
  23. package/dist/RunnerConfigBuilder.d.ts.map +1 -1
  24. package/dist/RunnerConfigBuilder.js +50 -27
  25. package/dist/RunnerConfigBuilder.js.map +1 -1
  26. package/dist/SkillsPluginResolver.d.ts +66 -0
  27. package/dist/SkillsPluginResolver.d.ts.map +1 -0
  28. package/dist/SkillsPluginResolver.js +180 -0
  29. package/dist/SkillsPluginResolver.js.map +1 -0
  30. package/dist/ToolPermissionResolver.d.ts +1 -12
  31. package/dist/ToolPermissionResolver.d.ts.map +1 -1
  32. package/dist/ToolPermissionResolver.js +0 -23
  33. package/dist/ToolPermissionResolver.js.map +1 -1
  34. package/dist/cyrus-skills-plugin/.claude-plugin/plugin.json +4 -0
  35. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/.claude-plugin/plugin.json +4 -0
  36. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/skills/debug/SKILL.md +29 -0
  37. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/skills/implementation/SKILL.md +17 -0
  38. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/skills/investigate/SKILL.md +23 -0
  39. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/skills/summarize/SKILL.md +47 -0
  40. package/dist/cyrus-skills-plugin/cyrus-skills-plugin/skills/verify-and-ship/SKILL.md +74 -0
  41. package/dist/cyrus-skills-plugin/skills/debug/SKILL.md +29 -0
  42. package/dist/cyrus-skills-plugin/skills/implementation/SKILL.md +17 -0
  43. package/dist/cyrus-skills-plugin/skills/investigate/SKILL.md +23 -0
  44. package/dist/cyrus-skills-plugin/skills/summarize/SKILL.md +47 -0
  45. package/dist/cyrus-skills-plugin/skills/verify-and-ship/SKILL.md +74 -0
  46. package/dist/index.d.ts +2 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +2 -2
  49. package/dist/index.js.map +1 -1
  50. package/dist/prompt-assembly/types.d.ts +1 -3
  51. package/dist/prompt-assembly/types.d.ts.map +1 -1
  52. package/package.json +17 -16
  53. package/dist/procedures/ProcedureAnalyzer.d.ts +0 -69
  54. package/dist/procedures/ProcedureAnalyzer.d.ts.map +0 -1
  55. package/dist/procedures/ProcedureAnalyzer.js +0 -274
  56. package/dist/procedures/ProcedureAnalyzer.js.map +0 -1
  57. package/dist/procedures/index.d.ts +0 -7
  58. package/dist/procedures/index.d.ts.map +0 -1
  59. package/dist/procedures/index.js +0 -7
  60. package/dist/procedures/index.js.map +0 -1
  61. package/dist/procedures/registry.d.ts +0 -173
  62. package/dist/procedures/registry.d.ts.map +0 -1
  63. package/dist/procedures/registry.js +0 -264
  64. package/dist/procedures/registry.js.map +0 -1
  65. package/dist/procedures/types.d.ts +0 -101
  66. package/dist/procedures/types.d.ts.map +0 -1
  67. package/dist/procedures/types.js +0 -5
  68. package/dist/procedures/types.js.map +0 -1
  69. package/dist/prompts/subroutines/changelog-update-gitlab.md +0 -79
  70. package/dist/prompts/subroutines/changelog-update.md +0 -79
  71. package/dist/prompts/subroutines/coding-activity.md +0 -12
  72. package/dist/prompts/subroutines/concise-summary.md +0 -67
  73. package/dist/prompts/subroutines/debugger-fix.md +0 -92
  74. package/dist/prompts/subroutines/debugger-reproduction.md +0 -74
  75. package/dist/prompts/subroutines/get-approval.md +0 -175
  76. package/dist/prompts/subroutines/gh-pr.md +0 -110
  77. package/dist/prompts/subroutines/git-commit.md +0 -37
  78. package/dist/prompts/subroutines/glab-mr.md +0 -106
  79. package/dist/prompts/subroutines/plan-summary.md +0 -21
  80. package/dist/prompts/subroutines/preparation.md +0 -16
  81. package/dist/prompts/subroutines/question-answer.md +0 -8
  82. package/dist/prompts/subroutines/question-investigation.md +0 -8
  83. package/dist/prompts/subroutines/release-execution.md +0 -81
  84. package/dist/prompts/subroutines/release-summary.md +0 -60
  85. package/dist/prompts/subroutines/user-testing-summary.md +0 -87
  86. package/dist/prompts/subroutines/user-testing.md +0 -48
  87. package/dist/prompts/subroutines/validation-fixer.md +0 -56
  88. package/dist/prompts/subroutines/verbose-summary.md +0 -46
  89. package/dist/prompts/subroutines/verifications.md +0 -77
  90. package/dist/validation/ValidationLoopController.d.ts +0 -54
  91. package/dist/validation/ValidationLoopController.d.ts.map +0 -1
  92. package/dist/validation/ValidationLoopController.js +0 -242
  93. package/dist/validation/ValidationLoopController.js.map +0 -1
  94. package/dist/validation/index.d.ts +0 -7
  95. package/dist/validation/index.d.ts.map +0 -1
  96. package/dist/validation/index.js +0 -7
  97. package/dist/validation/index.js.map +0 -1
  98. package/dist/validation/types.d.ts +0 -82
  99. package/dist/validation/types.d.ts.map +0 -1
  100. package/dist/validation/types.js +0 -29
  101. package/dist/validation/types.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: verify-and-ship
3
+ description: Run all quality checks (tests, lint, typecheck), fix failures, update the changelog, commit, push, and create/update the pull request or merge request.
4
+ ---
5
+
6
+ # Verify and Ship
7
+
8
+ After implementing your changes, follow these steps to verify quality and ship the work.
9
+
10
+ ## 1. Acceptance Criteria Validation (CRITICAL)
11
+
12
+ Use the issue tracker `get_issue` tool to fetch the current issue details. Extract ALL acceptance criteria from the issue description and verify each one is satisfied by the implementation. If no explicit criteria exist, validate against the implied requirements from the issue title and description.
13
+
14
+ ## 2. Quality Checks
15
+
16
+ Run all applicable quality checks:
17
+ - **Tests** — Run the full test suite. If tests fail, fix the issues and re-run. Retry up to 3 times. If you cannot resolve failures after 3 attempts, proceed and note the failures in your summary.
18
+ - **Linting** — Run linting tools and fix any issues found.
19
+ - **Type checking** — Run TypeScript type checking (if applicable) and fix any errors.
20
+ - **Code review** — Review your changes for quality, consistency, and best practices. Remove any debug code, console.logs, or commented-out sections.
21
+
22
+ ## 3. Changelog Update
23
+
24
+ Check if the project has changelog files:
25
+ ```bash
26
+ ls -la CHANGELOG.md CHANGELOG.internal.md 2>/dev/null || echo "NO_CHANGELOG"
27
+ ```
28
+
29
+ If changelog files exist:
30
+ - Add an entry under `## [Unreleased]` in the appropriate subsection (`### Added`, `### Changed`, `### Fixed`, `### Removed`)
31
+ - Focus on end-user impact — be concise but descriptive
32
+ - Include the Linear issue identifier and PR/MR link (format: `([ISSUE-ID](linear_url), [#NUMBER](PR_OR_MR_URL))`)
33
+ - Follow [Keep a Changelog](https://keepachangelog.com/) format
34
+
35
+ ## 4. Commit and Push
36
+
37
+ - Stage all relevant changes (including changelog updates)
38
+ - Commit with clear, descriptive messages following the project's commit conventions
39
+ - Push to the remote repository
40
+
41
+ ## 5. Create or Update PR/MR
42
+
43
+ Determine the platform from the repository context (`<github_url>` or `<gitlab_url>` in the issue context). Use the appropriate tool for the platform.
44
+
45
+ ### GitHub (when `<github_url>` is present)
46
+
47
+ ```bash
48
+ git push -u origin HEAD
49
+ gh pr view --json url,number 2>/dev/null || gh pr create --draft --base [base_branch from context] --title "[descriptive title]" --body "Work in progress"
50
+ ```
51
+
52
+ ### GitLab (when `<gitlab_url>` is present)
53
+
54
+ ```bash
55
+ git push -u origin HEAD
56
+ glab mr view 2>/dev/null || glab mr create --draft --target-branch [base_branch from context] --title "[descriptive title]" --description "Work in progress"
57
+ ```
58
+
59
+ ### PR/MR Description
60
+
61
+ Update the PR/MR with a comprehensive description:
62
+ - **Assignee attribution**: If `<github_username>` is available in the assignee context, add `Assignee: @username ([Display Name](linear_profile_url))` at the top of the body. If only a linear profile URL is available, use `Assignee: [Display Name](linear_profile_url)`.
63
+ - **Summary** of changes, implementation approach, and testing performed
64
+ - **Link** to the Linear issue
65
+ - **Cyrus marker**: Include `<!-- generated-by-cyrus -->` as a hidden HTML comment at the end of the body
66
+ - **Interaction tip**: Add this at the end (before the marker), using the bot username from `<github_bot_username>` or `<gitlab_bot_username>` in the `<agent_context>` block of the system prompt:
67
+ ```
68
+ ---
69
+ > **Tip:** I will respond to comments that @ mention @<bot_username> on this PR/MR. You can also submit a review with all your feedback at once, and I will automatically wake up to address each comment.
70
+ ```
71
+
72
+ Remove any "WIP:" or "Draft:" prefix from the title. Check `<agent_guidance>` — only mark the PR/MR as ready if guidance does NOT specify keeping them as drafts.
73
+
74
+ Verify the PR/MR targets the correct base branch from `<base_branch>` in the issue context.
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export type { AskUserQuestionHandlerConfig, AskUserQuestionHandlerDeps, } from "
6
6
  export { AskUserQuestionHandler } from "./AskUserQuestionHandler.js";
7
7
  export type { ChatPlatformAdapter, ChatPlatformName, ChatSessionHandlerDeps, } from "./ChatSessionHandler.js";
8
8
  export { ChatSessionHandler } from "./ChatSessionHandler.js";
9
+ export { DefaultSkillsDeployer } from "./DefaultSkillsDeployer.js";
9
10
  export { EdgeWorker } from "./EdgeWorker.js";
10
11
  export type { CreateGitWorktreeOptions } from "./GitService.js";
11
12
  export { GitService } from "./GitService.js";
@@ -17,6 +18,7 @@ export { RepositoryRouter } from "./RepositoryRouter.js";
17
18
  export type { ChatRunnerConfigInput, IChatToolResolver, IMcpConfigProvider, IRunnerSelector, IssueRunnerConfigInput, } from "./RunnerConfigBuilder.js";
18
19
  export { RunnerConfigBuilder } from "./RunnerConfigBuilder.js";
19
20
  export { SharedApplicationServer } from "./SharedApplicationServer.js";
21
+ export { SkillsPluginResolver } from "./SkillsPluginResolver.js";
20
22
  export { SlackChatAdapter } from "./SlackChatAdapter.js";
21
23
  export type { ActivityPostOptions, ActivityPostResult, ActivitySignal, IActivitySink, } from "./sinks/index.js";
22
24
  export { LinearActivitySink } from "./sinks/index.js";
@@ -24,6 +26,5 @@ export type { PromptType } from "./ToolPermissionResolver.js";
24
26
  export { ToolPermissionResolver } from "./ToolPermissionResolver.js";
25
27
  export type { EdgeWorkerEvents } from "./types.js";
26
28
  export { type AccessCheckResult, DEFAULT_BLOCK_MESSAGE, UserAccessControl, } from "./UserAccessControl.js";
27
- export { DEFAULT_VALIDATION_LOOP_CONFIG, parseValidationResult, VALIDATION_RESULT_SCHEMA, type ValidationFixerContext, type ValidationLoopConfig, type ValidationLoopState, type ValidationResult, } from "./validation/index.js";
28
29
  export { WorktreeIncludeService } from "./WorktreeIncludeService.js";
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EACX,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACX,4BAA4B,EAC5B,0BAA0B,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACX,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACX,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACX,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EACN,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EACX,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACX,4BAA4B,EAC5B,0BAA0B,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACX,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACX,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACX,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EACN,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ export { getAllTools, readOnlyTools } from "cyrus-claude-runner";
2
2
  export { AgentSessionManager } from "./AgentSessionManager.js";
3
3
  export { AskUserQuestionHandler } from "./AskUserQuestionHandler.js";
4
4
  export { ChatSessionHandler } from "./ChatSessionHandler.js";
5
+ export { DefaultSkillsDeployer } from "./DefaultSkillsDeployer.js";
5
6
  export { EdgeWorker } from "./EdgeWorker.js";
6
7
  export { GitService } from "./GitService.js";
7
8
  export { GlobalSessionRegistry } from "./GlobalSessionRegistry.js";
@@ -9,12 +10,11 @@ export { McpConfigService } from "./McpConfigService.js";
9
10
  export { RepositoryRouter } from "./RepositoryRouter.js";
10
11
  export { RunnerConfigBuilder } from "./RunnerConfigBuilder.js";
11
12
  export { SharedApplicationServer } from "./SharedApplicationServer.js";
13
+ export { SkillsPluginResolver } from "./SkillsPluginResolver.js";
12
14
  export { SlackChatAdapter } from "./SlackChatAdapter.js";
13
15
  export { LinearActivitySink } from "./sinks/index.js";
14
16
  export { ToolPermissionResolver } from "./ToolPermissionResolver.js";
15
17
  // User access control
16
18
  export { DEFAULT_BLOCK_MESSAGE, UserAccessControl, } from "./UserAccessControl.js";
17
- // Export validation loop module
18
- export { DEFAULT_VALIDATION_LOOP_CONFIG, parseValidationResult, VALIDATION_RESULT_SCHEMA, } from "./validation/index.js";
19
19
  export { WorktreeIncludeService } from "./WorktreeIncludeService.js";
20
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAK/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,sBAAsB;AACtB,OAAO,EAEN,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,wBAAwB,CAAC;AAChC,gCAAgC;AAChC,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,GAKxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAK/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,sBAAsB;AACtB,OAAO,EAEN,qBAAqB,EACrB,iBAAiB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -17,8 +17,6 @@ export interface PromptAssembly {
17
17
  metadata: {
18
18
  /** List of components included in the prompt */
19
19
  components: PromptComponent[];
20
- /** Name of the subroutine prompt loaded (if any) */
21
- subroutineName?: string;
22
20
  /** Type of prompt builder used */
23
21
  promptType: PromptType;
24
22
  /** Whether this was a new session */
@@ -30,7 +28,7 @@ export interface PromptAssembly {
30
28
  /**
31
29
  * Components that can be included in a prompt
32
30
  */
33
- export type PromptComponent = "issue-context" | "subroutine-prompt" | "user-comment" | "attachment-manifest" | "guidance-rules";
31
+ export type PromptComponent = "issue-context" | "user-comment" | "attachment-manifest" | "guidance-rules";
34
32
  /**
35
33
  * Type of prompt builder used
36
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompt-assembly/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,QAAQ,EAAE;QACT,gDAAgD;QAChD,UAAU,EAAE,eAAe,EAAE,CAAC;QAE9B,oDAAoD;QACpD,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,kCAAkC;QAClC,UAAU,EAAE,UAAU,CAAC;QAEvB,qCAAqC;QACrC,YAAY,EAAE,OAAO,CAAC;QAEtB,gDAAgD;QAChD,WAAW,EAAE,OAAO,CAAC;KACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACxB,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,qBAAqB,GACrB,gBAAgB,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,aAAa,GACb,4BAA4B,GAC5B,SAAS,GACT,UAAU,GACV,cAAc,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAEnC,8BAA8B;IAC9B,OAAO,EAAE,iBAAiB,CAAC;IAE3B,yBAAyB;IACzB,SAAS,EAAE,KAAK,CAAC;IAEjB,2DAA2D;IAC3D,YAAY,EAAE,gBAAgB,EAAE,CAAC;IAEjC;;OAEG;IACH,UAAU,EAAE,gBAAgB,CAAC;IAG7B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAG1B,sDAAsD;IACtD,YAAY,EAAE,OAAO,CAAC;IAEtB,sDAAsD;IACtD,WAAW,EAAE,OAAO,CAAC;IAErB,oCAAoC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mDAAmD;IACnD,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,yDAAyD;IACzD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAE5D,4GAA4G;IAC5G,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IAEf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompt-assembly/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,QAAQ,EAAE;QACT,gDAAgD;QAChD,UAAU,EAAE,eAAe,EAAE,CAAC;QAE9B,kCAAkC;QAClC,UAAU,EAAE,UAAU,CAAC;QAEvB,qCAAqC;QACrC,YAAY,EAAE,OAAO,CAAC;QAEtB,gDAAgD;QAChD,WAAW,EAAE,OAAO,CAAC;KACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACxB,eAAe,GACf,cAAc,GACd,qBAAqB,GACrB,gBAAgB,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,aAAa,GACb,4BAA4B,GAC5B,SAAS,GACT,UAAU,GACV,cAAc,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAEnC,8BAA8B;IAC9B,OAAO,EAAE,iBAAiB,CAAC;IAE3B,yBAAyB;IACzB,SAAS,EAAE,KAAK,CAAC;IAEjB,2DAA2D;IAC3D,YAAY,EAAE,gBAAgB,EAAE,CAAC;IAEjC;;OAEG;IACH,UAAU,EAAE,gBAAgB,CAAC;IAG7B,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAG1B,sDAAsD;IACtD,YAAY,EAAE,OAAO,CAAC;IAEtB,sDAAsD;IACtD,WAAW,EAAE,OAAO,CAAC;IAErB,oCAAoC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mDAAmD;IACnD,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,yDAAyD;IACzD,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAE5D,4GAA4G;IAC5G,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IAEf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyrus-edge-worker",
3
- "version": "0.2.39",
3
+ "version": "0.2.41",
4
4
  "description": "Unified edge worker for processing Linear issues with Claude",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,7 +10,8 @@
10
10
  "prompt-template-v2.md",
11
11
  "prompt-template.md",
12
12
  "label-prompt-template.md",
13
- "prompts"
13
+ "prompts",
14
+ "cyrus-skills-plugin"
14
15
  ],
15
16
  "dependencies": {
16
17
  "@linear/sdk": "^64.0.0",
@@ -21,19 +22,19 @@
21
22
  "file-type": "^21.3.2",
22
23
  "ignore": "^7.0.5",
23
24
  "zod": "4.3.6",
24
- "cyrus-claude-runner": "0.2.39",
25
- "cyrus-config-updater": "0.2.39",
26
- "cyrus-core": "0.2.39",
27
- "cyrus-codex-runner": "0.2.39",
28
- "cyrus-cloudflare-tunnel-client": "0.2.39",
29
- "cyrus-cursor-runner": "0.2.39",
30
- "cyrus-gemini-runner": "0.2.39",
31
- "cyrus-github-event-transport": "0.2.39",
32
- "cyrus-gitlab-event-transport": "0.2.39",
33
- "cyrus-mcp-tools": "0.2.39",
34
- "cyrus-linear-event-transport": "0.2.39",
35
- "cyrus-slack-event-transport": "0.2.39",
36
- "cyrus-simple-agent-runner": "0.2.39"
25
+ "cyrus-codex-runner": "0.2.41",
26
+ "cyrus-config-updater": "0.2.41",
27
+ "cyrus-claude-runner": "0.2.41",
28
+ "cyrus-cloudflare-tunnel-client": "0.2.41",
29
+ "cyrus-cursor-runner": "0.2.41",
30
+ "cyrus-gemini-runner": "0.2.41",
31
+ "cyrus-github-event-transport": "0.2.41",
32
+ "cyrus-linear-event-transport": "0.2.41",
33
+ "cyrus-gitlab-event-transport": "0.2.41",
34
+ "cyrus-slack-event-transport": "0.2.41",
35
+ "cyrus-mcp-tools": "0.2.41",
36
+ "cyrus-core": "0.2.41",
37
+ "cyrus-simple-agent-runner": "0.2.41"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@types/node": "^20.0.0",
@@ -48,7 +49,7 @@
48
49
  },
49
50
  "scripts": {
50
51
  "build": "tsc && npm run copy-prompts",
51
- "copy-prompts": "mkdir -p dist/prompts/subroutines && cp -r src/prompts/subroutines/*.md dist/prompts/subroutines/ && cp label-prompt-template.md dist/ && cp -r prompts dist/",
52
+ "copy-prompts": "cp label-prompt-template.md dist/ && cp -r prompts dist/ && cp -rL cyrus-skills-plugin dist/cyrus-skills-plugin",
52
53
  "dev": "tsc --watch",
53
54
  "test": "vitest",
54
55
  "test:run": "vitest run",
@@ -1,69 +0,0 @@
1
- /**
2
- * ProcedureAnalyzer - Intelligent analysis of agent sessions to determine procedures
3
- *
4
- * Uses a SimpleAgentRunner (Claude, Gemini, Codex, or Cursor) to analyze requests
5
- * and determine which procedure (sequence of subroutines) should be executed.
6
- */
7
- import { type CyrusAgentSession, type ILogger, type RunnerType } from "cyrus-core";
8
- import type { ProcedureAnalysisDecision, ProcedureDefinition, SubroutineDefinition } from "./types.js";
9
- export type SimpleRunnerType = RunnerType;
10
- export interface ProcedureAnalyzerConfig {
11
- cyrusHome: string;
12
- model?: string;
13
- timeoutMs?: number;
14
- runnerType?: SimpleRunnerType;
15
- logger?: ILogger;
16
- }
17
- export declare class ProcedureAnalyzer {
18
- private analysisRunner;
19
- private procedures;
20
- private logger;
21
- constructor(config: ProcedureAnalyzerConfig);
22
- /**
23
- * Build the system prompt for request analysis and classification
24
- */
25
- private buildAnalysisSystemPrompt;
26
- /**
27
- * Load predefined procedures from registry
28
- */
29
- private loadPredefinedProcedures;
30
- /**
31
- * Analyze a request and determine which procedure to use
32
- */
33
- determineRoutine(requestText: string): Promise<ProcedureAnalysisDecision>;
34
- /**
35
- * Get the next subroutine for a session
36
- * Returns null if procedure is complete
37
- */
38
- getNextSubroutine(session: CyrusAgentSession): SubroutineDefinition | null;
39
- /**
40
- * Get the current subroutine for a session
41
- */
42
- getCurrentSubroutine(session: CyrusAgentSession): SubroutineDefinition | null;
43
- /**
44
- * Initialize procedure metadata for a new session
45
- */
46
- initializeProcedureMetadata(session: CyrusAgentSession, procedure: ProcedureDefinition): void;
47
- /**
48
- * Record subroutine completion and advance to next
49
- */
50
- advanceToNextSubroutine(session: CyrusAgentSession, sessionId: string | null, result?: string): void;
51
- /**
52
- * Get the result from the last completed subroutine in the history.
53
- * Returns null if there is no history or no result stored.
54
- */
55
- getLastSubroutineResult(session: CyrusAgentSession): string | null;
56
- /**
57
- * Check if procedure is complete
58
- */
59
- isProcedureComplete(session: CyrusAgentSession): boolean;
60
- /**
61
- * Register a custom procedure
62
- */
63
- registerProcedure(procedure: ProcedureDefinition): void;
64
- /**
65
- * Get procedure by name
66
- */
67
- getProcedure(name: string): ProcedureDefinition | undefined;
68
- }
69
- //# sourceMappingURL=ProcedureAnalyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProcedureAnalyzer.d.ts","sourceRoot":"","sources":["../../src/procedures/ProcedureAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,OAAO,EAEZ,KAAK,UAAU,EACf,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EACX,yBAAyB,EACzB,mBAAmB,EAGnB,oBAAoB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,MAAM,WAAW,uBAAuB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,MAAM,CAAU;gBAEZ,MAAM,EAAE,uBAAuB;IAyD3C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmDjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAMhC;;OAEG;IACG,gBAAgB,CACrB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,yBAAyB,CAAC;IAyCrC;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,IAAI;IA6B1E;;OAEG;IACH,oBAAoB,CACnB,OAAO,EAAE,iBAAiB,GACxB,oBAAoB,GAAG,IAAI;IAwB9B;;OAEG;IACH,2BAA2B,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,mBAAmB,GAC5B,IAAI;IAYP;;OAEG;IACH,uBAAuB,CACtB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,MAAM,GACb,IAAI;IAgCP;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI;IAiBlE;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAIxD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI;IAIvD;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;CAG3D"}
@@ -1,274 +0,0 @@
1
- /**
2
- * ProcedureAnalyzer - Intelligent analysis of agent sessions to determine procedures
3
- *
4
- * Uses a SimpleAgentRunner (Claude, Gemini, Codex, or Cursor) to analyze requests
5
- * and determine which procedure (sequence of subroutines) should be executed.
6
- */
7
- import { SimpleCodexRunner } from "cyrus-codex-runner";
8
- import { createLogger, } from "cyrus-core";
9
- import { SimpleCursorRunner } from "cyrus-cursor-runner";
10
- import { SimpleGeminiRunner } from "cyrus-gemini-runner";
11
- import { SimpleClaudeRunner } from "cyrus-simple-agent-runner";
12
- import { getProcedureForClassification, PROCEDURES } from "./registry.js";
13
- export class ProcedureAnalyzer {
14
- analysisRunner;
15
- procedures = new Map();
16
- logger;
17
- constructor(config) {
18
- this.logger =
19
- config.logger ?? createLogger({ component: "ProcedureAnalyzer" });
20
- // Determine which runner to use
21
- const runnerType = config.runnerType || "claude";
22
- // Use runner-specific default models if not provided
23
- const defaultModels = {
24
- claude: { model: "haiku", fallback: "sonnet" },
25
- gemini: {
26
- model: "gemini-2.5-flash-lite",
27
- fallback: "gemini-2.0-flash-exp",
28
- },
29
- codex: { model: "gpt-5", fallback: "gpt-5" },
30
- cursor: { model: "gpt-5", fallback: "gpt-5" },
31
- };
32
- const defaults = defaultModels[runnerType];
33
- // Create runner configuration
34
- const runnerConfig = {
35
- validResponses: [
36
- "question",
37
- "documentation",
38
- "transient",
39
- "planning",
40
- "code",
41
- "debugger",
42
- "orchestrator",
43
- "user-testing",
44
- "release",
45
- ],
46
- cyrusHome: config.cyrusHome,
47
- model: config.model || defaults.model,
48
- fallbackModel: defaults.fallback,
49
- systemPrompt: this.buildAnalysisSystemPrompt(),
50
- maxTurns: 1,
51
- timeoutMs: config.timeoutMs || 10000,
52
- };
53
- // Initialize the appropriate runner based on type
54
- this.analysisRunner =
55
- runnerType === "claude"
56
- ? new SimpleClaudeRunner(runnerConfig)
57
- : runnerType === "gemini"
58
- ? new SimpleGeminiRunner(runnerConfig)
59
- : runnerType === "codex"
60
- ? new SimpleCodexRunner(runnerConfig)
61
- : new SimpleCursorRunner(runnerConfig);
62
- // Load all predefined procedures from registry
63
- this.loadPredefinedProcedures();
64
- }
65
- /**
66
- * Build the system prompt for request analysis and classification
67
- */
68
- buildAnalysisSystemPrompt() {
69
- return `You are a request classifier for a software agent system.
70
-
71
- Analyze the Linear issue request and classify it into ONE of these categories:
72
-
73
- **question**: User is asking a question, seeking information, or requesting explanation.
74
- - Examples: "How does X work?", "What is the purpose of Y?", "Explain the architecture"
75
-
76
- **documentation**: User wants documentation, markdown, or comments edited (no code changes).
77
- - Examples: "Update the README", "Add docstrings to functions", "Fix typos in docs"
78
-
79
- **transient**: Request involves MCP tools, temporary files, or no codebase interaction.
80
- - Examples: "Search the web for X", "Generate a diagram", "Use Linear MCP to check issues"
81
-
82
- **planning**: Request has vague requirements, needs clarification, or asks for an implementation plan.
83
- - Examples: "Can you help with the authentication system?", "I need to improve performance", "Add a new feature for user management"
84
- - Use when requirements are unclear, missing details, or user asks for a plan/proposal
85
- - DO NOT use if the request has clear, specific requirements (use "code" instead)
86
- - DO NOT use for adding/writing tests, fixing tests, or other test-related work (use "code" instead)
87
-
88
- **debugger**: User EXPLICITLY requests the full debugging workflow with reproduction and approval.
89
- - 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"
90
- - DO NOT use for regular bug reports - those should use "code"
91
- - Examples: "Debug this issue and get my approval before fixing", "Reproduce the authentication bug with approval checkpoint"
92
-
93
- **orchestrator**: User EXPLICITLY requests decomposition into sub-issues with specialized agent delegation.
94
- - ONLY use this if the user specifically asks for: "break this into sub-issues", "orchestrate this work", "use sub-agents", "delegate to specialized agents"
95
- - DO NOT use for regular complex work - those should use "code"
96
- - Examples: "Orchestrate this feature with sub-issues", "Break this down and delegate to specialized agents", "Create sub-tasks for this epic"
97
-
98
- **code**: Request involves code changes with clear, specific requirements (DEFAULT for most work).
99
- - Examples: "Fix bug in X", "Add feature Y", "Refactor module Z", "Implement new API endpoint", "Fix the login issue"
100
- - Use this for ALL standard bug fixes and features with clear requirements
101
- - Use this for ALL test-related work: "Add unit tests", "Fix failing tests", "Write test coverage", etc.
102
- - Use this when user explicitly says "Classify as full development", "classify as code", or similar
103
-
104
- **user-testing**: User EXPLICITLY requests a manual testing or user testing session.
105
- - ONLY use this if the user specifically asks for: "test this for me", "run a testing session", "perform user testing", "manual testing"
106
- - Examples: "Test the login flow manually", "Run user testing on the checkout feature", "Help me test this integration"
107
- - DO NOT use for automated test writing (use "code" instead)
108
- - This is for interactive, user-guided testing sessions
109
-
110
- **release**: User EXPLICITLY requests a release, publish, or deployment workflow.
111
- - ONLY use this if the user specifically asks for: "release", "publish", "deploy to npm", "create a release", "publish packages"
112
- - Examples: "Release the new version", "Publish to npm", "Create a new release", "Deploy version 1.2.0"
113
- - DO NOT use for regular code changes that mention versions (use "code" instead)
114
- - This is for executing the full release/publish workflow
115
-
116
- IMPORTANT: Respond with ONLY the classification word, nothing else.`;
117
- }
118
- /**
119
- * Load predefined procedures from registry
120
- */
121
- loadPredefinedProcedures() {
122
- for (const [name, procedure] of Object.entries(PROCEDURES)) {
123
- this.procedures.set(name, procedure);
124
- }
125
- }
126
- /**
127
- * Analyze a request and determine which procedure to use
128
- */
129
- async determineRoutine(requestText) {
130
- try {
131
- // Classify the request using analysis runner
132
- const result = await this.analysisRunner.query(`Classify this Linear issue request:\n\n${requestText}`);
133
- const classification = result.response;
134
- // Get procedure name for this classification
135
- const procedureName = getProcedureForClassification(classification);
136
- // Get procedure definition
137
- const procedure = this.procedures.get(procedureName);
138
- if (!procedure) {
139
- throw new Error(`Procedure "${procedureName}" not found in registry`);
140
- }
141
- return {
142
- classification,
143
- procedure,
144
- reasoning: `Classified as "${classification}" → using procedure "${procedureName}"`,
145
- };
146
- }
147
- catch (error) {
148
- // Fallback to full-development on error
149
- this.logger.info("Error during analysis:", error);
150
- const fallbackProcedure = this.procedures.get("full-development");
151
- if (!fallbackProcedure) {
152
- throw new Error("Fallback procedure 'full-development' not found");
153
- }
154
- return {
155
- classification: "code",
156
- procedure: fallbackProcedure,
157
- reasoning: `Fallback to full-development due to error: ${error}`,
158
- };
159
- }
160
- }
161
- /**
162
- * Get the next subroutine for a session
163
- * Returns null if procedure is complete
164
- */
165
- getNextSubroutine(session) {
166
- const procedureMetadata = session.metadata?.procedure;
167
- if (!procedureMetadata) {
168
- // No procedure metadata - session doesn't use procedures
169
- return null;
170
- }
171
- const procedure = this.procedures.get(procedureMetadata.procedureName);
172
- if (!procedure) {
173
- this.logger.error(`Procedure "${procedureMetadata.procedureName}" not found`);
174
- return null;
175
- }
176
- const nextIndex = procedureMetadata.currentSubroutineIndex + 1;
177
- if (nextIndex >= procedure.subroutines.length) {
178
- // Procedure complete
179
- return null;
180
- }
181
- return procedure.subroutines[nextIndex] ?? null;
182
- }
183
- /**
184
- * Get the current subroutine for a session
185
- */
186
- getCurrentSubroutine(session) {
187
- const procedureMetadata = session.metadata?.procedure;
188
- if (!procedureMetadata) {
189
- return null;
190
- }
191
- const procedure = this.procedures.get(procedureMetadata.procedureName);
192
- if (!procedure) {
193
- return null;
194
- }
195
- const currentIndex = procedureMetadata.currentSubroutineIndex;
196
- if (currentIndex < 0 || currentIndex >= procedure.subroutines.length) {
197
- return null;
198
- }
199
- return procedure.subroutines[currentIndex] ?? null;
200
- }
201
- /**
202
- * Initialize procedure metadata for a new session
203
- */
204
- initializeProcedureMetadata(session, procedure) {
205
- if (!session.metadata) {
206
- session.metadata = {};
207
- }
208
- session.metadata.procedure = {
209
- procedureName: procedure.name,
210
- currentSubroutineIndex: 0,
211
- subroutineHistory: [],
212
- };
213
- }
214
- /**
215
- * Record subroutine completion and advance to next
216
- */
217
- advanceToNextSubroutine(session, sessionId, result) {
218
- const procedureMetadata = session.metadata?.procedure;
219
- if (!procedureMetadata) {
220
- throw new Error("Cannot advance: session has no procedure metadata");
221
- }
222
- const currentSubroutine = this.getCurrentSubroutine(session);
223
- if (currentSubroutine) {
224
- // Determine which type of session ID this is
225
- const isCodexSession = session.codexSessionId !== undefined;
226
- const isGeminiSession = !isCodexSession && session.geminiSessionId !== undefined;
227
- // Record completion with the appropriate session ID
228
- procedureMetadata.subroutineHistory.push({
229
- subroutine: currentSubroutine.name,
230
- completedAt: Date.now(),
231
- claudeSessionId: isGeminiSession || isCodexSession ? null : sessionId,
232
- geminiSessionId: isGeminiSession ? sessionId : null,
233
- codexSessionId: isCodexSession ? sessionId : null,
234
- ...(result !== undefined && { result }),
235
- });
236
- }
237
- // Advance index
238
- procedureMetadata.currentSubroutineIndex++;
239
- }
240
- /**
241
- * Get the result from the last completed subroutine in the history.
242
- * Returns null if there is no history or no result stored.
243
- */
244
- getLastSubroutineResult(session) {
245
- const procedureMetadata = session.metadata?.procedure;
246
- if (!procedureMetadata) {
247
- return null;
248
- }
249
- const history = procedureMetadata.subroutineHistory;
250
- if (history.length === 0) {
251
- return null;
252
- }
253
- return history[history.length - 1]?.result ?? null;
254
- }
255
- /**
256
- * Check if procedure is complete
257
- */
258
- isProcedureComplete(session) {
259
- return this.getNextSubroutine(session) === null;
260
- }
261
- /**
262
- * Register a custom procedure
263
- */
264
- registerProcedure(procedure) {
265
- this.procedures.set(procedure.name, procedure);
266
- }
267
- /**
268
- * Get procedure by name
269
- */
270
- getProcedure(name) {
271
- return this.procedures.get(name);
272
- }
273
- }
274
- //# sourceMappingURL=ProcedureAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProcedureAnalyzer.js","sourceRoot":"","sources":["../../src/procedures/ProcedureAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}