Runtime-agnostic HTTP service implementations for tasker-sequential. Run on Deno, Node.js, or Bun.
This package contains HTTP service implementations that wrap external APIs and core task execution:
- deno-executor - Task execution runtime with automatic suspend/resume
- simple-stack-processor - Processes pending service calls in FIFO order
- task-executor - Task submission and lifecycle management
- gapi - Google Workspace APIs (Gmail, Admin, etc.)
- keystore - Secure credential storage
- supabase - Database operation proxy
- openai - OpenAI API integration
- websearch - Web search integration
- admin-debug - Debugging and administrative tools
npm install
# or
bun installnpm start
# Discovers and starts all available services automaticallynpm start -- --services deno-executor,gapi,keystorenpm start -- --port 3100
# Services: 3100, 3101, 3102, ...npm start -- --deno
npm start -- --node
npm start -- --bunEach service implements a standard HTTP handler interface:
export async function handler(req: Request): Promise<Response> {
// Handle incoming request
// Call other services via HTTP
// Return result
}Services communicate via HTTP (no direct imports):
task-executor → deno-executor → gapi/keystore/supabase
↓ ↓
HTTP HTTP chains
The CLI automatically:
- Scans
services/directory - Finds folders with
index.tsorindex.js - Assigns sequential ports starting from base port
- Creates
.service-registry.jsonwith service endpoints
Registry example:
{
"timestamp": "2025-10-27T15:00:00Z",
"services": [
{"name": "deno-executor", "port": 3100, "url": "http://localhost:3100"},
{"name": "gapi", "port": 3101, "url": "http://localhost:3101"}
]
}- Create
services/{name}/directory - Add
index.tswith HTTP handler:
import { serve } from "https://deno.land/[email protected]/http/server.ts";
export async function handler(req: Request): Promise<Response> {
return new Response(JSON.stringify({success: true}), {
headers: {"Content-Type": "application/json"}
});
}
if (import.meta.main) {
const port = parseInt(Deno.env.get("PORT") || "3000");
serve(handler, { port });
}- CLI automatically discovers and starts it
npm startServices can be wrapped as Supabase edge functions:
# Copy service code to Supabase functions directory
cp -r services/deno-executor supabase/functions/
supabase functions deploy deno-executorFROM denoland/deno:latest
COPY . /app
WORKDIR /app
CMD ["deno", "run", "--allow-all", "services/deno-executor/index.ts"]Each service as separate deployment with environment-based port assignment.
Services respect standard environment variables:
PORT=3100 # HTTP port (overridden by CLI)
DEBUG=true # Enable debug logging
SERVICE_NAME=deno-executor # Service identifier
SUPABASE_URL=... # Supabase project URL
OPENAI_API_KEY=... # OpenAI API key
GAPI_KEY=... # Google API credentialsdeno run --allow-all --allow-env --watch services/deno-executor/index.tsnpm start -- --debugcurl http://localhost:3100/healthAll services expose:
- GET /health - Health check
- POST /call - Service call (varies by service)
Services are used by tasker-sequential core:
- Task submitted to task-executor
- task-executor calls deno-executor to run task code
- deno-executor calls wrapped services via HTTP
- Results returned and task continues
- CLAUDE.md - Detailed architecture and configuration
- tasker-sequential docs - Core task execution
- tasker-ecosystem - Main ecosystem
- Deno 1.40+ (for Deno runtime)
- Node.js 18+ (for Node runtime)
- Bun 1.0+ (for Bun runtime)
MIT
Issues and PRs welcome on GitHub: https://github.com/AnEntrypoint/tasker-wrapped-services