- Plugin lifecycle hook: plugins can implement
init(ctx: PluginContext)to receiveCacheServiceafter services are created but before data collection.PluginContextis exported from@dependicus/core. softDependsOnonDataSource: sources can declare optional ordering dependencies that are respected when present in the pool and silently ignored when absent. Provider sources and plugin sources now run in a single topological sort per ecosystem, so plugin sources can declare ordering relative to provider sources.ColumnContexttype in@dependicus/coreshared byCustomColumncallbacks andUsedByGroupKeyFn, carryingname,version,store, andecosystemin one object.CacheServiceis now re-exported from the top-leveldependicuspackage, so plugins and consumers no longer need to import it from@dependicus/coredirectly.getGroupingFilename()helper for building URL-safe filenames from grouping values, analogous togetDetailFilename()for dependency pages.
- Breaking:
CustomColumn.getValue,getTooltip, andgetFilterValuenow take a singleColumnContextargument instead of(name, version, store, ecosystem). - Breaking:
UsedByGroupKeyFnnow takesColumnContextinstead of(name, version, store). - Breaking:
buildIssueDescriptionandbuildGroupIssueDescriptionin both@dependicus/linearand@dependicus/github-issuesnow take a single params object (IssueDescriptionParams/GroupDescriptionParams) instead of positional arguments. - Breaking: Plugin issue spec merging no longer validates with Zod immediately.
ResolvedPlugins.getLinearIssueSpecandgetGitHubIssueSpecreturnPartial<Spec> | undefined. Validation happens in the CLI after flag injection via newvalidateLinearIssueSpec/validateGitHubIssueSpechelpers. - Breaking: Direct
config.linear.getLinearIssueSpecandconfig.github.getGitHubIssueSpecare now merged with plugin specs instead of overriding them. Config specs provide defaults; plugin specs can override scalar fields;descriptionSectionsfrom all sources are concatenated.
- Grouping detail pages (surfaces, teams) with spaces, parentheses, or other URL-unsafe characters in their names now produce sanitized filenames instead of raw values, fixing 404s on static file servers.
- The pnpm and aube providers now work on single-package repos (no
pnpm-workspace.yaml). Previously they unconditionally used-r listwhich could produce malformed output or error outside a workspace.
- aube package manager support
- New
AubeProviderin@dependicus/providers-noderunsaube list(root) andaube -r list(workspaces) and reuses aube's pnpm-compatiblepnpm-workspace.yamlfor catalog and patch metadata. Workspace-to-workspace deps that aube inlines as concrete versions are stripped by name so they don't show up as registry dependencies. - When
DEPENDICUS_ALLOW_INSTALL=1is set andnode_modules/.aubeis missing,AubeProviderrunsaube install --frozen-lockfilefirst. Symmetric to thePnpmProviderguard, so multi-provider runs still produce accurate output for both tabs even when one provider reinstalled on top of the other's tree. - Auto-detection covers the
aube/user agent and anaube-lock.yamllockfile fallback --provider aubeis accepted by the CLI alongside the existing provider names
- New
PnpmProvidernow detects whennode_modules/.pnpmis missing (because another package manager populatednode_modules) and, ifDEPENDICUS_ALLOW_INSTALL=1is set, runspnpm install --prefer-frozen-lockfilebeforepnpm -r list. Without that env var, it emits a warning and proceeds. The repo's CI workflow setsDEPENDICUS_ALLOW_INSTALL=1, so CI artifacts from non-pnpm jobs now show correct pnpm dep counts instead of empty ones. Local runs are never modified without the opt-in.- Recommended catalog YAML snippets are now idiomatic YAML
- Scoped package names (those containing
/) are wrapped in single quotes so the snippet is valid YAML - Version numbers are no longer double-quoted
- Scoped package names (those containing
Bug fixes.
First usable public release.