.agents/skills/open-portal/SKILL.md
# Skill: open-portal ## When to Use This Skill Use this skill when: - Writing code that imports from `@op/platform` or `@op-plugin/*` - Implementing new plugins for the open-portal platform - Writing integration tests that instantiate the platform - Debugging plugin lifecycle issues (preStart, onInit, onReady, onDestroy) - Understanding how the OpenPort platform is bootstrapped and configured - Configuring DI services via the ServiceRegistry - Adding plugin configuration schemas Keywords: op
npx skillsauth add em-jones/staccato-toolkit .agents/skills/open-portalInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when:
@op/platform or @op-plugin/*Keywords: open-portal, openport, platform bootstrap, plugin registration, OpenPortApp, BasePlugin, ServerServices, init(), registerPlugin, platform instantiation, integration test setup
import { init } from "@op/platform";
const openPort = await init(); // OTel + config + ConfigService
openPort.registerPlugin(import("@op-plugin/db-bun"));
openPort.registerPlugin(import("@op-plugin/events-s2"));
await openPort.start(); // preStart → onInit → onReady
// ... use services ...
await openPort.stop(); // onDestroy (reverse order)
import type { BasePlugin } from "@op/platform/plugins/types";
export default {
name: "my-plugin",
type: "custom",
serverConfig: MyConfigSchema, // Standard Schema (Valibot)
clientConfig: MyClientSchema,
serverServices: [{ name: "myService", factory: (services, config) => createMyService(config) }],
serverLifecycle: {
async preStart(services, config) {
/* migrations, infra setup */
},
async onInit(services, config) {
/* register services */
},
async onReady(services, config) {
/* seed data, register routes */
},
async onDestroy(services) {
/* cleanup */
},
},
} satisfies BasePlugin;
declare module "@op/platform/services" {
interface ServiceRegistry {
myService: MyService;
}
}
import { init } from "@op/platform";
import { mkdtemp, rm } from "node:fs/promises";
const tmpDir = await mkdtemp("/tmp/openport-test-");
// Write minimal openport.yaml to tmpDir if needed
const app = await init({ configDir: tmpDir, env: "test" });
app.registerPlugin(import("@op-plugin/my-plugin"));
await app.start();
const service = app.services.get("myService");
// ... test assertions ...
await app.stop();
await rm(tmpDir, { recursive: true, force: true });
tools
<!--VITE PLUS START--> # Using Vite+, the Unified Toolchain for the Web This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called `vp`. Vite+ is distinct from Vite, but it invokes Vite through `vp dev` and `vp build`. ## Vite+ Workflow `vp` is a global binary that handles the full development lifecycle. Run `vp help` to pr
development
Guide for building performant data tables. Uses tanstack-table for table logic (sorting, filtering, pagination) and tanstack-virtual for rendering large datasets efficiently.
development
Expert guidance for building observable, expressive, and fault-tolerant TypeScript applications using the effect-ts/effect ecosystem. Covers Effect<A, E, R> type, error management, dependency injection via Layers, observability (logging, metrics, tracing), concurrency with Fibers, retry/scheduling, Schema validation, Streams, and Sinks.
tools
Complete E2E (end-to-end) and integration testing skill for TypeScript/NestJS projects using Jest, real infrastructure via Docker, and GWT pattern. ALWAYS use this skill when user needs to: **SETUP** - Initialize or configure E2E testing infrastructure: - Set up E2E testing for a new project - Configure docker-compose for testing (Kafka, PostgreSQL, MongoDB, Redis) - Create jest-e2e.config.ts or E2E Jest configuration - Set up test helpers for database, Kafka, or Redis - Configure .env.e2e environment variables - Create test/e2e directory structure **WRITE** - Create or add E2E/integration tests: - Write, create, add, or generate e2e tests or integration tests - Test API endpoints, workflows, or complete features end-to-end - Test with real databases, message brokers, or external services - Test Kafka consumers/producers, event-driven workflows - Working on any file ending in .e2e-spec.ts or in test/e2e/ directory - Use GWT (Given-When-Then) pattern for tests **REVIEW** - Audit or evaluate E2E tests: - Review existing E2E tests for quality - Check test isolation and cleanup patterns - Audit GWT pattern compliance - Evaluate assertion quality and specificity - Check for anti-patterns (multiple WHEN actions, conditional assertions) **RUN** - Execute or analyze E2E test results: - Run E2E tests - Start/stop Docker infrastructure for testing - Analyze E2E test results - Verify Docker services are healthy - Interpret test output and failures **DEBUG** - Fix failing or flaky E2E tests: - Fix failing E2E tests - Debug flaky tests or test isolation issues - Troubleshoot connection errors (database, Kafka, Redis) - Fix timeout issues or async operation failures - Diagnose race conditions or state leakage - Debug Kafka message consumption issues **OPTIMIZE** - Improve E2E test performance: - Speed up slow E2E tests - Optimize Docker infrastructure startup - Replace fixed waits with smart polling - Reduce beforeEach cleanup time - Improve test parallelization where safe Keywords: e2e, end-to-end, integration test, e2e-spec.ts, test/e2e, Jest, supertest, NestJS, Kafka, Redpanda, PostgreSQL, MongoDB, Redis, docker-compose, GWT pattern, Given-When-Then, real infrastructure, test isolation, flaky test, MSW, nock, waitForMessages, fix e2e, debug e2e, run e2e, review e2e, optimize e2e, setup e2e