{ buildNpmPackage, fetchurl, lib, mkUpdater, runCommand, }: let versionData = lib.importJSON ./hashes.json; version = versionData.version; # Create a source with the vendored package-lock.json included srcWithLock = runCommand "openspec-src-with-lock" { } '' mkdir -p $out tar -xzf ${ fetchurl { url = "https://registry.npmjs.org/@fission-ai/openspec/-/openspec-${version}.tgz"; hash = versionData.sourceHash; } } -C $out --strip-components=1 cp ${./package-lock.json} $out/package-lock.json ''; in buildNpmPackage { npmDepsFetcherVersion = 2; inherit version; pname = "openspec"; src = srcWithLock; npmDepsHash = versionData.npmDepsHash; makeCacheWritable = true; dontNpmBuild = true; postInstall = '' # disable telemetry to silence warning note export OPENSPEC_TELEMETRY=0 installShellCompletion --cmd openspec \ --bash <($out/bin/openspec completion generate bash) \ --fish <($out/bin/openspec completion generate fish) \ --zsh <($out/bin/openspec completion generate zsh) ''; passthru.category = "Workflow & Project Management"; passthru.updater = mkUpdater { kind = "npm"; purl = "pkg:npm/%40fission-ai/openspec"; }; meta = { description = "Spec-driven development for AI coding assistants"; homepage = "https://github.com/Fission-AI/OpenSpec"; changelog = "https://github.com/Fission-AI/OpenSpec/releases/tag/v${version}"; downloadPage = "https://www.npmjs.com/package/@fission-ai/openspec"; license = lib.licenses.mit; sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; mainProgram = "openspec"; }; }