npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@opentask/taskin-task-manager

v1.0.9

Published

Task lifecycle management for Taskin

Readme

Task Manager — Metrics Interface

This document describes the new IMetricsManager interface introduced to separate metrics/analytics responsibilities from the core ITaskProvider.

Motivation

Previously the ITaskProvider exposed optional methods for statistics (getUserStats, getTeamStats, getTaskStats). To keep provider implementations focused on storage concerns and to provide a clearer contract for analytics, we introduced IMetricsManager as a dedicated interface for metrics/analytics.

Interface

The interface lives at packages/task-manager/src/metrics.types.ts:

  • getUserMetrics(userId: string, query?: StatsQuery): Promise<UserStats>
  • getTeamMetrics(teamId: string, query?: StatsQuery): Promise<TeamStats>
  • getTaskMetrics(taskId: string, query?: StatsQuery): Promise<TaskStats>

Types are re-used from @opentask/taskin-types (UserStats, TeamStats, TaskStats, StatsQuery).

Migration guide

  1. Remove any optional stats methods from provider implementations. The methods were removed from ITaskProvider to avoid mixing concerns.
  2. Implement an adapter/service that implements IMetricsManager and register it alongside your provider (for example, provide it to the application bootstrap or dependency injection container).
  3. If you need to preserve backward compatibility, expose a thin adapter that translates the old provider-level methods to the new IMetricsManager API until consumers migrate.

Example

Minimal example of an in-process metrics adapter (pseudo-code):

import type { IMetricsManager } from '@opentask/taskin-task-manager';
import type { UserStats, StatsQuery } from '@opentask/taskin-types';

export class FsMetricsAdapter implements IMetricsManager {
  constructor(private fsProvider: any) {}

  async getUserMetrics(userId: string, query?: StatsQuery): Promise<UserStats> {
    // Aggregate tasks from fsProvider and compute simple metrics
    const tasks = await this.fsProvider.getAllTasks();
    const userTasks = tasks.filter((t) => t.assignee?.id === userId);
    return { userId, taskCount: userTasks.length } as any;
  }

  // getTeamMetrics / getTaskMetrics implementations...
}

Compatibility and Versioning

  • This change is a breaking API change for providers: ITaskProvider no longer contains stats methods. New providers should implement IMetricsManager instead.
  • For consumers, prefer depending on IMetricsManager for analytics features. If a provider exposes metrics through a different channel, adapt it to IMetricsManager.

Tests

There is a small unit test validating the contract at packages/task-manager/src/provider-stats.test.ts (now checks the IMetricsManager shape).


If you want, I can:

  • Add an example adapter implementation in file-system-task-provider.
  • Add documentation to the repo-level docs/ folder and cross-links.

Tell me which and I’ll implement it.

@taskin/task-manager

This package is responsible for the core logic of managing tasks.