CommandCodeAI / CommandCodeAI/command-code

feat: Mod - Adding test harness to Mod Api to make it easier to write tests and have agent verify mod works

Open
#612 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
No language data
Stars
4k
Forks
350
PR merge metrics
No merged PRs in 30d

Description

Summary

When writing and iterating on a mod, I find the the model will write a temp script which imports some of the mod functions to test the output and if it works properly, for example:

xecute Shell Command
Command Code needs to execute node --experimental-strip-types --no-warnings -e "
Promise.all([
  import('./.commandcode/mods/erd.ts'),
  import('./.commandcode/mods/erd/markdown.ts'),
  import('./.commandcode/mods/erd/renderer.ts'),
  import('./.commandcode/mods/erd/commands.ts'),
  import('./.commandcode/mods/erd/tools.ts'),
]).then(() => { console.log('ALL MODULES LOAD OK'); }).catch(e => { console.error('FAIL', e); process.exit(1); });
" 2>&1 | head -20.

Press [ctrl+e] to explain this command

❯ 1. Yes

Some are more involved and check output not just if load.


Execute Shell Command
Command Code needs to execute node --experimental-strip-types --no-warnings -e "
const fs = require('fs');
Promise.all([
  import('./.commandcode/mods/erd/parser.ts'),
  import('./.commandcode/mods/erd/queries.ts'),
  import('./.commandcode/mods/erd/markdown.ts'),
]).then(([p, q, md]) => {
  const sql = fs.readFileSync('schema/schema.sql', 'utf8');
  const schema = p.parseSchema(sql, 'sqlite');
  console.log('listTables →', md.renderMarkdown(q.listTables(schema)).length, 'lines');
  console.log('listIndexes →', md.renderMarkdown(q.listIndexes(schema)).length, 'lines');
  console.log('listForeignKeys →', md.renderMarkdown(q.listForeignKeys(schema)).length, 'lines');
  console.log('findColumn →', md.renderMarkdown(q.findColumn(schema, 'id')).length, 'lines');
  console.log('schemaSummary →', md.renderMarkdown(q.schemaSummary(schema, 'sqlite')).length, 'lines');
  console.log('describeTable →', md.renderMarkdown(q.describeTable(schema, 'users', 'sqlite')).length, 'lines');
  console.log('ALL QUERY FUNCTIONS RENDER CLEANLY');
}).catch(e => { console.error('FAIL', e); process.exit(1); });
" 2>&1 | head -20.

Press [ctrl+e] to explain this command

❯ 1. Yes
  2. Yes, don't ask again for this exact command in this project
  3. No, tell Command Code what to do differently
Expected Behavior

Would be useful as mods get more complex an refactor to have a proper test harness or suite like vitest that can be run easily manually or within agent as part of th mod-builder skill.

Actual Behavior

Mode has to cobble together one off scripts and runs that have to be permitted each Tim since the command is unique often per run so hard to write permissions to allow.

Can see from example above the shell command on-line a script and not sure I'd want to permit blanket node --experimental-strip-types --no-warnings -e allow permissions here.

Steps to reproduce the issue
  1. build mod
  2. try to test it
Command Code Version

1.7.0

Operating System

macOS

Terminal/IDE

ghostty

Shell

zsh

Additional context

No response

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the Mod API and the th-mod-builder skill, then compare the example Node commands in the issue with the current mod workflow. Define what the harness should cover, how it should run manually or through the agent, and what successful module loading and output checks look like; no specific implementation files or tests are identified.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript
Domain
cli, developer-experience, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.