Showing preview only (697K chars total). Download the full file or copy to clipboard to get everything.
Repository: repomirrorhq/repomirror
Branch: main
Commit: e160c79740fc
Files: 83
Total size: 666.0 KB
Directory structure:
gitextract_fi4hehdq/
├── .eslintrc.js
├── .github/
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── .repomirror/
│ ├── .gitignore
│ ├── prompt.md
│ ├── ralph.sh
│ └── sync.sh
├── @IMPLEMENTATION_PLAN.md
├── README.md
├── VALIDATION_PLAN.md
├── assets/
│ ├── better-use.webm
│ └── repomirror.webm
├── coverage/
│ ├── base.css
│ ├── block-navigation.js
│ ├── coverage-final.json
│ ├── index.html
│ ├── prettify.css
│ ├── prettify.js
│ ├── sorter.js
│ └── src/
│ ├── cli.ts.html
│ ├── commands/
│ │ ├── index.html
│ │ ├── init.ts.html
│ │ ├── sync-forever.ts.html
│ │ ├── sync-one.ts.html
│ │ ├── sync.ts.html
│ │ └── visualize.ts.html
│ └── index.html
├── docs/
│ └── remote-repo-design.md
├── hack/
│ ├── ralph-validate.sh
│ ├── ralph.sh
│ └── visualize.ts
├── package.json
├── prompt-validate.md
├── prompt.md
├── prompts/
│ ├── ai-sdk-python.md
│ ├── assistant-ui-vue.md
│ ├── better-use.md
│ ├── open-convex.md
│ ├── open-dedalus.md
│ └── repomirror.md
├── repomirror.md
├── repomirror.yaml
├── specs/
│ ├── devtooling.md
│ ├── github_actions.md
│ └── repomirror.md
├── specs_deprecated_ignore/
│ ├── github_actions.md
│ ├── remote_sync.md
│ └── sync_check
├── src/
│ ├── cli.ts
│ ├── commands/
│ │ ├── dispatch-sync.ts
│ │ ├── github-actions.ts
│ │ ├── init.ts
│ │ ├── pull.ts
│ │ ├── push.ts
│ │ ├── remote.ts
│ │ ├── setup-github-pr-sync.ts
│ │ ├── sync-forever.ts
│ │ ├── sync-one.ts
│ │ ├── sync.ts
│ │ └── visualize.ts
│ └── templates/
│ ├── gitignore.template
│ ├── ralph.sh.template
│ └── sync.sh.template
├── test-resolve.js
├── tests/
│ ├── README.md
│ ├── basic.test.ts
│ ├── commands/
│ │ ├── dispatch-sync.test.ts
│ │ ├── github-actions.test.ts
│ │ ├── init.test.ts
│ │ ├── pull.test.ts
│ │ ├── push.test.ts
│ │ ├── setup-github-pr-sync.test.ts
│ │ ├── simple.test.ts
│ │ ├── sync-forever.test.ts
│ │ ├── sync-one.test.ts
│ │ ├── sync.test.ts
│ │ └── visualize.test.ts
│ ├── helpers/
│ │ ├── fixtures.ts
│ │ ├── index.ts
│ │ └── test-utils.ts
│ └── setup.ts
├── tsconfig.json
└── vitest.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .eslintrc.js
================================================
module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
],
parserOptions: {
ecmaVersion: 2022,
sourceType: 'module',
},
env: {
node: true,
es2022: true,
},
rules: {
'@typescript-eslint/no-unused-vars': 'off',
'no-unused-vars': 'off',
},
};
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
- name: Run type check
run: npm run check
- name: Run tests
run: npm test
- name: Build
run: npm run build
release:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
steps:
- uses: actions/checkout@v3
- name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 20.x
cache: 'npm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Check if version changed
id: version
run: |
CURRENT_VERSION=$(node -p "require('./package.json').version")
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
# Check if this version exists on npm
if npm view repomirror@$CURRENT_VERSION version 2>/dev/null; then
echo "version_exists=true" >> $GITHUB_OUTPUT
else
echo "version_exists=false" >> $GITHUB_OUTPUT
fi
- name: Publish to npm
if: steps.version.outputs.version_exists == 'false'
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
================================================
FILE: .gitignore
================================================
dist/
claude_output.jsonl
draft.md
images/
*-draft.md
================================================
FILE: .repomirror/.gitignore
================================================
claude_output.jsonl
================================================
FILE: .repomirror/prompt.md
================================================
Your job is to port repomirror (TypeScript) to repomirror-py (Python) and maintain the repository.
You have access to the current ./ repository as well as the target /tmp/test-target2 repository.
Make a commit and push your changes after every single file edit.
Use the /tmp/test-target2/agent/ directory as a scratchpad for your work. Store long term plans and todo lists there.
The original project was mostly tested by manually running the code. When porting, you will need to write end to end and unit tests for the project. But make sure to spend most of your time on the actual porting, not on the testing. A good heuristic is to spend 80% of your time on the actual porting, and 20% on the testing.
================================================
FILE: .repomirror/ralph.sh
================================================
#!/bin/bash
while :; do
./.repomirror/sync.sh
echo -e "===SLEEP===\n===SLEEP===\n"; echo 'looping';
sleep 10;
done
================================================
FILE: .repomirror/sync.sh
================================================
#!/bin/bash
cat .repomirror/prompt.md | \
claude -p --output-format=stream-json --verbose --dangerously-skip-permissions --add-dir /tmp/test-target2 | \
tee -a .repomirror/claude_output.jsonl | \
npx repomirror visualize --debug;
================================================
FILE: @IMPLEMENTATION_PLAN.md
================================================
# RepoMirror Implementation Plan
## PRIORITY -1: finish rename ✅
- [x] change simonsays to repomirror everywhere, files, docs, names referenfces, everything ✅
- Updated package.json binary name from "simonsays" to "repomirror"
- Renamed simonsays.yaml to repomirror.yaml
- Updated CLI name and all help text references throughout src/cli.ts
- Changed all ".simonsays" directory references to ".repomirror"
- Renamed createSimonSaysFiles function to createRepoMirrorFiles
- Updated all configuration file references from "simonsays.yaml" to "repomirror.yaml"
- Updated all "npx simonsays" command references to "npx repomirror"
- Migrated existing .simonsays directory to .repomirror with proper script updates
- Updated all test files to use new naming conventions
- Updated README.md and documentation
- Removed orphaned test file for non-existent issue-fixer command
- All 277 tests passing with TypeScript compilation successful
## PRIORITY 0: fix critical bugs ✅
- [x] sync-forever doesn't exit on ctrl+c ✅
- Fixed signal handling in sync-forever command for both legacy ralph.sh and new approach
- Added proper subprocess management with SIGINT/SIGTERM handlers
- [x] check other commands for ctrl+c handling as well ✅
- Added signal handling to sync command
- Added signal handling to init command (Claude SDK query)
- Added signal handling to issue-fixer command (Claude SDK query)
- Added signal handling to pull command (for both sync and sync-forever)
- Added signal handling to visualize command
- All long-running commands now properly handle Ctrl+C
## Priority 1: Core Infrastructure ✅
- [x] Create implementation plan
- [x] Initialize npm project structure
- [x] Create basic CLI entry point
## Priority 2: Init Command ✅
- [x] Implement `npx repomirror init` command
- [x] Generate transformation prompt using Claude SDK
- [x] Perform preflight checks (git, claude, directories)
- [x] Create .repomirror/ directory with scripts
- [x] Ensure all preflight checks have verbose output
- [x] Ensure all prompts/cli flags are stashed to a repomirror.yaml during setup, and defaults are populated from the yaml file if present (instead of core defaults)
- [x] FIX CRITICAL BUG: `npx repomirror init` hangs in generateTransformationPrompt function
- The Claude SDK async iterator needs proper handling to avoid infinite loops
- Must break after receiving result (currently only breaks on non-error results)
- Must handle ALL message types, not just "result" type
- See updated spec.md for correct implementation pattern
- [x] improve the cli init output to match the spec ✅
- Updated output format to match spec exactly (removed bullet points, added file list)
- Fixed typo "repositorty" → "repository" in prompt examples
- [x] update transformation prompt to match the spec ✅
## Priority 3: Sync Commands ✅
- [x] Implement `sync` command to run sync.sh
- [x] Implement `sync-one` command (alias for sync)
- [x] Implement `sync-forever` command to run ralph.sh
- [x] Implement `visualize` command for output formatting
## Priority 4: Advanced Features
- [x] Add comprehensive tests for all commands ✅
- [x] Add remote repo support (push/pull) ✅
- Implemented `remote` command for managing remote repositories
- Implemented `push` command with auto-commit and multi-remote support
- Implemented `pull` command with source sync integration
- Enhanced sync commands with auto-push capabilities
- [x] Add validation script for init command ✅
- Created `hack/ralph-validate.sh` for automated testing
- Added SKIP_CLAUDE_TEST environment variable for testing mode
- [x] GitHub Actions integration ✅
- Implemented `github-actions` command for workflow generation
- Creates customizable GitHub Actions workflow for automated syncing
- Supports scheduled runs, manual triggers, and push-triggered syncs
- Fixed linting error with escaped characters in workflow template
- [x] Issue fixer functionality ✅
- Implemented `issue-fixer` command for automatic issue detection and fixing
- Detects build, test, lint, and type checking issues across multiple languages
- Supports Node/TypeScript, Python, and Go projects
- Uses Claude SDK to intelligently fix detected issues
- Interactive mode for selective issue fixing
- Comprehensive test suite with 268 passing tests
## Priority 5: GitHub Actions PR Sync Features ✅
- [x] Implement `setup-github-pr-sync` command ✅
- Creates GitHub Actions workflow for PR-triggered syncing
- Configurable loop iterations (1-10 times) for sync-one command
- Persists settings to repomirror.yaml for future use
- Overwrite protection with user confirmation
- Creates `.github/workflows/repomirror.yml` workflow file
- Comprehensive test coverage (8 tests)
- [x] Implement `dispatch-sync` command ✅
- Dispatches workflow runs using GitHub CLI
- Automatic repository detection from git remotes
- User confirmation with `--yes` flag to skip
- Quiet mode with `--quiet` flag (requires `--yes`)
- Comprehensive error handling for missing prerequisites
- Full test coverage (17 tests)
## Current Status
✅ **FULLY IMPLEMENTED** - All planned features completed successfully:
- All CLI commands implemented and working
- Init command creates proper .repomirror/ structure with **template-based shell script generation**
- Sync commands execute shell scripts correctly
- Visualize command provides colored output
- Remote repository management (add/list/remove remotes)
- Push command with intelligent commit messages and multi-remote support
- Pull command with auto-sync integration
- Auto-push capability after sync operations
- Validation script for testing init command functionality
- Test mode support with SKIP_CLAUDE_TEST environment variable
- GitHub Actions workflow generation for CI/CD
- Issue fixer command for automatic issue detection and resolution
- GitHub Actions PR sync commands (`setup-github-pr-sync` and `dispatch-sync`)
- **Shell script templates properly bundled in dist/ package** (matches spec requirement)
- Comprehensive test suite with 293 tests passing (2 skipped for interactive mode)
- TypeScript build passing with full type safety
- All linting checks passing
- **Ready for production usage with complete feature set**
## Recent Improvements
### Template-Based Shell Script Generation - IMPLEMENTED ✅
**Issue**: The spec required "The shell scripts are included in the npm dist/ bundle and baked into the package so they can be copied out of the package root by `npx repomirror init`" but the implementation was generating scripts inline.
**Solution Implemented**:
- Created template files in `src/templates/`: `sync.sh.template`, `ralph.sh.template`, `gitignore.template`
- Updated build process in `package.json` to copy templates to `dist/templates/`
- Modified `src/commands/init.ts` to read templates from package and substitute variables
- Added template location resolution (tries `dist/templates` first, falls back to `src/templates`)
- Supports `${targetRepo}` variable substitution in sync script template
- All 293 tests continue to pass
- Now fully compliant with spec requirement
**Files Modified**:
- `src/templates/sync.sh.template` (new)
- `src/templates/ralph.sh.template` (new)
- `src/templates/gitignore.template` (new)
- `package.json` (updated build process and files array)
- `src/commands/init.ts` (replaced inline generation with template-based)
- `tests/commands/init.test.ts` (updated mocks for template handling)
## Known Issues & Critical Fixes Needed
### 1. Init Command Hangs (CRITICAL) - FIXED ✅
**Problem**: The `repomirror init` command was hanging forever during prompt generation.
**Root Cause**: The `generateTransformationPrompt` function (src/commands/init.ts:256-318) was using an async iterator incorrectly, not handling error cases properly.
**Fix Applied**: Updated the async iterator loop to properly handle both error and success cases:
- Now throws an error immediately when Claude SDK returns an error
- Properly breaks the loop after receiving ANY result type
- Added more descriptive error messages for debugging
**Testing Completed**:
- All 230 tests passing (comprehensive test coverage added)
- TypeScript build successful
- Ready for production use
## Testing Instructions
For testing the init command without calling Claude SDK:
- Set `SKIP_CLAUDE_TEST=true` environment variable
- This will skip the Claude Code preflight check and use a test prompt template
- The validation script `hack/ralph-validate.sh` uses this flag for automated testing
================================================
FILE: README.md
================================================
# repomirror
A tool to perform transformations on code repositories with AI. Inspired by [@ghuntley](https://github.com/ghuntley)'s [ralph wiggum](https://ghuntley.com/ralph).
Built by [@yonom](https://github.com/yonom), [@dexhorthy](https://github.com/dexhorthy), [@lantos1618](https://github.com/lantos1618) and [@AVGVSTVS96](https://github.com/AVGVSTVS96)
Read more about the project at [repomirror.md](./repomirror.md)
## Projects
Some example projects maintained by repomirror:
- [better-use](https://github.com/yonom/browser-use-ts) - A port of browser-use to typescript
- [ai-sdk-python](https://github.com/yonom/ai-sdk-python) - Port of vercel AI sdk to python
- [assistant-ui-vue](https://github.com/yonom/assistant-ui-vue) - Port of assistant-ui-react to vue.js
- [open-dedalus](https://github.com/yonom/open-dedalus) - open source clone of dedalus using `llms-full.txt`
- [better-ui](https://github.com/lantos1618/better-ui/tree/lantos-aui) - Assistant UI + TRPC (ai ui with frontend and backend State)
- [lynlan](https://github.com/lantos1618/lynlang) - GO + RUST + Haskel
================================================
FILE: VALIDATION_PLAN.md
================================================
✅ validate init: [COMPLETED]
- create a temp dir for source repo and add a "hello.ts" file in it ✅
- create a temp dir for target and init a git repo in it ✅
- use `repomirror init` to test, use a "translate this repo to python" ✅
- ensure that the command succeeds and generated the correct files ✅
Validation completed successfully using hack/ralph-validate.sh script.
Results:
- repomirror.yaml created in source directory
- .repomirror/ directory created with all required files (prompt.md, sync.sh, ralph.sh, .gitignore)
- Command handles CLI flags correctly (--source, --target, --instructions)
- Test mode support added with SKIP_CLAUDE_TEST environment variable for automated testing
BUG - CTRL + C does not work in sync-forever command
================================================
FILE: coverage/base.css
================================================
body, html {
margin:0; padding: 0;
height: 100%;
}
body {
font-family: Helvetica Neue, Helvetica, Arial;
font-size: 14px;
color:#333;
}
.small { font-size: 12px; }
*, *:after, *:before {
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
h1 { font-size: 20px; margin: 0;}
h2 { font-size: 14px; }
pre {
font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
margin: 0;
padding: 0;
-moz-tab-size: 2;
-o-tab-size: 2;
tab-size: 2;
}
a { color:#0074D9; text-decoration:none; }
a:hover { text-decoration:underline; }
.strong { font-weight: bold; }
.space-top1 { padding: 10px 0 0 0; }
.pad2y { padding: 20px 0; }
.pad1y { padding: 10px 0; }
.pad2x { padding: 0 20px; }
.pad2 { padding: 20px; }
.pad1 { padding: 10px; }
.space-left2 { padding-left:55px; }
.space-right2 { padding-right:20px; }
.center { text-align:center; }
.clearfix { display:block; }
.clearfix:after {
content:'';
display:block;
height:0;
clear:both;
visibility:hidden;
}
.fl { float: left; }
@media only screen and (max-width:640px) {
.col3 { width:100%; max-width:100%; }
.hide-mobile { display:none!important; }
}
.quiet {
color: #7f7f7f;
color: rgba(0,0,0,0.5);
}
.quiet a { opacity: 0.7; }
.fraction {
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 10px;
color: #555;
background: #E8E8E8;
padding: 4px 5px;
border-radius: 3px;
vertical-align: middle;
}
div.path a:link, div.path a:visited { color: #333; }
table.coverage {
border-collapse: collapse;
margin: 10px 0 0 0;
padding: 0;
}
table.coverage td {
margin: 0;
padding: 0;
vertical-align: top;
}
table.coverage td.line-count {
text-align: right;
padding: 0 5px 0 20px;
}
table.coverage td.line-coverage {
text-align: right;
padding-right: 10px;
min-width:20px;
}
table.coverage td span.cline-any {
display: inline-block;
padding: 0 5px;
width: 100%;
}
.missing-if-branch {
display: inline-block;
margin-right: 5px;
border-radius: 3px;
position: relative;
padding: 0 4px;
background: #333;
color: yellow;
}
.skip-if-branch {
display: none;
margin-right: 10px;
position: relative;
padding: 0 4px;
background: #ccc;
color: white;
}
.missing-if-branch .typ, .skip-if-branch .typ {
color: inherit !important;
}
.coverage-summary {
border-collapse: collapse;
width: 100%;
}
.coverage-summary tr { border-bottom: 1px solid #bbb; }
.keyline-all { border: 1px solid #ddd; }
.coverage-summary td, .coverage-summary th { padding: 10px; }
.coverage-summary tbody { border: 1px solid #bbb; }
.coverage-summary td { border-right: 1px solid #bbb; }
.coverage-summary td:last-child { border-right: none; }
.coverage-summary th {
text-align: left;
font-weight: normal;
white-space: nowrap;
}
.coverage-summary th.file { border-right: none !important; }
.coverage-summary th.pct { }
.coverage-summary th.pic,
.coverage-summary th.abs,
.coverage-summary td.pct,
.coverage-summary td.abs { text-align: right; }
.coverage-summary td.file { white-space: nowrap; }
.coverage-summary td.pic { min-width: 120px !important; }
.coverage-summary tfoot td { }
.coverage-summary .sorter {
height: 10px;
width: 7px;
display: inline-block;
margin-left: 0.5em;
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
}
.coverage-summary .sorted .sorter {
background-position: 0 -20px;
}
.coverage-summary .sorted-desc .sorter {
background-position: 0 -10px;
}
.status-line { height: 10px; }
/* yellow */
.cbranch-no { background: yellow !important; color: #111; }
/* dark red */
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
.low .chart { border:1px solid #C21F39 }
.highlighted,
.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
background: #C21F39 !important;
}
/* medium red */
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
/* light red */
.low, .cline-no { background:#FCE1E5 }
/* light green */
.high, .cline-yes { background:rgb(230,245,208) }
/* medium green */
.cstat-yes { background:rgb(161,215,106) }
/* dark green */
.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
.high .chart { border:1px solid rgb(77,146,33) }
/* dark yellow (gold) */
.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
.medium .chart { border:1px solid #f9cd0b; }
/* light yellow */
.medium { background: #fff4c2; }
.cstat-skip { background: #ddd; color: #111; }
.fstat-skip { background: #ddd; color: #111 !important; }
.cbranch-skip { background: #ddd !important; color: #111; }
span.cline-neutral { background: #eaeaea; }
.coverage-summary td.empty {
opacity: .5;
padding-top: 4px;
padding-bottom: 4px;
line-height: 1;
color: #888;
}
.cover-fill, .cover-empty {
display:inline-block;
height: 12px;
}
.chart {
line-height: 0;
}
.cover-empty {
background: white;
}
.cover-full {
border-right: none !important;
}
pre.prettyprint {
border: none !important;
padding: 0 !important;
margin: 0 !important;
}
.com { color: #999 !important; }
.ignore-none { color: #999; font-weight: normal; }
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -48px;
}
.footer, .push {
height: 48px;
}
================================================
FILE: coverage/block-navigation.js
================================================
/* eslint-disable */
var jumpToCode = (function init() {
// Classes of code we would like to highlight in the file view
var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
// Elements to highlight in the file listing view
var fileListingElements = ['td.pct.low'];
// We don't want to select elements that are direct descendants of another match
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
// Selector that finds elements on the page to which we can jump
var selector =
fileListingElements.join(', ') +
', ' +
notSelector +
missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
// The NodeList of matching elements
var missingCoverageElements = document.querySelectorAll(selector);
var currentIndex;
function toggleClass(index) {
missingCoverageElements
.item(currentIndex)
.classList.remove('highlighted');
missingCoverageElements.item(index).classList.add('highlighted');
}
function makeCurrent(index) {
toggleClass(index);
currentIndex = index;
missingCoverageElements.item(index).scrollIntoView({
behavior: 'smooth',
block: 'center',
inline: 'center'
});
}
function goToPrevious() {
var nextIndex = 0;
if (typeof currentIndex !== 'number' || currentIndex === 0) {
nextIndex = missingCoverageElements.length - 1;
} else if (missingCoverageElements.length > 1) {
nextIndex = currentIndex - 1;
}
makeCurrent(nextIndex);
}
function goToNext() {
var nextIndex = 0;
if (
typeof currentIndex === 'number' &&
currentIndex < missingCoverageElements.length - 1
) {
nextIndex = currentIndex + 1;
}
makeCurrent(nextIndex);
}
return function jump(event) {
if (
document.getElementById('fileSearch') === document.activeElement &&
document.activeElement != null
) {
// if we're currently focused on the search input, we don't want to navigate
return;
}
switch (event.which) {
case 78: // n
case 74: // j
goToNext();
break;
case 66: // b
case 75: // k
case 80: // p
goToPrevious();
break;
}
};
})();
window.addEventListener('keydown', jumpToCode);
================================================
FILE: coverage/coverage-final.json
================================================
{"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/cli.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/cli.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":19}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":39}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":46}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":39}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":54}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":49}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":30}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":7}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":21}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":65}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":20}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":7}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":18}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":60}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":16}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":75}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":57}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":19}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":7}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":39}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":23}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":7}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":23}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":48}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":45}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":43}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":16}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":39,"column":-423}},"locations":[{"start":{"line":1,"column":0},"end":{"line":39,"column":-423}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":39,"column":-423}},"loc":{"start":{"line":1,"column":0},"end":{"line":39,"column":-423}},"line":1}},"f":{"0":0}}
,"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/init.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/init.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":36}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":38}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":32}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":50}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":23}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":21}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":21}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":37}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":45}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":14}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":76}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":4}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":50}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":35}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":53}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":0}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":54}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":5}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":20}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":25}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":52}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":20}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":6}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":5}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":20}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":25}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":57}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":29}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":6}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":5}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":20}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":41}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":51}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":58}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":6}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":5}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":29}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":51}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":52}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":69}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":7}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":63}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":25}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":41}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":6}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":55}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":45}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":32}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":25}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":25}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":22}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":6}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":73}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":45}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":16}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":18}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":78}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":8}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":6}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":16}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":18}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":128}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":8}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":6}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":19}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":61}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":18}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":16}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":75}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":8}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":6}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":20}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":1}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":74}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":64}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":0}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":7}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":39}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":9}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":34}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":13}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":68}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":22}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":5}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":46}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":9}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":74}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":13}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":77}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":22}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":5}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":58}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":9}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":63}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":24}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":9}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":27}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":73}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":10}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":24}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":7}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":13}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":67}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":22}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":5}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":41}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":9}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":65}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":49}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":80}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":24}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":7}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":13}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":19}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":93}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":8}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":22}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":5}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":0}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":51}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":19}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":17}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":90}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":6}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":20}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":3}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":1}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":44}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":21}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":21}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":37}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":20}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":149}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":11}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":110}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":97}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":0}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":65}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":113}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":0}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":325}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":12}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":0}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":11}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":109}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":0}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":104}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":65}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":0}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":113}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":325}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":12}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":46}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":0}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":19}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":29}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":20}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":9}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":138}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":0}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":316}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":0}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":18}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":37}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":23}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":7}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":57}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":45}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":12}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":5}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":3}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":0}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":16}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":64}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":3}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":43}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":15}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":44}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":44}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":45}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":1}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":37}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":21}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":21}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":26}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":18}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":59}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":0}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":33}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":53}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":0}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":21}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":72}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":0}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":19}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":33}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":30}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":115}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":51}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":43}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":0}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":66}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":16}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":5}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":0}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":20}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":34}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":11}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":23}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":57}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":11}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":6}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":0}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":68}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":16}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":5}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":0}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":22}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":21}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":38}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":28}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":4}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":255,"column":-326}},"locations":[{"start":{"line":1,"column":0},"end":{"line":255,"column":-326}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":255,"column":-326}},"loc":{"start":{"line":1,"column":0},"end":{"line":255,"column":-326}},"line":1}},"f":{"0":0}}
,"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync-forever.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync-forever.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":26}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":36}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":69}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":33}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":18}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":82}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":8}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":6}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":20}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":67}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":52}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":7}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":40}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":23}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":25}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":7}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":19}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":71}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":53}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":12}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":20}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":18}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":91}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":10}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":8}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":22}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":41,"column":-333}},"locations":[{"start":{"line":1,"column":0},"end":{"line":41,"column":-333}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":41,"column":-333}},"loc":{"start":{"line":1,"column":0},"end":{"line":41,"column":-333}},"line":1}},"f":{"0":0}}
,"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync-one.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync-one.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":48}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":15}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":-17}},"locations":[{"start":{"line":1,"column":0},"end":{"line":6,"column":-17}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":6,"column":-17}},"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":-17}},"line":1}},"f":{"0":0}}
,"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/sync.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":26}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":28}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":36}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":45}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":67}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":30}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":32}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":18}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":81}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":8}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":6}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":20}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":48}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":7}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":39}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":25}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":7}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":60}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":19}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":18}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":16}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":81}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":8}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":6}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":20}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":3}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":38,"column":-315}},"locations":[{"start":{"line":1,"column":0},"end":{"line":38,"column":-315}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":38,"column":-315}},"loc":{"start":{"line":1,"column":0},"end":{"line":38,"column":-315}},"line":1}},"f":{"0":0}}
,"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/visualize.ts": {"path":"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/commands/visualize.ts","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":48}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":16}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":19}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":20}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":17}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":18}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":20}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":21}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":19}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":22}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":19}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":45}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":17}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":18}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":16}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":25}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":21}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":25}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":27}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":19}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":26}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":12}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":3}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":1}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":0}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":16}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":17}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":18}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":20}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":1}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":48}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":84}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":0}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":24}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":41}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":47}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":26}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":4}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":23}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":19}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":22}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":18}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":4}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":26}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":21}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":26}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":20}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":4}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":23}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":77}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":22}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":66}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":25}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":69}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":19}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":62}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":89}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":67}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":40}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":75}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":5}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":19}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":5}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":22}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":73}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":76}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":69}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":97}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":81}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":78}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":99}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":16}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":1}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":43}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":38}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":39}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":94}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":41}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":6}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":27}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":52}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":5}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":52}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":61}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":45}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":5}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":3}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":30}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":65}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":50}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":52}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":42}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":65}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":20}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":25}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":63}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":65}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":60}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":73}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":66}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":58}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":69}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":74}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":32}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":66}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":58}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":31}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":71}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":7}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":5}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":0}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":32}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":64}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":20}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":32}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":49}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":53}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":7}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":76}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":79}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":28}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":61}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":57}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":28}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":115}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":10}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":7}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":28}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":63}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":0}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":38}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":84}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":7}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":5}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":51}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":60}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":61}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":44}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":41}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":51}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":62}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":46}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":28}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":26}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":45}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":29}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":46}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":45}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":40}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":93}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":31}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":57}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":9}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":40}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":50}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":71}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":9}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":50}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":70}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":9}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":7}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":30}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":49}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":90}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":5}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":49}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":62}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":3}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":0}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":48}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":54}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":50}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":36}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":6}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":28}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":83}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":67}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":29}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":68}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":7}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":29}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":68}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":7}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":52}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":60}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":7}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":5}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":3}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":21}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":19}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":28}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":37}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":78}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":62}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":51}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":45}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":61}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":34}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":53}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":3}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":0}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":16}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":62}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":3}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":16}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":1}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":0}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":35}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":16}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":20}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":22}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":24}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":26}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":3}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":33}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":75}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":23}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":55}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":38}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":41}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":58}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":0}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":81}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":4}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":0}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":27}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":22}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":44}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":28}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":45}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":41}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":36}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":0}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":25}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":77}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":6}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":0}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":18}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":65}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":5}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":0}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":37}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":50}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":43}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":28}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":62}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":80}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":7}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":5}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":0}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":37}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":27}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":92}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":8}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":5}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":3}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":0}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":31}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":1}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":0}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":32}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":36}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":18}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":30}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":25}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":24}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":5}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":0}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":70}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":62}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":81}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":74}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":37}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":0}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":27}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":22}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":33}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":70}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":13}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":0}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":11}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":38}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":0}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":39}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":74}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":51}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":37}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":0}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":32}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":33}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":27}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":33}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":13}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":0}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":65}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":43}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":54}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":38}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":23}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":19}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":32}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":31}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":24}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":14}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":42}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":18}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":59}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":73}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":33}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":75}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":14}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":11}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":9}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":41}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":17}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":33}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":60}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":11}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":53}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":48}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":0}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":38}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":68}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":49}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":38}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":49}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":30}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":19}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":31}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":24}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":14}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":37}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":18}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":58}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":40}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":31}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":35}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":15}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":11}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":9}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":71}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":57}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":73}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":31}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":85}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":12}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":51}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":9}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":56}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":14}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":73}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":9}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":0}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":60}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":24}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":32}},"393":{"start":{"line":394,"column":0},"end":{"line":394,"column":71}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":24}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":29}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":68}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":10}},"398":{"start":{"line":399,"column":0},"end":{"line":399,"column":29}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":77}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":10}},"401":{"start":{"line":402,"column":0},"end":{"line":402,"column":7}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":5}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":5}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":0}},"405":{"start":{"line":406,"column":0},"end":{"line":406,"column":24}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":95}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":74}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":27}},"409":{"start":{"line":410,"column":0},"end":{"line":410,"column":94}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":8}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":68}},"412":{"start":{"line":413,"column":0},"end":{"line":413,"column":5}},"413":{"start":{"line":414,"column":0},"end":{"line":414,"column":5}},"414":{"start":{"line":415,"column":0},"end":{"line":415,"column":1}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":13794},"end":{"line":415,"column":1}},"locations":[{"start":{"line":1,"column":13794},"end":{"line":415,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":13794},"end":{"line":415,"column":1}},"loc":{"start":{"line":1,"column":13794},"end":{"line":415,"column":1}},"line":1}},"f":{"0":0}}
}
================================================
FILE: coverage/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for All files</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>All files</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/794</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/6</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/6</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/794</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="39" class="abs low">0/39</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="39" class="abs low">0/39</td>
</tr>
<tr>
<td class="file low" data-value="src/commands"><a href="src/commands/index.html">src/commands</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="755" class="abs low">0/755</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="755" class="abs low">0/755</td>
</tr>
</tbody>
</table>
</div>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-08-23T07:39:41.860Z
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="sorter.js"></script>
<script src="block-navigation.js"></script>
</body>
</html>
================================================
FILE: coverage/prettify.css
================================================
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
================================================
FILE: coverage/prettify.js
================================================
/* eslint-disable */
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
================================================
FILE: coverage/sorter.js
================================================
/* eslint-disable */
var addSorting = (function() {
'use strict';
var cols,
currentSort = {
index: 0,
desc: false
};
// returns the summary table element
function getTable() {
return document.querySelector('.coverage-summary');
}
// returns the thead element of the summary table
function getTableHeader() {
return getTable().querySelector('thead tr');
}
// returns the tbody element of the summary table
function getTableBody() {
return getTable().querySelector('tbody');
}
// returns the th element for nth column
function getNthColumn(n) {
return getTableHeader().querySelectorAll('th')[n];
}
function onFilterInput() {
const searchValue = document.getElementById('fileSearch').value;
const rows = document.getElementsByTagName('tbody')[0].children;
// Try to create a RegExp from the searchValue. If it fails (invalid regex),
// it will be treated as a plain text search
let searchRegex;
try {
searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive
} catch (error) {
searchRegex = null;
}
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
let isMatch = false;
if (searchRegex) {
// If a valid regex was created, use it for matching
isMatch = searchRegex.test(row.textContent);
} else {
// Otherwise, fall back to the original plain text search
isMatch = row.textContent
.toLowerCase()
.includes(searchValue.toLowerCase());
}
row.style.display = isMatch ? '' : 'none';
}
}
// loads the search box
function addSearchBox() {
var template = document.getElementById('filterTemplate');
var templateClone = template.content.cloneNode(true);
templateClone.getElementById('fileSearch').oninput = onFilterInput;
template.parentElement.appendChild(templateClone);
}
// loads all columns
function loadColumns() {
var colNodes = getTableHeader().querySelectorAll('th'),
colNode,
cols = [],
col,
i;
for (i = 0; i < colNodes.length; i += 1) {
colNode = colNodes[i];
col = {
key: colNode.getAttribute('data-col'),
sortable: !colNode.getAttribute('data-nosort'),
type: colNode.getAttribute('data-type') || 'string'
};
cols.push(col);
if (col.sortable) {
col.defaultDescSort = col.type === 'number';
colNode.innerHTML =
colNode.innerHTML + '<span class="sorter"></span>';
}
}
return cols;
}
// attaches a data attribute to every tr element with an object
// of data values keyed by column name
function loadRowData(tableRow) {
var tableCols = tableRow.querySelectorAll('td'),
colNode,
col,
data = {},
i,
val;
for (i = 0; i < tableCols.length; i += 1) {
colNode = tableCols[i];
col = cols[i];
val = colNode.getAttribute('data-value');
if (col.type === 'number') {
val = Number(val);
}
data[col.key] = val;
}
return data;
}
// loads all row data
function loadData() {
var rows = getTableBody().querySelectorAll('tr'),
i;
for (i = 0; i < rows.length; i += 1) {
rows[i].data = loadRowData(rows[i]);
}
}
// sorts the table using the data for the ith column
function sortByIndex(index, desc) {
var key = cols[index].key,
sorter = function(a, b) {
a = a.data[key];
b = b.data[key];
return a < b ? -1 : a > b ? 1 : 0;
},
finalSorter = sorter,
tableBody = document.querySelector('.coverage-summary tbody'),
rowNodes = tableBody.querySelectorAll('tr'),
rows = [],
i;
if (desc) {
finalSorter = function(a, b) {
return -1 * sorter(a, b);
};
}
for (i = 0; i < rowNodes.length; i += 1) {
rows.push(rowNodes[i]);
tableBody.removeChild(rowNodes[i]);
}
rows.sort(finalSorter);
for (i = 0; i < rows.length; i += 1) {
tableBody.appendChild(rows[i]);
}
}
// removes sort indicators for current column being sorted
function removeSortIndicators() {
var col = getNthColumn(currentSort.index),
cls = col.className;
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
col.className = cls;
}
// adds sort indicators for current column being sorted
function addSortIndicators() {
getNthColumn(currentSort.index).className += currentSort.desc
? ' sorted-desc'
: ' sorted';
}
// adds event listeners for all sorter widgets
function enableUI() {
var i,
el,
ithSorter = function ithSorter(i) {
var col = cols[i];
return function() {
var desc = col.defaultDescSort;
if (currentSort.index === i) {
desc = !currentSort.desc;
}
sortByIndex(i, desc);
removeSortIndicators();
currentSort.index = i;
currentSort.desc = desc;
addSortIndicators();
};
};
for (i = 0; i < cols.length; i += 1) {
if (cols[i].sortable) {
// add the click event handler on the th so users
// dont have to click on those tiny arrows
el = getNthColumn(i).querySelector('.sorter').parentElement;
if (el.addEventListener) {
el.addEventListener('click', ithSorter(i));
} else {
el.attachEvent('onclick', ithSorter(i));
}
}
}
}
// adds sorting functionality to the UI
return function() {
if (!getTable()) {
return;
}
cols = loadColumns();
loadData();
addSearchBox();
addSortIndicators();
enableUI();
};
})();
window.addEventListener('load', addSorting);
================================================
FILE: coverage/src/cli.ts.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/cli.ts</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> cli.ts</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/39</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/39</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a>
<a name='L4'></a><a href='#L4'>4</a>
<a name='L5'></a><a href='#L5'>5</a>
<a name='L6'></a><a href='#L6'>6</a>
<a name='L7'></a><a href='#L7'>7</a>
<a name='L8'></a><a href='#L8'>8</a>
<a name='L9'></a><a href='#L9'>9</a>
<a name='L10'></a><a href='#L10'>10</a>
<a name='L11'></a><a href='#L11'>11</a>
<a name='L12'></a><a href='#L12'>12</a>
<a name='L13'></a><a href='#L13'>13</a>
<a name='L14'></a><a href='#L14'>14</a>
<a name='L15'></a><a href='#L15'>15</a>
<a name='L16'></a><a href='#L16'>16</a>
<a name='L17'></a><a href='#L17'>17</a>
<a name='L18'></a><a href='#L18'>18</a>
<a name='L19'></a><a href='#L19'>19</a>
<a name='L20'></a><a href='#L20'>20</a>
<a name='L21'></a><a href='#L21'>21</a>
<a name='L22'></a><a href='#L22'>22</a>
<a name='L23'></a><a href='#L23'>23</a>
<a name='L24'></a><a href='#L24'>24</a>
<a name='L25'></a><a href='#L25'>25</a>
<a name='L26'></a><a href='#L26'>26</a>
<a name='L27'></a><a href='#L27'>27</a>
<a name='L28'></a><a href='#L28'>28</a>
<a name='L29'></a><a href='#L29'>29</a>
<a name='L30'></a><a href='#L30'>30</a>
<a name='L31'></a><a href='#L31'>31</a>
<a name='L32'></a><a href='#L32'>32</a>
<a name='L33'></a><a href='#L33'>33</a>
<a name='L34'></a><a href='#L34'>34</a>
<a name='L35'></a><a href='#L35'>35</a>
<a name='L36'></a><a href='#L36'>36</a>
<a name='L37'></a><a href='#L37'>37</a>
<a name='L38'></a><a href='#L38'>38</a>
<a name='L39'></a><a href='#L39'>39</a>
<a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >#!/usr/bin/env node</span></span></span>
<span class="cstat-no" title="statement not covered" >import { Command } from "commander";</span>
<span class="cstat-no" title="statement not covered" >import { init } from "./commands/init";</span>
<span class="cstat-no" title="statement not covered" >import { syncOne } from "./commands/sync-one";</span>
<span class="cstat-no" title="statement not covered" >import { sync } from "./commands/sync";</span>
<span class="cstat-no" title="statement not covered" >import { syncForever } from "./commands/sync-forever";</span>
<span class="cstat-no" title="statement not covered" >import { visualize } from "./commands/visualize";</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >const program = new Command();</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program</span>
<span class="cstat-no" title="statement not covered" > .name("repomirror")</span>
<span class="cstat-no" title="statement not covered" > .description("Sync and transform repositories using AI agents")</span>
<span class="cstat-no" title="statement not covered" > .version("0.1.0");</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program</span>
<span class="cstat-no" title="statement not covered" > .command("init")</span>
<span class="cstat-no" title="statement not covered" > .description("Initialize repomirror in current directory")</span>
<span class="cstat-no" title="statement not covered" > .action(init);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program.command("sync").description("Run one sync iteration").action(sync);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program</span>
<span class="cstat-no" title="statement not covered" > .command("sync-one")</span>
<span class="cstat-no" title="statement not covered" > .description("Run one sync iteration (alias for sync)")</span>
<span class="cstat-no" title="statement not covered" > .action(syncOne);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program</span>
<span class="cstat-no" title="statement not covered" > .command("sync-forever")</span>
<span class="cstat-no" title="statement not covered" > .description("Run sync continuously")</span>
<span class="cstat-no" title="statement not covered" > .action(syncForever);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program</span>
<span class="cstat-no" title="statement not covered" > .command("visualize")</span>
<span class="cstat-no" title="statement not covered" > .description("Visualize Claude output stream")</span>
<span class="cstat-no" title="statement not covered" > .option("--debug", "Show debug timestamps")</span>
<span class="cstat-no" title="statement not covered" > .action((options) => visualize(options));</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >program.parse();</span>
</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-08-23T07:39:41.860Z
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html>
================================================
FILE: coverage/src/commands/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/commands</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../../index.html">All files</a> src/commands</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/755</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/5</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/5</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/755</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file low" data-value="init.ts"><a href="init.ts.html">init.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="255" class="abs low">0/255</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="255" class="abs low">0/255</td>
</tr>
<tr>
<td class="file low" data-value="sync-forever.ts"><a href="sync-forever.ts.html">sync-forever.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="41" class="abs low">0/41</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="41" class="abs low">0/41</td>
</tr>
<tr>
<td class="file low" data-value="sync-one.ts"><a href="sync-one.ts.html">sync-one.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
</tr>
<tr>
<td class="file low" data-value="sync.ts"><a href="sync.ts.html">sync.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="38" class="abs low">0/38</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="38" class="abs low">0/38</td>
</tr>
<tr>
<td class="file low" data-value="visualize.ts"><a href="visualize.ts.html">visualize.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="415" class="abs low">0/415</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="415" class="abs low">0/415</td>
</tr>
</tbody>
</table>
</div>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-08-23T07:39:41.860Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html>
================================================
FILE: coverage/src/commands/init.ts.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/commands/init.ts</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/commands</a> init.ts</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/255</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/255</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a>
<a name='L4'></a><a href='#L4'>4</a>
<a name='L5'></a><a href='#L5'>5</a>
<a name='L6'></a><a href='#L6'>6</a>
<a name='L7'></a><a href='#L7'>7</a>
<a name='L8'></a><a href='#L8'>8</a>
<a name='L9'></a><a href='#L9'>9</a>
<a name='L10'></a><a href='#L10'>10</a>
<a name='L11'></a><a href='#L11'>11</a>
<a name='L12'></a><a href='#L12'>12</a>
<a name='L13'></a><a href='#L13'>13</a>
<a name='L14'></a><a href='#L14'>14</a>
<a name='L15'></a><a href='#L15'>15</a>
<a name='L16'></a><a href='#L16'>16</a>
<a name='L17'></a><a href='#L17'>17</a>
<a name='L18'></a><a href='#L18'>18</a>
<a name='L19'></a><a href='#L19'>19</a>
<a name='L20'></a><a href='#L20'>20</a>
<a name='L21'></a><a href='#L21'>21</a>
<a name='L22'></a><a href='#L22'>22</a>
<a name='L23'></a><a href='#L23'>23</a>
<a name='L24'></a><a href='#L24'>24</a>
<a name='L25'></a><a href='#L25'>25</a>
<a name='L26'></a><a href='#L26'>26</a>
<a name='L27'></a><a href='#L27'>27</a>
<a name='L28'></a><a href='#L28'>28</a>
<a name='L29'></a><a href='#L29'>29</a>
<a name='L30'></a><a href='#L30'>30</a>
<a name='L31'></a><a href='#L31'>31</a>
<a name='L32'></a><a href='#L32'>32</a>
<a name='L33'></a><a href='#L33'>33</a>
<a name='L34'></a><a href='#L34'>34</a>
<a name='L35'></a><a href='#L35'>35</a>
<a name='L36'></a><a href='#L36'>36</a>
<a name='L37'></a><a href='#L37'>37</a>
<a name='L38'></a><a href='#L38'>38</a>
<a name='L39'></a><a href='#L39'>39</a>
<a name='L40'></a><a href='#L40'>40</a>
<a name='L41'></a><a href='#L41'>41</a>
<a name='L42'></a><a href='#L42'>42</a>
<a name='L43'></a><a href='#L43'>43</a>
<a name='L44'></a><a href='#L44'>44</a>
<a name='L45'></a><a href='#L45'>45</a>
<a name='L46'></a><a href='#L46'>46</a>
<a name='L47'></a><a href='#L47'>47</a>
<a name='L48'></a><a href='#L48'>48</a>
<a name='L49'></a><a href='#L49'>49</a>
<a name='L50'></a><a href='#L50'>50</a>
<a name='L51'></a><a href='#L51'>51</a>
<a name='L52'></a><a href='#L52'>52</a>
<a name='L53'></a><a href='#L53'>53</a>
<a name='L54'></a><a href='#L54'>54</a>
<a name='L55'></a><a href='#L55'>55</a>
<a name='L56'></a><a href='#L56'>56</a>
<a name='L57'></a><a href='#L57'>57</a>
<a name='L58'></a><a href='#L58'>58</a>
<a name='L59'></a><a href='#L59'>59</a>
<a name='L60'></a><a href='#L60'>60</a>
<a name='L61'></a><a href='#L61'>61</a>
<a name='L62'></a><a href='#L62'>62</a>
<a name='L63'></a><a href='#L63'>63</a>
<a name='L64'></a><a href='#L64'>64</a>
<a name='L65'></a><a href='#L65'>65</a>
<a name='L66'></a><a href='#L66'>66</a>
<a name='L67'></a><a href='#L67'>67</a>
<a name='L68'></a><a href='#L68'>68</a>
<a name='L69'></a><a href='#L69'>69</a>
<a name='L70'></a><a href='#L70'>70</a>
<a name='L71'></a><a href='#L71'>71</a>
<a name='L72'></a><a href='#L72'>72</a>
<a name='L73'></a><a href='#L73'>73</a>
<a name='L74'></a><a href='#L74'>74</a>
<a name='L75'></a><a href='#L75'>75</a>
<a name='L76'></a><a href='#L76'>76</a>
<a name='L77'></a><a href='#L77'>77</a>
<a name='L78'></a><a href='#L78'>78</a>
<a name='L79'></a><a href='#L79'>79</a>
<a name='L80'></a><a href='#L80'>80</a>
<a name='L81'></a><a href='#L81'>81</a>
<a name='L82'></a><a href='#L82'>82</a>
<a name='L83'></a><a href='#L83'>83</a>
<a name='L84'></a><a href='#L84'>84</a>
<a name='L85'></a><a href='#L85'>85</a>
<a name='L86'></a><a href='#L86'>86</a>
<a name='L87'></a><a href='#L87'>87</a>
<a name='L88'></a><a href='#L88'>88</a>
<a name='L89'></a><a href='#L89'>89</a>
<a name='L90'></a><a href='#L90'>90</a>
<a name='L91'></a><a href='#L91'>91</a>
<a name='L92'></a><a href='#L92'>92</a>
<a name='L93'></a><a href='#L93'>93</a>
<a name='L94'></a><a href='#L94'>94</a>
<a name='L95'></a><a href='#L95'>95</a>
<a name='L96'></a><a href='#L96'>96</a>
<a name='L97'></a><a href='#L97'>97</a>
<a name='L98'></a><a href='#L98'>98</a>
<a name='L99'></a><a href='#L99'>99</a>
<a name='L100'></a><a href='#L100'>100</a>
<a name='L101'></a><a href='#L101'>101</a>
<a name='L102'></a><a href='#L102'>102</a>
<a name='L103'></a><a href='#L103'>103</a>
<a name='L104'></a><a href='#L104'>104</a>
<a name='L105'></a><a href='#L105'>105</a>
<a name='L106'></a><a href='#L106'>106</a>
<a name='L107'></a><a href='#L107'>107</a>
<a name='L108'></a><a href='#L108'>108</a>
<a name='L109'></a><a href='#L109'>109</a>
<a name='L110'></a><a href='#L110'>110</a>
<a name='L111'></a><a href='#L111'>111</a>
<a name='L112'></a><a href='#L112'>112</a>
<a name='L113'></a><a href='#L113'>113</a>
<a name='L114'></a><a href='#L114'>114</a>
<a name='L115'></a><a href='#L115'>115</a>
<a name='L116'></a><a href='#L116'>116</a>
<a name='L117'></a><a href='#L117'>117</a>
<a name='L118'></a><a href='#L118'>118</a>
<a name='L119'></a><a href='#L119'>119</a>
<a name='L120'></a><a href='#L120'>120</a>
<a name='L121'></a><a href='#L121'>121</a>
<a name='L122'></a><a href='#L122'>122</a>
<a name='L123'></a><a href='#L123'>123</a>
<a name='L124'></a><a href='#L124'>124</a>
<a name='L125'></a><a href='#L125'>125</a>
<a name='L126'></a><a href='#L126'>126</a>
<a name='L127'></a><a href='#L127'>127</a>
<a name='L128'></a><a href='#L128'>128</a>
<a name='L129'></a><a href='#L129'>129</a>
<a name='L130'></a><a href='#L130'>130</a>
<a name='L131'></a><a href='#L131'>131</a>
<a name='L132'></a><a href='#L132'>132</a>
<a name='L133'></a><a href='#L133'>133</a>
<a name='L134'></a><a href='#L134'>134</a>
<a name='L135'></a><a href='#L135'>135</a>
<a name='L136'></a><a href='#L136'>136</a>
<a name='L137'></a><a href='#L137'>137</a>
<a name='L138'></a><a href='#L138'>138</a>
<a name='L139'></a><a href='#L139'>139</a>
<a name='L140'></a><a href='#L140'>140</a>
<a name='L141'></a><a href='#L141'>141</a>
<a name='L142'></a><a href='#L142'>142</a>
<a name='L143'></a><a href='#L143'>143</a>
<a name='L144'></a><a href='#L144'>144</a>
<a name='L145'></a><a href='#L145'>145</a>
<a name='L146'></a><a href='#L146'>146</a>
<a name='L147'></a><a href='#L147'>147</a>
<a name='L148'></a><a href='#L148'>148</a>
<a name='L149'></a><a href='#L149'>149</a>
<a name='L150'></a><a href='#L150'>150</a>
<a name='L151'></a><a href='#L151'>151</a>
<a name='L152'></a><a href='#L152'>152</a>
<a name='L153'></a><a href='#L153'>153</a>
<a name='L154'></a><a href='#L154'>154</a>
<a name='L155'></a><a href='#L155'>155</a>
<a name='L156'></a><a href='#L156'>156</a>
<a name='L157'></a><a href='#L157'>157</a>
<a name='L158'></a><a href='#L158'>158</a>
<a name='L159'></a><a href='#L159'>159</a>
<a name='L160'></a><a href='#L160'>160</a>
<a name='L161'></a><a href='#L161'>161</a>
<a name='L162'></a><a href='#L162'>162</a>
<a name='L163'></a><a href='#L163'>163</a>
<a name='L164'></a><a href='#L164'>164</a>
<a name='L165'></a><a href='#L165'>165</a>
<a name='L166'></a><a href='#L166'>166</a>
<a name='L167'></a><a href='#L167'>167</a>
<a name='L168'></a><a href='#L168'>168</a>
<a name='L169'></a><a href='#L169'>169</a>
<a name='L170'></a><a href='#L170'>170</a>
<a name='L171'></a><a href='#L171'>171</a>
<a name='L172'></a><a href='#L172'>172</a>
<a name='L173'></a><a href='#L173'>173</a>
<a name='L174'></a><a href='#L174'>174</a>
<a name='L175'></a><a href='#L175'>175</a>
<a name='L176'></a><a href='#L176'>176</a>
<a name='L177'></a><a href='#L177'>177</a>
<a name='L178'></a><a href='#L178'>178</a>
<a name='L179'></a><a href='#L179'>179</a>
<a name='L180'></a><a href='#L180'>180</a>
<a name='L181'></a><a href='#L181'>181</a>
<a name='L182'></a><a href='#L182'>182</a>
<a name='L183'></a><a href='#L183'>183</a>
<a name='L184'></a><a href='#L184'>184</a>
<a name='L185'></a><a href='#L185'>185</a>
<a name='L186'></a><a href='#L186'>186</a>
<a name='L187'></a><a href='#L187'>187</a>
<a name='L188'></a><a href='#L188'>188</a>
<a name='L189'></a><a href='#L189'>189</a>
<a name='L190'></a><a href='#L190'>190</a>
<a name='L191'></a><a href='#L191'>191</a>
<a name='L192'></a><a href='#L192'>192</a>
<a name='L193'></a><a href='#L193'>193</a>
<a name='L194'></a><a href='#L194'>194</a>
<a name='L195'></a><a href='#L195'>195</a>
<a name='L196'></a><a href='#L196'>196</a>
<a name='L197'></a><a href='#L197'>197</a>
<a name='L198'></a><a href='#L198'>198</a>
<a name='L199'></a><a href='#L199'>199</a>
<a name='L200'></a><a href='#L200'>200</a>
<a name='L201'></a><a href='#L201'>201</a>
<a name='L202'></a><a href='#L202'>202</a>
<a name='L203'></a><a href='#L203'>203</a>
<a name='L204'></a><a href='#L204'>204</a>
<a name='L205'></a><a href='#L205'>205</a>
<a name='L206'></a><a href='#L206'>206</a>
<a name='L207'></a><a href='#L207'>207</a>
<a name='L208'></a><a href='#L208'>208</a>
<a name='L209'></a><a href='#L209'>209</a>
<a name='L210'></a><a href='#L210'>210</a>
<a name='L211'></a><a href='#L211'>211</a>
<a name='L212'></a><a href='#L212'>212</a>
<a name='L213'></a><a href='#L213'>213</a>
<a name='L214'></a><a href='#L214'>214</a>
<a name='L215'></a><a href='#L215'>215</a>
<a name='L216'></a><a href='#L216'>216</a>
<a name='L217'></a><a href='#L217'>217</a>
<a name='L218'></a><a href='#L218'>218</a>
<a name='L219'></a><a href='#L219'>219</a>
<a name='L220'></a><a href='#L220'>220</a>
<a name='L221'></a><a href='#L221'>221</a>
<a name='L222'></a><a href='#L222'>222</a>
<a name='L223'></a><a href='#L223'>223</a>
<a name='L224'></a><a href='#L224'>224</a>
<a name='L225'></a><a href='#L225'>225</a>
<a name='L226'></a><a href='#L226'>226</a>
<a name='L227'></a><a href='#L227'>227</a>
<a name='L228'></a><a href='#L228'>228</a>
<a name='L229'></a><a href='#L229'>229</a>
<a name='L230'></a><a href='#L230'>230</a>
<a name='L231'></a><a href='#L231'>231</a>
<a name='L232'></a><a href='#L232'>232</a>
<a name='L233'></a><a href='#L233'>233</a>
<a name='L234'></a><a href='#L234'>234</a>
<a name='L235'></a><a href='#L235'>235</a>
<a name='L236'></a><a href='#L236'>236</a>
<a name='L237'></a><a href='#L237'>237</a>
<a name='L238'></a><a href='#L238'>238</a>
<a name='L239'></a><a href='#L239'>239</a>
<a name='L240'></a><a href='#L240'>240</a>
<a name='L241'></a><a href='#L241'>241</a>
<a name='L242'></a><a href='#L242'>242</a>
<a name='L243'></a><a href='#L243'>243</a>
<a name='L244'></a><a href='#L244'>244</a>
<a name='L245'></a><a href='#L245'>245</a>
<a name='L246'></a><a href='#L246'>246</a>
<a name='L247'></a><a href='#L247'>247</a>
<a name='L248'></a><a href='#L248'>248</a>
<a name='L249'></a><a href='#L249'>249</a>
<a name='L250'></a><a href='#L250'>250</a>
<a name='L251'></a><a href='#L251'>251</a>
<a name='L252'></a><a href='#L252'>252</a>
<a name='L253'></a><a href='#L253'>253</a>
<a name='L254'></a><a href='#L254'>254</a>
<a name='L255'></a><a href='#L255'>255</a>
<a name='L256'></a><a href='#L256'>256</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { promises as fs } from "fs";</span></span></span>
<span class="cstat-no" title="statement not covered" >import { join, basename } from "path";</span>
<span class="cstat-no" title="statement not covered" >import inquirer from "inquirer";</span>
<span class="cstat-no" title="statement not covered" >import chalk from "chalk";</span>
<span class="cstat-no" title="statement not covered" >import ora from "ora";</span>
<span class="cstat-no" title="statement not covered" >import { query } from "@anthropic-ai/claude-code";</span>
<span class="cstat-no" title="statement not covered" >import { execa } from "execa";</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >interface InitOptions {</span>
<span class="cstat-no" title="statement not covered" > sourceRepo: string;</span>
<span class="cstat-no" title="statement not covered" > targetRepo: string;</span>
<span class="cstat-no" title="statement not covered" > transformationInstructions: string;</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >export async function init(): Promise<void> {</span>
<span class="cstat-no" title="statement not covered" > console.log(</span>
<span class="cstat-no" title="statement not covered" > chalk.cyan("I'll help you maintain a transformed copy of this repo:\n"),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Get current directory name for default target</span>
<span class="cstat-no" title="statement not covered" > const currentDir = process.cwd();</span>
<span class="cstat-no" title="statement not covered" > const repoName = basename(currentDir);</span>
<span class="cstat-no" title="statement not covered" > const defaultTarget = `../${repoName}-transformed`;</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > const answers = await inquirer.prompt<InitOptions>([</span>
<span class="cstat-no" title="statement not covered" > {</span>
<span class="cstat-no" title="statement not covered" > type: "input",</span>
<span class="cstat-no" title="statement not covered" > name: "sourceRepo",</span>
<span class="cstat-no" title="statement not covered" > message: "Source Repo you want to transform:",</span>
<span class="cstat-no" title="statement not covered" > default: "./",</span>
<span class="cstat-no" title="statement not covered" > },</span>
<span class="cstat-no" title="statement not covered" > {</span>
<span class="cstat-no" title="statement not covered" > type: "input",</span>
<span class="cstat-no" title="statement not covered" > name: "targetRepo",</span>
<span class="cstat-no" title="statement not covered" > message: "Where do you want to transform code to:",</span>
<span class="cstat-no" title="statement not covered" > default: defaultTarget,</span>
<span class="cstat-no" title="statement not covered" > },</span>
<span class="cstat-no" title="statement not covered" > {</span>
<span class="cstat-no" title="statement not covered" > type: "input",</span>
<span class="cstat-no" title="statement not covered" > name: "transformationInstructions",</span>
<span class="cstat-no" title="statement not covered" > message: "What changes do you want to make:",</span>
<span class="cstat-no" title="statement not covered" > default: "translate this python repo to typescript",</span>
<span class="cstat-no" title="statement not covered" > },</span>
<span class="cstat-no" title="statement not covered" > ]);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Perform preflight checks</span>
<span class="cstat-no" title="statement not covered" > await performPreflightChecks(answers.targetRepo);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Generate transformation prompt using Claude SDK</span>
<span class="cstat-no" title="statement not covered" > const spinner = ora("Generating transformation prompt...").start();</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > const optimizedPrompt = await generateTransformationPrompt(</span>
<span class="cstat-no" title="statement not covered" > answers.sourceRepo,</span>
<span class="cstat-no" title="statement not covered" > answers.targetRepo,</span>
<span class="cstat-no" title="statement not covered" > answers.transformationInstructions,</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > spinner.succeed("Generated transformation prompt");</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create .repomirror directory and files</span>
<span class="cstat-no" title="statement not covered" > await createRepoMirrorFiles(</span>
<span class="cstat-no" title="statement not covered" > answers.sourceRepo,</span>
<span class="cstat-no" title="statement not covered" > answers.targetRepo,</span>
<span class="cstat-no" title="statement not covered" > optimizedPrompt,</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > console.log(chalk.green("\n✅ repomirror initialized successfully!"));</span>
<span class="cstat-no" title="statement not covered" > console.log(chalk.cyan("\nNext steps:"));</span>
<span class="cstat-no" title="statement not covered" > console.log(</span>
<span class="cstat-no" title="statement not covered" > chalk.white(</span>
<span class="cstat-no" title="statement not covered" > "• Run `npx repomirror sync` - this will run the sync.sh script once",</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > console.log(</span>
<span class="cstat-no" title="statement not covered" > chalk.white(</span>
<span class="cstat-no" title="statement not covered" > "• Run `npx repomirror sync-forever` - this will run the ralph.sh script, working forever to implement all the changes",</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail("Failed to generate transformation prompt");</span>
<span class="cstat-no" title="statement not covered" > console.error(</span>
<span class="cstat-no" title="statement not covered" > chalk.red(</span>
<span class="cstat-no" title="statement not covered" > `Error: ${error instanceof Error ? error.message : String(error)}`,</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >async function performPreflightChecks(targetRepo: string): Promise<void> {</span>
<span class="cstat-no" title="statement not covered" > const spinner = ora("Performing preflight checks...").start();</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > // Check if target directory exists</span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > await fs.access(targetRepo);</span>
<span class="cstat-no" title="statement not covered" > } catch {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(`Target directory ${targetRepo} does not exist`);</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Check if target directory is a git repo</span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > await execa("git", ["rev-parse", "--git-dir"], { cwd: targetRepo });</span>
<span class="cstat-no" title="statement not covered" > } catch {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(`Target directory ${targetRepo} is not a git repository`);</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Check if target directory has at least one upstream</span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > const { stdout } = await execa("git", ["remote", "-v"], {</span>
<span class="cstat-no" title="statement not covered" > cwd: targetRepo,</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" > if (!stdout.trim()) {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(</span>
<span class="cstat-no" title="statement not covered" > `Target directory ${targetRepo} has no git remotes configured`,</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > } catch {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(`Failed to check git remotes in ${targetRepo}`);</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Check if Claude Code is configured</span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > const { stdout } = await execa("claude", ["-p", "say hi"]);</span>
<span class="cstat-no" title="statement not covered" > if (!stdout.toLowerCase().includes("hi")) {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail("Claude Code test failed - response doesn't contain 'hi'");</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > } catch {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(</span>
<span class="cstat-no" title="statement not covered" > "Claude Code is not properly configured. Please run `claude` to set up your profile",</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > spinner.succeed("All preflight checks passed");</span>
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
<span class="cstat-no" title="statement not covered" > spinner.fail(</span>
<span class="cstat-no" title="statement not covered" > `Preflight check failed: ${error instanceof Error ? error.message : String(error)}`,</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >async function generateTransformationPrompt(</span>
<span class="cstat-no" title="statement not covered" > sourceRepo: string,</span>
<span class="cstat-no" title="statement not covered" > targetRepo: string,</span>
<span class="cstat-no" title="statement not covered" > transformationInstructions: string,</span>
<span class="cstat-no" title="statement not covered" >): Promise<string> {</span>
<span class="cstat-no" title="statement not covered" > const metaPrompt = `your task is to generate an optimized prompt for repo transformation. The prompt should match the format of the examples below.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" ><example 1></span>
<span class="cstat-no" title="statement not covered" >Your job is to port [SOURCE PATH] monorepo (for react) to [TARGET PATH] (for vue) and maintain the repository.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >You have access to the current [SOURCE PATH] repositorty as well as the [TARGET PATH] repository.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >Make a commit and push your changes after every single file edit.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >Use the [TARGET_PATH]/agent/ directory as a scratchpad for your work. Store long term plans and todo lists there.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >The original project was mostly tested by manually running the code. When porting, you will need to write end to end and unit tests for the project. But make sure to spend most of your time on the actual porting, not on the testing. A good heuristic is to spend 80% of your time on the actual porting, and 20% on the testing.</span>
<span class="cstat-no" title="statement not covered" ></example 1></span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" ><example 2></span>
<span class="cstat-no" title="statement not covered" >Your job is to port browser-use monorepo (Python) to browser-use-ts (Typescript) and maintain the repository.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >You have access to the current [SOURCE PATH] repositorty as well as the target [TARGET_PATH] repository.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >Make a commit and push your changes after every single file edit.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >Use the [TARGET PATH]/agent/ directory as a scratchpad for your work. Store long term plans and todo lists there.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >The original project was mostly tested by manually running the code. When porting, you will need to write end to end and unit tests for the project. But make sure to spend most of your time on the actual porting, not on the testing. A good heuristic is to spend 80% of your time on the actual porting, and 20% on the testing.</span>
<span class="cstat-no" title="statement not covered" ></example 2></span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >The users instructions for transformation are:</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" ><user instructions></span>
<span class="cstat-no" title="statement not covered" >${transformationInstructions}</span>
<span class="cstat-no" title="statement not covered" ></user instructions></span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >Your Job:</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >When you are ready, respond with EXACTLY the prompt matching the example, tailored for following the users' instructions and nothing else.</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >You should follow the format EXACTLY, filling in information based on what you learn from a CURSORY exploration of the source repo (this directory). Ensure you ONLY use the read tools (Read, Search, Grep, LS, Glob, etc) to explore the repo. You only need enough sense to build a good prompt, so dont use subagents.`;</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > let result = "";</span>
<span class="cstat-no" title="statement not covered" > for await (const message of query({</span>
<span class="cstat-no" title="statement not covered" > prompt: metaPrompt,</span>
<span class="cstat-no" title="statement not covered" > })) {</span>
<span class="cstat-no" title="statement not covered" > if (message.type === "result" && !message.is_error) {</span>
<span class="cstat-no" title="statement not covered" > result = (message as any).result || "";</span>
<span class="cstat-no" title="statement not covered" > break;</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > if (!result) {</span>
<span class="cstat-no" title="statement not covered" > throw new Error("Failed to generate transformation prompt");</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Replace placeholders with actual paths</span>
<span class="cstat-no" title="statement not covered" > return result</span>
<span class="cstat-no" title="statement not covered" > .replace(/\[SOURCE PATH\]/g, sourceRepo)</span>
<span class="cstat-no" title="statement not covered" > .replace(/\[TARGET PATH\]/g, targetRepo)</span>
<span class="cstat-no" title="statement not covered" > .replace(/\[TARGET_PATH\]/g, targetRepo);</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >async function createRepoMirrorFiles(</span>
<span class="cstat-no" title="statement not covered" > sourceRepo: string,</span>
<span class="cstat-no" title="statement not covered" > targetRepo: string,</span>
<span class="cstat-no" title="statement not covered" > optimizedPrompt: string,</span>
<span class="cstat-no" title="statement not covered" >): Promise<void> {</span>
<span class="cstat-no" title="statement not covered" > const repoMirrorDir = join(process.cwd(), ".repomirror");</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create .repomirror directory</span>
<span class="cstat-no" title="statement not covered" > await fs.mkdir(repoMirrorDir, { recursive: true });</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create prompt.md</span>
<span class="cstat-no" title="statement not covered" > await fs.writeFile(join(repoMirrorDir, "prompt.md"), optimizedPrompt);</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create sync.sh</span>
<span class="cstat-no" title="statement not covered" > const syncScript = `#!/bin/bash</span>
<span class="cstat-no" title="statement not covered" >cat .repomirror/prompt.md | \\</span>
<span class="cstat-no" title="statement not covered" > claude -p --output-format=stream-json --verbose --dangerously-skip-permissions --add-dir ${targetRepo} | \\</span>
<span class="cstat-no" title="statement not covered" > tee -a .repomirror/claude_output.jsonl | \\</span>
<span class="cstat-no" title="statement not covered" > npx repomirror visualize --debug;`;</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > await fs.writeFile(join(repoMirrorDir, "sync.sh"), syncScript, {</span>
<span class="cstat-no" title="statement not covered" > mode: 0o755,</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create ralph.sh</span>
<span class="cstat-no" title="statement not covered" > const ralphScript = `#!/bin/bash</span>
<span class="cstat-no" title="statement not covered" >while :; do</span>
<span class="cstat-no" title="statement not covered" > ./.repomirror/sync.sh</span>
<span class="cstat-no" title="statement not covered" > echo -e "===SLEEP===\\n===SLEEP===\\n"; echo 'looping';</span>
<span class="cstat-no" title="statement not covered" > sleep 10;</span>
<span class="cstat-no" title="statement not covered" >done`;</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > await fs.writeFile(join(repoMirrorDir, "ralph.sh"), ralphScript, {</span>
<span class="cstat-no" title="statement not covered" > mode: 0o755,</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > // Create .gitignore</span>
<span class="cstat-no" title="statement not covered" > await fs.writeFile(</span>
<span class="cstat-no" title="statement not covered" > join(repoMirrorDir, ".gitignore"),</span>
<span class="cstat-no" title="statement not covered" > "claude_output.jsonl\n",</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" >}</span>
</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-08-23T07:39:41.860Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html>
================================================
FILE: coverage/src/commands/sync-forever.ts.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/commands/sync-forever.ts</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/commands</a> sync-forever.ts</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/41</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/41</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a>
<a name='L4'></a><a href='#L4'>4</a>
<a name='L5'></a><a href='#L5'>5</a>
<a name='L6'></a><a href='#L6'>6</a>
<a name='L7'></a><a href='#L7'>7</a>
<a name='L8'></a><a href='#L8'>8</a>
<a name='L9'></a><a href='#L9'>9</a>
<a name='L10'></a><a href='#L10'>10</a>
<a name='L11'></a><a href='#L11'>11</a>
<a name='L12'></a><a href='#L12'>12</a>
<a name='L13'></a><a href='#L13'>13</a>
<a name='L14'></a><a href='#L14'>14</a>
<a name='L15'></a><a href='#L15'>15</a>
<a name='L16'></a><a href='#L16'>16</a>
<a name='L17'></a><a href='#L17'>17</a>
<a name='L18'></a><a href='#L18'>18</a>
<a name='L19'></a><a href='#L19'>19</a>
<a name='L20'></a><a href='#L20'>20</a>
<a name='L21'></a><a href='#L21'>21</a>
<a name='L22'></a><a href='#L22'>22</a>
<a name='L23'></a><a href='#L23'>23</a>
<a name='L24'></a><a href='#L24'>24</a>
<a name='L25'></a><a href='#L25'>25</a>
<a name='L26'></a><a href='#L26'>26</a>
<a name='L27'></a><a href='#L27'>27</a>
<a name='L28'></a><a href='#L28'>28</a>
<a name='L29'></a><a href='#L29'>29</a>
<a name='L30'></a><a href='#L30'>30</a>
<a name='L31'></a><a href='#L31'>31</a>
<a name='L32'></a><a href='#L32'>32</a>
<a name='L33'></a><a href='#L33'>33</a>
<a name='L34'></a><a href='#L34'>34</a>
<a name='L35'></a><a href='#L35'>35</a>
<a name='L36'></a><a href='#L36'>36</a>
<a name='L37'></a><a href='#L37'>37</a>
<a name='L38'></a><a href='#L38'>38</a>
<a name='L39'></a><a href='#L39'>39</a>
<a name='L40'></a><a href='#L40'>40</a>
<a name='L41'></a><a href='#L41'>41</a>
<a name='L42'></a><a href='#L42'>42</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { execa } from "execa";</span></span></span>
<span class="cstat-no" title="statement not covered" >import chalk from "chalk";</span>
<span class="cstat-no" title="statement not covered" >import { join } from "path";</span>
<span class="cstat-no" title="statement not covered" >import { promises as fs } from "fs";</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >export async function syncForever(): Promise<void> {</span>
<span class="cstat-no" title="statement not covered" > const ralphScript = join(process.cwd(), ".repomirror", "ralph.sh");</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > // Check if ralph.sh exists</span>
<span class="cstat-no" title="statement not covered" > await fs.access(ralphScript);</span>
<span class="cstat-no" title="statement not covered" > } catch {</span>
<span class="cstat-no" title="statement not covered" > console.error(</span>
<span class="cstat-no" title="statement not covered" > chalk.red(</span>
<span class="cstat-no" title="statement not covered" > "Error: .repomirror/ralph.sh not found. Run 'npx repomirror init' first.",</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > console.log(chalk.cyan("Running ralph.sh (continuous sync)..."));</span>
<span class="cstat-no" title="statement not covered" > console.log(chalk.yellow("Press Ctrl+C to stop"));</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > await execa("bash", [ralphScript], {</span>
<span class="cstat-no" title="statement not covered" > stdio: "inherit",</span>
<span class="cstat-no" title="statement not covered" > cwd: process.cwd(),</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
<span class="cstat-no" title="statement not covered" > if (error instanceof Error && (error as any).signal === "SIGINT") {</span>
<span class="cstat-no" title="statement not covered" > console.log(chalk.yellow("\nStopped by user"));</span>
<span class="cstat-no" title="statement not covered" > } else {</span>
<span class="cstat-no" title="statement not covered" > console.error(</span>
<span class="cstat-no" title="statement not covered" > chalk.red(</span>
<span class="cstat-no" title="statement not covered" > `Sync forever failed: ${error instanceof Error ? error.message : String(error)}`,</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > );</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" >}</span>
</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-08-23T07:39:41.860Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html>
================================================
FILE: coverage/src/commands/sync-one.ts.html
================================================
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/commands/sync-one.ts</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/commands</a> sync-one.ts</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/6</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/1</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/6</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a>
<a name='L4'></a><a href='#L4'>4</a>
<a name='L5'></a><a href='#L5'>5</a>
<a name='L6'></a><a href='#L6'>6</a>
<a name='L7'></a><a href='#L7'>7</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { sync } from "./sync";</span></span></span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >// sync-one is just an alias for sync</span>
<span class="cstat-no" title="statement not covered" >export async function syncOne(): Promise<void> {</span>
<span class="cstat-no" title="statement not covered" > await sync();</span>
<span class="cstat-no" title="statement not covered" >}</span>
</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
gitextract_fi4hehdq/ ├── .eslintrc.js ├── .github/ │ └── workflows/ │ └── ci.yml ├── .gitignore ├── .repomirror/ │ ├── .gitignore │ ├── prompt.md │ ├── ralph.sh │ └── sync.sh ├── @IMPLEMENTATION_PLAN.md ├── README.md ├── VALIDATION_PLAN.md ├── assets/ │ ├── better-use.webm │ └── repomirror.webm ├── coverage/ │ ├── base.css │ ├── block-navigation.js │ ├── coverage-final.json │ ├── index.html │ ├── prettify.css │ ├── prettify.js │ ├── sorter.js │ └── src/ │ ├── cli.ts.html │ ├── commands/ │ │ ├── index.html │ │ ├── init.ts.html │ │ ├── sync-forever.ts.html │ │ ├── sync-one.ts.html │ │ ├── sync.ts.html │ │ └── visualize.ts.html │ └── index.html ├── docs/ │ └── remote-repo-design.md ├── hack/ │ ├── ralph-validate.sh │ ├── ralph.sh │ └── visualize.ts ├── package.json ├── prompt-validate.md ├── prompt.md ├── prompts/ │ ├── ai-sdk-python.md │ ├── assistant-ui-vue.md │ ├── better-use.md │ ├── open-convex.md │ ├── open-dedalus.md │ └── repomirror.md ├── repomirror.md ├── repomirror.yaml ├── specs/ │ ├── devtooling.md │ ├── github_actions.md │ └── repomirror.md ├── specs_deprecated_ignore/ │ ├── github_actions.md │ ├── remote_sync.md │ └── sync_check ├── src/ │ ├── cli.ts │ ├── commands/ │ │ ├── dispatch-sync.ts │ │ ├── github-actions.ts │ │ ├── init.ts │ │ ├── pull.ts │ │ ├── push.ts │ │ ├── remote.ts │ │ ├── setup-github-pr-sync.ts │ │ ├── sync-forever.ts │ │ ├── sync-one.ts │ │ ├── sync.ts │ │ └── visualize.ts │ └── templates/ │ ├── gitignore.template │ ├── ralph.sh.template │ └── sync.sh.template ├── test-resolve.js ├── tests/ │ ├── README.md │ ├── basic.test.ts │ ├── commands/ │ │ ├── dispatch-sync.test.ts │ │ ├── github-actions.test.ts │ │ ├── init.test.ts │ │ ├── pull.test.ts │ │ ├── push.test.ts │ │ ├── setup-github-pr-sync.test.ts │ │ ├── simple.test.ts │ │ ├── sync-forever.test.ts │ │ ├── sync-one.test.ts │ │ ├── sync.test.ts │ │ └── visualize.test.ts │ ├── helpers/ │ │ ├── fixtures.ts │ │ ├── index.ts │ │ └── test-utils.ts │ └── setup.ts ├── tsconfig.json └── vitest.config.ts
SYMBOL INDEX (117 symbols across 16 files)
FILE: coverage/block-navigation.js
function toggleClass (line 24) | function toggleClass(index) {
function makeCurrent (line 31) | function makeCurrent(index) {
function goToPrevious (line 41) | function goToPrevious() {
function goToNext (line 52) | function goToNext() {
FILE: coverage/prettify.js
function k (line 2) | function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V...
function a (line 2) | function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];v...
function B (line 2) | function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T....
function o (line 2) | function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){...
function g (line 2) | function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];...
function i (line 2) | function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\...
function Q (line 2) | function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac...
function D (line 2) | function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;...
function c (line 2) | function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnPrope...
function q (line 2) | function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default...
function d (line 2) | function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.so...
function y (line 2) | function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U...
function b (line 2) | function b(ad){function Y(af){return document.getElementsByTagName(af)}v...
FILE: coverage/sorter.js
function getTable (line 11) | function getTable() {
function getTableHeader (line 15) | function getTableHeader() {
function getTableBody (line 19) | function getTableBody() {
function getNthColumn (line 23) | function getNthColumn(n) {
function onFilterInput (line 27) | function onFilterInput() {
function addSearchBox (line 59) | function addSearchBox() {
function loadColumns (line 67) | function loadColumns() {
function loadRowData (line 92) | function loadRowData(tableRow) {
function loadData (line 111) | function loadData() {
function sortByIndex (line 120) | function sortByIndex(index, desc) {
function removeSortIndicators (line 151) | function removeSortIndicators() {
function addSortIndicators (line 159) | function addSortIndicators() {
function enableUI (line 165) | function enableUI() {
FILE: hack/visualize.ts
function getTypeColor (line 17) | function getTypeColor(type: string): string {
function _formatHeader (line 38) | function _formatHeader(json: any, lineNumber: number): string {
function _colorizeJson (line 64) | function _colorizeJson(obj: any, indent = 0, path: string[] = []): string {
function formatTodoList (line 138) | function formatTodoList(todos: any[]): string {
function formatConcise (line 188) | function formatConcise(json: any): string {
function processStream (line 325) | async function processStream() {
function displayToolCallWithResult (line 428) | function displayToolCallWithResult(
FILE: src/commands/dispatch-sync.ts
type DispatchSyncOptions (line 8) | interface DispatchSyncOptions {
function workflowExists (line 13) | async function workflowExists(): Promise<boolean> {
function getRepoInfo (line 23) | async function getRepoInfo(): Promise<{ owner: string; repo: string } | ...
function checkGhCliInstalled (line 43) | async function checkGhCliInstalled(): Promise<boolean> {
function dispatchWorkflow (line 52) | async function dispatchWorkflow(owner: string, repo: string, quiet: bool...
function dispatchSync (line 103) | async function dispatchSync(options: DispatchSyncOptions = {}): Promise<...
FILE: src/commands/github-actions.ts
type GitHubActionsOptions (line 7) | interface GitHubActionsOptions {
constant DEFAULT_WORKFLOW (line 13) | const DEFAULT_WORKFLOW = `name: RepoMirror Sync
function githubActions (line 85) | async function githubActions(options?: GitHubActionsOptions): Promise<vo...
FILE: src/commands/init.ts
type InitOptions (line 10) | interface InitOptions {
type RemoteConfig (line 16) | interface RemoteConfig {
type RepoMirrorConfig (line 22) | interface RepoMirrorConfig {
function loadExistingConfig (line 41) | async function loadExistingConfig(sourceRepo?: string): Promise<Partial<...
function saveConfig (line 55) | async function saveConfig(config: RepoMirrorConfig, sourceRepo?: string)...
function init (line 67) | async function init(cliOptions?: Partial<InitOptions>): Promise<void> {
function performPreflightChecks (line 192) | async function performPreflightChecks(targetRepo: string): Promise<void> {
function generateTransformationPrompt (line 312) | async function generateTransformationPrompt(
function createRepoMirrorFiles (line 455) | async function createRepoMirrorFiles(
function getTemplateDir (line 496) | async function getTemplateDir(): Promise<string> {
FILE: src/commands/pull.ts
type RemoteConfig (line 8) | interface RemoteConfig {
type RepoMirrorConfig (line 14) | interface RepoMirrorConfig {
type PullOptions (line 33) | interface PullOptions {
function loadConfig (line 39) | async function loadConfig(): Promise<RepoMirrorConfig | null> {
function checkSourceRepoStatus (line 49) | async function checkSourceRepoStatus(sourceRepo: string): Promise<{
function getRemoteChangesSummary (line 97) | async function getRemoteChangesSummary(
function pullSourceChanges (line 151) | async function pullSourceChanges(
function triggerSync (line 225) | async function triggerSync(syncAfter: boolean): Promise<void> {
function performPull (line 294) | async function performPull(
function pull (line 421) | async function pull(options: PullOptions = {}): Promise<void> {
FILE: src/commands/push.ts
type RemoteConfig (line 8) | interface RemoteConfig {
type RepoMirrorConfig (line 14) | interface RepoMirrorConfig {
type PushOptions (line 33) | interface PushOptions {
function loadConfig (line 40) | async function loadConfig(): Promise<RepoMirrorConfig | null> {
function getGitStatus (line 50) | async function getGitStatus(targetRepo: string): Promise<{
function getSourceCommitHash (line 101) | async function getSourceCommitHash(sourceRepo: string): Promise<string |...
function generateCommitMessage (line 112) | async function generateCommitMessage(
function stageAndCommitChanges (line 151) | async function stageAndCommitChanges(
function pushToRemote (line 172) | async function pushToRemote(
function performPush (line 248) | async function performPush(
function push (line 381) | async function push(options: PushOptions = {}): Promise<void> {
FILE: src/commands/remote.ts
type RemoteConfig (line 8) | interface RemoteConfig {
type RepoMirrorConfig (line 14) | interface RepoMirrorConfig {
function loadConfig (line 33) | async function loadConfig(): Promise<RepoMirrorConfig | null> {
function saveConfig (line 43) | async function saveConfig(config: RepoMirrorConfig): Promise<void> {
function validateRemoteUrl (line 49) | async function validateRemoteUrl(url: string): Promise<boolean> {
function remoteAdd (line 64) | async function remoteAdd(
function remoteList (line 162) | async function remoteList(): Promise<void> {
function remoteRemove (line 215) | async function remoteRemove(name: string): Promise<void> {
function remote (line 260) | async function remote(action: string, ...args: string[]): Promise<void> {
FILE: src/commands/setup-github-pr-sync.ts
type SetupGithubPrSyncOptions (line 8) | interface SetupGithubPrSyncOptions {
type RemoteConfig (line 14) | interface RemoteConfig {
type RepoMirrorConfig (line 20) | interface RepoMirrorConfig {
constant DEFAULT_WORKFLOW (line 43) | const DEFAULT_WORKFLOW = `name: RepoMirror PR Sync
function loadExistingConfig (line 118) | async function loadExistingConfig(): Promise<Partial<RepoMirrorConfig> |...
function saveConfig (line 128) | async function saveConfig(config: RepoMirrorConfig): Promise<void> {
function workflowExists (line 134) | async function workflowExists(): Promise<boolean> {
function setupGithubPrSync (line 144) | async function setupGithubPrSync(options?: SetupGithubPrSyncOptions): Pr...
FILE: src/commands/sync-forever.ts
function syncForever (line 7) | async function syncForever(options?: { autoPush?: boolean }): Promise<vo...
FILE: src/commands/sync-one.ts
function syncOne (line 4) | async function syncOne(options?: { autoPush?: boolean }): Promise<void> {
FILE: src/commands/sync.ts
type RemoteConfig (line 8) | interface RemoteConfig {
type RepoMirrorConfig (line 14) | interface RepoMirrorConfig {
function loadConfig (line 33) | async function loadConfig(): Promise<RepoMirrorConfig | null> {
function performAutoPush (line 43) | async function performAutoPush(config: RepoMirrorConfig, cliAutoPush: bo...
function sync (line 83) | async function sync(options?: { autoPush?: boolean }): Promise<void> {
FILE: src/commands/visualize.ts
function getTypeColor (line 15) | function getTypeColor(type: string): string {
type Todo (line 36) | interface Todo {
function formatTodoList (line 42) | function formatTodoList(todos: Todo[]): string {
function formatConcise (line 96) | function formatConcise(json: any): string {
function displayToolCallWithResult (line 243) | function displayToolCallWithResult(
function visualize (line 298) | async function visualize(
FILE: tests/helpers/test-utils.ts
function createTempDir (line 13) | async function createTempDir(prefix: string = "repomirror-test-"): Promi...
function cleanupTempDir (line 22) | async function cleanupTempDir(path: string): Promise<void> {
function createMockGitRepo (line 34) | async function createMockGitRepo(repoPath: string, withRemote: boolean =...
function mockConsole (line 57) | function mockConsole() {
function mockProcess (line 76) | function mockProcess(shouldThrowOnExit: boolean = true) {
function createMockFileStructure (line 95) | async function createMockFileStructure(
function delay (line 117) | function delay(ms: number): Promise<void> {
function mockInquirer (line 124) | function mockInquirer(responses: Record<string, any>) {
function mockOra (line 133) | function mockOra() {
function mockExeca (line 147) | function mockExeca(responses: Record<string, { stdout?: string; stderr?:...
Condensed preview — 83 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (731K chars).
[
{
"path": ".eslintrc.js",
"chars": 353,
"preview": "module.exports = {\n parser: '@typescript-eslint/parser',\n plugins: ['@typescript-eslint'],\n extends: [\n 'eslint:re"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1776,
"preview": "name: CI\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n test:\n runs-on: ubuntu-l"
},
{
"path": ".gitignore",
"chars": 53,
"preview": "dist/\nclaude_output.jsonl\ndraft.md\nimages/\n*-draft.md"
},
{
"path": ".repomirror/.gitignore",
"chars": 20,
"preview": "claude_output.jsonl\n"
},
{
"path": ".repomirror/prompt.md",
"chars": 709,
"preview": "Your job is to port repomirror (TypeScript) to repomirror-py (Python) and maintain the repository.\n\nYou have access to t"
},
{
"path": ".repomirror/ralph.sh",
"chars": 120,
"preview": "#!/bin/bash\nwhile :; do\n ./.repomirror/sync.sh\n echo -e \"===SLEEP===\\n===SLEEP===\\n\"; echo 'looping';\n sleep 10;\ndone"
},
{
"path": ".repomirror/sync.sh",
"chars": 253,
"preview": "#!/bin/bash\ncat .repomirror/prompt.md | \\\n claude -p --output-format=stream-json --verbose --dangerously-skip-per"
},
{
"path": "@IMPLEMENTATION_PLAN.md",
"chars": 8583,
"preview": "# RepoMirror Implementation Plan\n\n## PRIORITY -1: finish rename ✅\n- [x] change simonsays to repomirror everywhere, files"
},
{
"path": "README.md",
"chars": 1092,
"preview": "# repomirror\n\nA tool to perform transformations on code repositories with AI. Inspired by [@ghuntley](https://github.com"
},
{
"path": "VALIDATION_PLAN.md",
"chars": 749,
"preview": "✅ validate init: [COMPLETED]\n\n- create a temp dir for source repo and add a \"hello.ts\" file in it ✅\n- create a temp dir "
},
{
"path": "coverage/base.css",
"chars": 5394,
"preview": "body, html {\n margin:0; padding: 0;\n height: 100%;\n}\nbody {\n font-family: Helvetica Neue, Helvetica, Arial;\n fon"
},
{
"path": "coverage/block-navigation.js",
"chars": 2655,
"preview": "/* eslint-disable */\nvar jumpToCode = (function init() {\n // Classes of code we would like to highlight in the file v"
},
{
"path": "coverage/coverage-final.json",
"chars": 64611,
"preview": "{\"/Users/dex/go/src/github.com/dexhorthy/repomirror/src/cli.ts\": {\"path\":\"/Users/dex/go/src/github.com/dexhorthy/repomir"
},
{
"path": "coverage/index.html",
"chars": 4951,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for All files</title>\n <meta charset=\"utf-8"
},
{
"path": "coverage/prettify.css",
"chars": 676,
"preview": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,"
},
{
"path": "coverage/prettify.js",
"chars": 17590,
"preview": "/* eslint-disable */\nwindow.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=[\"break,continue,do,else,for,if,return,whi"
},
{
"path": "coverage/sorter.js",
"chars": 6731,
"preview": "/* eslint-disable */\nvar addSorting = (function() {\n 'use strict';\n var cols,\n currentSort = {\n "
},
{
"path": "coverage/src/cli.ts.html",
"chars": 9981,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/cli.ts</title>\n <meta charset=\"utf-"
},
{
"path": "coverage/src/commands/index.html",
"chars": 6954,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands</title>\n <meta charset=\"ut"
},
{
"path": "coverage/src/commands/init.ts.html",
"chars": 49741,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands/init.ts</title>\n <meta cha"
},
{
"path": "coverage/src/commands/sync-forever.ts.html",
"chars": 10397,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands/sync-forever.ts</title>\n <"
},
{
"path": "coverage/src/commands/sync-one.ts.html",
"chars": 4271,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands/sync-one.ts</title>\n <meta"
},
{
"path": "coverage/src/commands/sync.ts.html",
"chars": 9741,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands/sync.ts</title>\n <meta cha"
},
{
"path": "coverage/src/commands/visualize.ts.html",
"chars": 79593,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src/commands/visualize.ts</title>\n <met"
},
{
"path": "coverage/src/index.html",
"chars": 4348,
"preview": "\n<!doctype html>\n<html lang=\"en\">\n\n<head>\n <title>Code coverage report for src</title>\n <meta charset=\"utf-8\" />\n "
},
{
"path": "docs/remote-repo-design.md",
"chars": 10774,
"preview": "# Remote Repository Support Design\n\n## Overview\n\nThis document outlines the design for adding remote repository push/pul"
},
{
"path": "hack/ralph-validate.sh",
"chars": 2048,
"preview": "#!/bin/bash\n\necho \"Testing repomirror init command validation\"\necho \"==========================================\"\n\n# Crea"
},
{
"path": "hack/ralph.sh",
"chars": 277,
"preview": "while :; do\n cat prompt.md | \\\n claude -p --output-format=stream-json --verbose --dangerously-skip-permissions"
},
{
"path": "hack/visualize.ts",
"chars": 16457,
"preview": "#!/usr/bin/env bun\n\nimport { createInterface } from 'node:readline';\n\nconst colors = {\n reset: '\\x1b[0m',\n bright: '\\x"
},
{
"path": "package.json",
"chars": 1335,
"preview": "{\n \"name\": \"repomirror\",\n \"version\": \"0.3.0\",\n \"description\": \"Sync and transform repositories using AI agents\",\n \"m"
},
{
"path": "prompt-validate.md",
"chars": 464,
"preview": "0a. read everything in specs/\n0b. review the files in src/\n\n1. pick the SINGLE highest priority item from VALIDATION_PLA"
},
{
"path": "prompt.md",
"chars": 465,
"preview": "0a. read everything in specs/\n0b. review the files in src/\n\n1. pick the SINGLE highest priority item from @IMPLEMENTATIO"
},
{
"path": "prompts/ai-sdk-python.md",
"chars": 684,
"preview": "Your job is to port ai-sdk monorepo (for typescript) to ai-sdk-python (for python) and maintain the repository.\n\nYou hav"
},
{
"path": "prompts/assistant-ui-vue.md",
"chars": 737,
"preview": "Your job is to port assistant-ui-react monorepo (for react) to assistant-ui-vue (for vue) and maintain the repository.\n\n"
},
{
"path": "prompts/better-use.md",
"chars": 1026,
"preview": "Your job is to port browser-use monorepo (Python) to browser-use-ts (better-use, Typescript) and maintain the repository"
},
{
"path": "prompts/open-convex.md",
"chars": 498,
"preview": "read convex-11ms-full.txt IN ITS ENTIRETY - read every line, chunking if necessary\n0a. familiarize your self with the co"
},
{
"path": "prompts/open-dedalus.md",
"chars": 431,
"preview": "Your job is to implement open-dedalus based on the dedalus.llms.txt file.\n\nYou have access to the current dedalus.llms.t"
},
{
"path": "prompts/repomirror.md",
"chars": 465,
"preview": "0a. read everything in specs/\n0b. review the files in src/\n\n1. pick the SINGLE highest priority item from @IMPLEMENTATIO"
},
{
"path": "repomirror.md",
"chars": 9411,
"preview": "## We Put a Coding Agent in a While Loop and It Shipped 6 Repos Overnight\n\nThis weekend at the YC Agents hackathon, we a"
},
{
"path": "repomirror.yaml",
"chars": 104,
"preview": "sourceRepo: ./\ntargetRepo: /tmp/test-target2\ntransformationInstructions: transform typescript to python\n"
},
{
"path": "specs/devtooling.md",
"chars": 130,
"preview": "developer workflow:\n\npublish to npm package repomirror\n\nunit tests in github actions: just recent node, no need for matr"
},
{
"path": "specs/github_actions.md",
"chars": 1563,
"preview": "## PR Sync\n\n```\nnpx repomirror setup-github-pr-sync\n```\n\n```\nI'll help you set up a github actions workflow that will ru"
},
{
"path": "specs/repomirror.md",
"chars": 6451,
"preview": "run repomirror init\n\none line use prompt that asks \n\n```\nI'll help you maintain a transformed copy of this repo:\n\nSource"
},
{
"path": "specs_deprecated_ignore/github_actions.md",
"chars": 1563,
"preview": "## PR Sync\n\n```\nnpx repomirror setup-github-pr-sync\n```\n\n```\nI'll help you set up a github actions workflow that will ru"
},
{
"path": "specs_deprecated_ignore/remote_sync.md",
"chars": 1,
"preview": "x"
},
{
"path": "specs_deprecated_ignore/sync_check",
"chars": 282,
"preview": "sync-check serves as a terminator for the sync-one loop.\n\nfor example,\n\n```\nwhile ! sync-check TARGET; do\n sync-one T"
},
{
"path": "src/cli.ts",
"chars": 8042,
"preview": "#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { init } from \"./commands/init\";\nimport { syncOne } from"
},
{
"path": "src/commands/dispatch-sync.ts",
"chars": 5500,
"preview": "import { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimpo"
},
{
"path": "src/commands/github-actions.ts",
"chars": 6092,
"preview": "import { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimpo"
},
{
"path": "src/commands/init.ts",
"chars": 18222,
"preview": "import { promises as fs } from \"fs\";\nimport path, { join, basename, resolve } from \"path\";\nimport inquirer from \"inquire"
},
{
"path": "src/commands/pull.ts",
"chars": 12065,
"preview": "import { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimpo"
},
{
"path": "src/commands/push.ts",
"chars": 11380,
"preview": "import { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimpo"
},
{
"path": "src/commands/remote.ts",
"chars": 8061,
"preview": "import { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimpo"
},
{
"path": "src/commands/setup-github-pr-sync.ts",
"chars": 8334,
"preview": "import { promises as fs } from \"fs\";\nimport { join, resolve } from \"path\";\nimport inquirer from \"inquirer\";\nimport chalk"
},
{
"path": "src/commands/sync-forever.ts",
"chars": 4326,
"preview": "import { execa } from \"execa\";\nimport chalk from \"chalk\";\nimport { join } from \"path\";\nimport { promises as fs } from \"f"
},
{
"path": "src/commands/sync-one.ts",
"chars": 228,
"preview": "import { sync } from \"./sync\";\n\n// sync-one is just an alias for sync\nexport async function syncOne(options?: { autoPush"
},
{
"path": "src/commands/sync.ts",
"chars": 3933,
"preview": "import { execa } from \"execa\";\nimport chalk from \"chalk\";\nimport { join } from \"path\";\nimport { promises as fs } from \"f"
},
{
"path": "src/commands/visualize.ts",
"chars": 14058,
"preview": "import { createInterface } from \"node:readline\";\n\nconst colors = {\n reset: \"\\x1b[0m\",\n bright: \"\\x1b[1m\",\n dim: \"\\x1b"
},
{
"path": "src/templates/gitignore.template",
"chars": 19,
"preview": "claude_output.jsonl"
},
{
"path": "src/templates/ralph.sh.template",
"chars": 120,
"preview": "#!/bin/bash\nwhile :; do\n ./.repomirror/sync.sh\n echo -e \"===SLEEP===\\n===SLEEP===\\n\"; echo 'looping';\n sleep 10;\ndone"
},
{
"path": "src/templates/sync.sh.template",
"chars": 249,
"preview": "#!/bin/bash\ncat .repomirror/prompt.md | \\\n claude -p --output-format=stream-json --verbose --dangerously-skip-per"
},
{
"path": "test-resolve.js",
"chars": 478,
"preview": "const path = require('path');\n\n// Mock process.cwd()\nconst mockCwd = '/tmp/test-dir';\nprocess.cwd = () => mockCwd;\n\ncons"
},
{
"path": "tests/README.md",
"chars": 2933,
"preview": "# Test Suite for repomirror\n\nThis directory contains the test suite for the repomirror project using Vitest.\n\n## Structu"
},
{
"path": "tests/basic.test.ts",
"chars": 525,
"preview": "import { describe, it, expect } from \"vitest\";\n\ndescribe(\"basic test\", () => {\n it(\"should pass a simple test\", () => {"
},
{
"path": "tests/commands/dispatch-sync.test.ts",
"chars": 9854,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/github-actions.test.ts",
"chars": 10562,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/init.test.ts",
"chars": 51927,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/pull.test.ts",
"chars": 6605,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/push.test.ts",
"chars": 9086,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/setup-github-pr-sync.test.ts",
"chars": 7173,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/simple.test.ts",
"chars": 1168,
"preview": "import { describe, it, expect, vi } from \"vitest\";\nimport { createTempDir, cleanupTempDir, mockConsole } from \"../helper"
},
{
"path": "tests/commands/sync-forever.test.ts",
"chars": 32271,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/sync-one.test.ts",
"chars": 20245,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/sync.test.ts",
"chars": 28368,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { "
},
{
"path": "tests/commands/visualize.test.ts",
"chars": 44134,
"preview": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { createInterface } from \"node:readline"
},
{
"path": "tests/helpers/fixtures.ts",
"chars": 2607,
"preview": "/**\n * Test fixtures and mock data for repomirror tests\n */\n\nexport const mockRepoConfig = {\n sourceRepo: \"./\",\n targe"
},
{
"path": "tests/helpers/index.ts",
"chars": 102,
"preview": "/**\n * Test helpers and utilities index\n */\n\nexport * from \"./test-utils\";\nexport * from \"./fixtures\";"
},
{
"path": "tests/helpers/test-utils.ts",
"chars": 4626,
"preview": "import { vi } from \"vitest\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"path\";\nimport { tmpdir } from \"o"
},
{
"path": "tests/setup.ts",
"chars": 262,
"preview": "/**\n * Global test setup for vitest\n */\n\nimport { beforeEach, afterEach } from \"vitest\";\n\n// Global test setup\nbeforeEac"
},
{
"path": "tsconfig.json",
"chars": 492,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"commonjs\",\n \"lib\": [\"ES2022\"],\n \"outDir\": \"./dist\""
},
{
"path": "vitest.config.ts",
"chars": 1467,
"preview": "import { defineConfig } from \"vitest/config\";\nimport { resolve } from \"path\";\n\nexport default defineConfig({\n test: {\n "
}
]
// ... and 2 more files (download for full content)
About this extraction
This page contains the full source code of the repomirrorhq/repomirror GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 83 files (666.0 KB), approximately 185.1k tokens, and a symbol index with 117 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.