Repository navigation
feat(easycode): add project skills and commands - #1352
Conversation
- Register 'easycode' in AI_TOOLS (config.ts) with skillsDir '.easycode' - Add EasycodeAdapter (easycode.ts): generates TOML commands at .easycode/commands/opsx/<id>.toml, matching Easy Code's native format - Export easycodeAdapter from adapters/index.ts - Register easycodeAdapter in CommandAdapterRegistry Easy Code (https://easycode.ai) is a terminal-based AI coding assistant. Its commands use TOML with a description field and a prompt multiline literal string, distinct from the Markdown/YAML frontmatter format used by most other tools. Tested locally: `openspec init --tools easycode` generates 5 SKILL.md files and 5 .toml command files in the expected directory structure.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: Fission-AI/OpenSpec/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (10)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review. 📝 WalkthroughWalkthroughThe change adds Easy Code as a supported tool. It registers a command adapter that writes TOML files under ChangesEasy Code support
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Feature Merge Risk: ⚪ Minimal · up to This adds EasyCode support to init and update, with TOML commands generated under .easycode/commands/opsx/. No concrete merge-blocking issue was identified. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The new integration writes commands and skills within a project using the existing generation flow. No new privileged or cross-service path was established, but the behavior and authority of the EasyCode client that consumes these files remain unverified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/core/command-generation/adapters/easycode.ts`:
- Around line 23-25: Update formatFile to serialize both description and body
with TOML-safe encoding that preserves arbitrary content, including backslashes
and control characters in description and triple single quotes in the prompt
body. Replace the manual escaping and vulnerable literal construction with the
project’s existing TOML serializer if available, and add coverage for all three
cases.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: e6d23291-6e2c-4e6c-996b-6237e0fb710c
📒 Files selected for processing (4)
src/core/command-generation/adapters/easycode.tssrc/core/command-generation/adapters/index.tssrc/core/command-generation/registry.tssrc/core/config.ts
Per code review: the original formatFile had unsafe manual escaping
that would corrupt output for descriptions containing backslashes or
control characters, and prompt bodies containing triple-single-quotes.
Changes:
- Add src/core/command-generation/toml.ts with two helpers:
escapeTOMLBasicString — escapes \, ", \n, \r, \t for TOML
basic strings (double-quoted)
escapeTOMLMultilineString — escapes \ and \r, and breaks any
run of 3+ consecutive " (lookahead match)
for TOML basic multiline strings
- Switch prompt block from triple-single-quote literal string (''')
to triple-double-quote basic multiline string ("""), which allows
full escape sequence support and handles arbitrary body content
- Update easycode.ts to use both helpers
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/core/command-generation/toml.ts`:
- Around line 18-25: Update both TOML escaping functions, including
escapeTOMLBasicString and its multiline counterpart, to replace every remaining
disallowed control character with a TOML \uXXXX escape. Preserve existing
backslash, quote, newline, carriage-return, and tab handling, while covering
U+0000–U+0008, U+000B–U+000C, U+000E–U+001F, and U+007F according to each string
mode’s allowed characters.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 2363f698-df0b-4038-a8be-406ee3219017
📒 Files selected for processing (2)
src/core/command-generation/adapters/easycode.tssrc/core/command-generation/toml.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/core/command-generation/adapters/easycode.ts
Per code review: TOML basic strings forbid U+0000-U+0008, U+000B-U+000C, U+000E-U+001F, and U+007F. Add escapeControlChars() helper that replaces these with \uXXXX sequences, and apply it in both escapeTOMLBasicString and escapeTOMLMultilineString after their named-escape passes.
…d326 # Conflicts: # src/core/command-generation/adapters/index.ts # src/core/config.ts
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
alfred-openspec
left a comment
There was a problem hiding this comment.
The EasyCode command path, TOML loader format, argument behavior, escaping, skills path, and preservation tests match the current upstream implementation. Non-blocking nit: docs/cli.md's supported tool ID list should also add easycode so its claim that it mirrors AI_TOOLS stays true.
alfred-openspec
left a comment
There was a problem hiding this comment.
Re-reviewed current head 89d4609. EasyCode command and skill paths match the upstream loaders, namespaced command invocation follows the nested TOML path, and the shared TOML serializer preserves Gemini behavior while covering hostile inputs. Full CI is green. The docs-lab change still requires final review from @TabishB.
Brings in the batch that just landed on main and resolves the conflicts with it, keeping both sides' changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Status
LGTM locally. The PR is conflict-free and mergeable. Fresh CI and Security runs are waiting for a maintainer to approve execution for this fork PR; maintainer code review is also required.
What was missing / the motivation
OrionStarAI/EasyCode users could not install or refresh OpenSpec workflows through
openspec initandopenspec update.What it does
easycodeto tool selection and detection..easycode/skills/openspec-*/SKILL.md..easycode/commands/opsx/<id>.toml, invoked as/opsx:<id>.skills,commands, andbothdelivery modes.docs-lab/reference/supported-tools.mdand adds a minor changeset.Proof it works
@fission-ai/openspecrelease.Notes / nits
docs/remains unchanged. The support entry uses the current docs-lab format.Summary by CodeRabbit
/opsx:<id>.