cyrus-edge-worker 0.2.41 → 0.2.42

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.
@@ -18,7 +18,7 @@ export declare class DefaultSkillsDeployer {
18
18
  private readonly deployedSkillsPath;
19
19
  private readonly manifestDir;
20
20
  private readonly manifestPath;
21
- constructor(cyrusHome: string, logger: ILogger);
21
+ constructor(cyrusHome: string, logger: ILogger, bundledSkillsDir?: string);
22
22
  /**
23
23
  * Ensure default skills are deployed to cyrusHome.
24
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSkillsDeployer.d.ts","sourceRoot":"","sources":["../src/DefaultSkillsDeployer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAQhC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IARxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO;IAcjC;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAoDvB,MAAM;CAQpB"}
1
+ {"version":3,"file":"DefaultSkillsDeployer.d.ts","sourceRoot":"","sources":["../src/DefaultSkillsDeployer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAQhC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IARxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EAChC,gBAAgB,CAAC,EAAE,MAAM;IAiB1B;;;;;;OAMG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAoDvB,MAAM;CAQpB"}
@@ -20,10 +20,14 @@ export class DefaultSkillsDeployer {
20
20
  deployedSkillsPath;
21
21
  manifestDir;
22
22
  manifestPath;
23
- constructor(cyrusHome, logger) {
23
+ constructor(cyrusHome, logger, bundledSkillsDir) {
24
24
  this.cyrusHome = cyrusHome;
25
25
  this.logger = logger;
26
- this.bundledSkillsPath = join(dirname(fileURLToPath(import.meta.url)), "..", "cyrus-skills-plugin", "skills");
26
+ // Default: skills live alongside the compiled JS in dist/, placed there
27
+ // by the copy-prompts build step. Callers (e.g. tests) can override.
28
+ this.bundledSkillsPath =
29
+ bundledSkillsDir ??
30
+ join(dirname(fileURLToPath(import.meta.url)), "cyrus-skills-plugin", "skills");
27
31
  this.deployedPluginPath = join(this.cyrusHome, "cyrus-skills-plugin");
28
32
  this.deployedSkillsPath = join(this.deployedPluginPath, "skills");
29
33
  this.manifestDir = join(this.deployedPluginPath, ".claude-plugin");
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultSkillsDeployer.js","sourceRoot":"","sources":["../src/DefaultSkillsDeployer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DefaultSkillsDeployer.js","sourceRoot":"","sources":["../src/DefaultSkillsDeployer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyrus-edge-worker",
3
- "version": "0.2.41",
3
+ "version": "0.2.42",
4
4
  "description": "Unified edge worker for processing Linear issues with Claude",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,8 +10,7 @@
10
10
  "prompt-template-v2.md",
11
11
  "prompt-template.md",
12
12
  "label-prompt-template.md",
13
- "prompts",
14
- "cyrus-skills-plugin"
13
+ "prompts"
15
14
  ],
16
15
  "dependencies": {
17
16
  "@linear/sdk": "^64.0.0",
@@ -22,19 +21,19 @@
22
21
  "file-type": "^21.3.2",
23
22
  "ignore": "^7.0.5",
24
23
  "zod": "4.3.6",
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"
24
+ "cyrus-cloudflare-tunnel-client": "0.2.42",
25
+ "cyrus-codex-runner": "0.2.42",
26
+ "cyrus-claude-runner": "0.2.42",
27
+ "cyrus-core": "0.2.42",
28
+ "cyrus-config-updater": "0.2.42",
29
+ "cyrus-gemini-runner": "0.2.42",
30
+ "cyrus-gitlab-event-transport": "0.2.42",
31
+ "cyrus-github-event-transport": "0.2.42",
32
+ "cyrus-cursor-runner": "0.2.42",
33
+ "cyrus-linear-event-transport": "0.2.42",
34
+ "cyrus-simple-agent-runner": "0.2.42",
35
+ "cyrus-slack-event-transport": "0.2.42",
36
+ "cyrus-mcp-tools": "0.2.42"
38
37
  },
39
38
  "devDependencies": {
40
39
  "@types/node": "^20.0.0",
@@ -49,7 +48,7 @@
49
48
  },
50
49
  "scripts": {
51
50
  "build": "tsc && npm run copy-prompts",
52
- "copy-prompts": "cp label-prompt-template.md dist/ && cp -r prompts dist/ && cp -rL cyrus-skills-plugin dist/cyrus-skills-plugin",
51
+ "copy-prompts": "cp label-prompt-template.md dist/ && cp -r prompts dist/ && rm -rf dist/cyrus-skills-plugin && cp -rL cyrus-skills-plugin dist/cyrus-skills-plugin",
53
52
  "dev": "tsc --watch",
54
53
  "test": "vitest",
55
54
  "test:run": "vitest run",
@@ -1,4 +0,0 @@
1
- {
2
- "name": "cyrus-skills",
3
- "description": "Default Cyrus workflow skills for agent sessions"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "cyrus-skills",
3
- "description": "Default Cyrus workflow skills for agent sessions"
4
- }
@@ -1,29 +0,0 @@
1
- ---
2
- name: debug
3
- description: Full debugging workflow — reproduce the bug with a failing test, perform root cause analysis, then implement a minimal fix.
4
- ---
5
-
6
- # Debug
7
-
8
- Debug a reported issue using a structured reproduction-then-fix approach.
9
-
10
- ## Phase 1: Reproduction & Root Cause Analysis
11
-
12
- 1. **Investigate** — Analyze the bug report for key symptoms and error messages
13
- 2. **Trace** — Search the codebase for error occurrence patterns, trace from symptom to source
14
- 3. **Root cause** — Identify the root cause through data flow analysis and edge case checking
15
- 4. **Reproduce** — Create a minimal failing test case that reproduces the exact error
16
- 5. **Document** — Clearly document the root cause and reproduction steps
17
-
18
- ## Phase 2: Fix Implementation
19
-
20
- 1. **Plan** — Analyze the optimal fix approach based on root cause, check for similar fixes in the codebase
21
- 2. **Implement** — Make the minimal, targeted fix that addresses the root cause
22
- 3. **Verify** — Run the failing test to confirm it passes, then run the full test suite to check for regressions
23
-
24
- ## Principles
25
-
26
- - **Minimal changes** — Fix the bug, nothing more
27
- - **Targeted** — Only touch affected code paths
28
- - **Tested** — The fix must make the failing test pass and not break existing tests
29
- - **No unrelated improvements** — Stay focused on the specific bug
@@ -1,17 +0,0 @@
1
- ---
2
- name: implementation
3
- description: Implement the requested changes. Write production-ready code, follow existing patterns, and run tests to verify your work.
4
- ---
5
-
6
- # Implementation
7
-
8
- Implement the requested changes:
9
-
10
- - Write production-ready code that follows existing patterns and conventions
11
- - Run tests to verify your implementation works correctly
12
- - Handle edge cases and error scenarios appropriately
13
- - Keep changes focused on what was requested — avoid unrelated improvements
14
-
15
- If tests fail, fix them before moving on to the next phase of the workflow.
16
-
17
- When implementation is complete, proceed to the verification and shipping phase.
@@ -1,23 +0,0 @@
1
- ---
2
- name: investigate
3
- description: Research the codebase to answer questions. Search for relevant files, gather context, and provide clear answers.
4
- ---
5
-
6
- # Investigate
7
-
8
- Research the codebase and provide a clear, direct answer to the question.
9
-
10
- ## Approach
11
-
12
- 1. **Search** — Search the codebase for relevant files, functions, and patterns
13
- 2. **Read** — Read necessary files to understand the implementation
14
- 3. **Gather context** — Use tools as needed to collect comprehensive information
15
- 4. **Answer** — Provide a clear, direct answer using your findings
16
-
17
- ## Answer Format
18
-
19
- - Present in Linear-compatible markdown
20
- - Use `+++Section Name\n...\n+++` for collapsible sections with detailed information
21
- - Include code references with file paths and line numbers
22
- - For @mentions, use the Linear profile URL format from `<assignee>` context (e.g. `https://linear.app/<workspace>/profiles/<username>`)
23
- - Be complete but concise — answer the question directly without unnecessary preamble
@@ -1,47 +0,0 @@
1
- ---
2
- name: summarize
3
- description: Format a final summary message for Linear. Your output is automatically streamed to the Linear agent session — just format it well, do not post it yourself.
4
- ---
5
-
6
- # Summarize
7
-
8
- Format a final summary of the work completed. Your output will be automatically rendered inside Linear — just write it as your response. Do **not** use any tool to post or save it.
9
-
10
- ## Content
11
-
12
- Cover the following:
13
- 1. **Work Completed** — What was accomplished (1-2 sentences) and key outcome
14
- 2. **Key Details** — Files modified, important changes, PR link if created
15
- 3. **Status** — Completion status and any follow-up needed
16
-
17
- ## Format
18
-
19
- - Aim for 3-5 paragraphs maximum
20
- - Use clear, professional language suitable for Linear
21
- - Use markdown formatting for readability
22
- - **Collapsible sections**: Wrap "Changes Made" and "Files Modified" in `+++Section Name\n...\n+++`
23
- - **@mentions**: Use the Linear profile URL format from `<assignee>` context (e.g. `https://linear.app/<workspace>/profiles/<username>`)
24
-
25
- ## Example
26
-
27
- ```
28
- ## Summary
29
-
30
- [Brief description of what was done]
31
-
32
- +++Changes Made
33
- - [Key change 1]
34
- - [Key change 2]
35
- +++
36
-
37
- +++Files Modified
38
- - [File 1]
39
- - [File 2]
40
- +++
41
-
42
- ## Status
43
-
44
- [Current status and any next steps]
45
-
46
- [PR link if applicable]
47
- ```
@@ -1,74 +0,0 @@
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.