deepseek-harness/vendor/cordis
lintianle fcd9d8c391 website: fix nine review findings (generator coverage, loader facts, mode semantics)
Generator (all four structural gaps):
- harness service pages now render public properties/accessors, not just
  methods (ctx.codeRuntime.language/isolation were missing);
- the class page merges the same-named interface half, so ctx.root/baseUrl/
  events/logger/reflect/registry appear on Context (vendor root JSDoc gains
  prose alongside @experimental);
- Pick<…> heritage on a Context merge resolves to the picked class members,
  giving ctx.effect a documented signature on the Fiber page;
- {@link} tags normalize to code spans; merge sections get their own h2 so
  reflect members no longer nest under 'Static members'.

verify-website-yaml: reject the unloadable 'group:' pseudo-name (tree.import
only special-cases 'cordis:'; no builtin is registered here) and recurse into
@cordisjs/plugin-group nested entry lists instead.

Prose corrected against loader/cordis source: service.md isolation example
uses the real group plugin + group: true + the required isolate map;
config.md documents concurrent entry startup (Promise.all; order via inject)
and the real hmr defaults (root ['.'], base/ignored/debounce); events.md
fixes emit (synchronous, not parallel), bail (null/false also delegate), and
serial (stops at the first bail value).
2026-07-16 21:15:44 +08:00
..
src website: fix nine review findings (generator coverage, loader facts, mode semantics) 2026-07-16 21:15:44 +08:00
bin.js Vendor Cordis framework packages as source 2026-06-11 10:53:32 +08:00
LICENSE Vendor Cordis framework packages as source 2026-06-11 10:53:32 +08:00
package.json refactor: rename build typings dir to types 2026-06-20 00:26:02 +08:00
README.md Vendor Cordis framework packages as source 2026-06-11 10:53:32 +08:00
tsconfig.json refactor: rename build typings dir to types 2026-06-20 00:26:02 +08:00

Cordis

Cordis is a TypeScript plugin framework for applications that need explicit dependency injection, scoped services, lifecycle-managed cleanup, and optional configuration-driven loading. The core package is published as cordis; the official packages in this repository add a loader, config-file includes, HMR, console logging, timers, and project scaffolding.

Install

yarn add cordis

Cordis is ESM-first. The repository is tested on current Node releases, and the scaffolder requires Node 22 or newer.

Quick Start

import { Context, Service } from 'cordis'

declare module 'cordis' {
  interface Context {
    counter: Counter
  }

  interface Events {
    'app/ready'(message: string): void
  }
}

class Counter extends Service {
  value = 0

  constructor(ctx: Context) {
    super(ctx, 'counter')
  }

  next() {
    return ++this.value
  }
}

const greeter = Object.assign((ctx: Context) => {
  ctx.on('app/ready', (message) => {
    ctx.logger.info('%s #%d', message, ctx.counter.next())
  })
}, {
  inject: ['counter'],
})

const root = new Context()
await root.plugin(Counter)
await root.plugin(greeter)

root.emit('app/ready', 'started')
await root.fiber.dispose()

The important pieces are:

  • new Context() creates the root dependency container.
  • ctx.plugin() starts a plugin and returns a Fiber.
  • inject tells Cordis which services must exist before the plugin runs.
  • Effects, event listeners, and services are removed when their owning fiber is disposed.

Documentation

Packages

Package Purpose
cordis Core context, plugin registry, fiber lifecycle, events, services, and logger.
create-cordis Interactive project scaffolder.
@cordisjs/plugin-loader Runtime plugin tree and loader service.
@cordisjs/plugin-include YAML/JSON config-file include support for the loader.
@cordisjs/plugin-group Nested plugin groups for loader configs.
@cordisjs/plugin-hmr Hot module replacement for loader-managed plugins.
@cordisjs/plugin-logger-console Console exporter for the built-in logger.
@cordisjs/plugin-timer Disposal-aware timeout, interval, throttle, and debounce helpers.
@cordisjs/utils Shared utilities used by Cordis packages.

Development

yarn install
yarn build
yarn test
yarn lint

The monorepo uses Yakumo to build and test all packages. Most examples in the docs use public APIs from cordis; loader examples additionally use @cordisjs/plugin-loader and @cordisjs/plugin-include.