tf_code/PROGRESS.md
2026-03-24 23:27:38 +11:00

91 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`