feat: tfcode

This commit is contained in:
Gab
2026-03-24 23:27:38 +11:00
parent 2ae12f8d6b
commit 3fe808d64c
6 changed files with 157 additions and 10 deletions

90
PROGRESS.md Normal file
View File

@@ -0,0 +1,90 @@
# tfcode Progress Summary
## Goal
Build and deploy **tfcode** - ToothFairyAI's official AI coding agent, a fork of opencode.
## Completed Tasks
1. ✅ Implemented ToothFairyAI branding (logo, colors, strings)
2. ✅ Created ToothFairyAI provider with dynamic model fetching
3. ✅ Synced tools/agents/skills from ToothFairyAI workspace
4. ✅ Filtered models to only `deploymentType: "serverless"`
5. ✅ Implemented the `/predictions` endpoint for ToothFairyAI provider
6. ✅ Added `tfcode setup` command to persist credentials
7. ✅ Fixed npm installation flow (v1.0.4)
- Binary now included in main npm package
- Postinstall script checks if binary exists before downloading
- ESM-compatible module resolution for npm fallback
- Wrapper script fixed to look for binary in correct location
## Current Status
**Working**: npm installation flow is now fully functional. Users can install via:
```bash
npm install @toothfairyai/tfcode
```
The binary is included in the main package, making installation instant without needing to download from Gitea or copy from optionalDependencies.
## Next Steps
1. Build all platform binaries (12 targets: linux/darwin/windows × arm64/x64 × baseline/musl)
2. Test on different platforms (currently only darwin-arm64 is tested)
3. Create Gitea releases for backup download mechanism
4. Consider making Gitea repo public for transparency
## Technical Details
### npm Package Structure
The published package includes:
- `bin/tfcode` - The actual binary (92MB)
- `bin/tfcode.js` - Wrapper script that spawns the binary
- `postinstall.mjs` - Installation script (checks for binary, downloads if missing, installs Python SDK)
- `package.json` - Package metadata
- `LICENSE` - MIT license
### Installation Flow
1. npm installs main package + optionalDependencies
2. npm extracts files to `node_modules/@toothfairyai/tfcode/`
3. postinstall runs:
- Checks if binary already exists (✓ for darwin-arm64)
- If not, tries to download from Gitea
- If that fails, copies from optionalDependencies
- Installs Python SDK for TF integration
4. User can run `tfcode` command
### Key Fixes in v1.0.4
1. **Postinstall script**: Fixed duplicate variable declaration (`binaryName`)
2. **Postinstall script**: Added early return if binary already exists
3. **Postinstall script**: Fixed ESM module resolution (replaced `require.resolve` with `import.meta.resolve`)
4. **Publish script**: Copy current platform binary to main package
5. **Wrapper script**: Fixed binary path (removed extra `bin/` directory)
## Testing
```bash
# Fresh installation test
rm -rf /tmp/tfcode-test && mkdir /tmp/tfcode-test
cd /tmp/tfcode-test && npm init -y
npm install @toothfairyai/tfcode
node_modules/.bin/tfcode --version # Should output: 1.0.4
```
## Version History
- **1.0.4**: Fixed npm installation flow, binary included in main package
- **1.0.3**: Initial npm publication (broken installation)
- **1.0.2**: Earlier testing versions
- **1.0.0**: Initial release
## Credentials (Testing Only)
- workspace_id: `6586b7e6-683e-4ee6-a6cf-24c19729b5ff`
- api_key: `EWZooLROIS57EVW3BKGu7Pv6LNe4D6m4gkDjukx3`
- region: `dev`