npm switchroom @0.21.20
score
0.55
med
flagged
2026-11-06 00:58
Signals fired
| signal | weight | rationale |
|---|---|---|
| content | ||
| script_count_spike | 0.5 | scripts count 31 -> 42 |
| topology | ||
| dependency_added_unknown | 0.6 | 1 new non-watchlisted dep(s): ['nostr-tools'] |
Prior profile (what it deviated from)
{
"had_install_script": false,
"maintainers": [
"mekenthompson"
],
"versions": 342
}
Evidence (package doc at flag time)
{
"dependencies_count": 14,
"dist": {
"integrity": "sha512-QzuZNqQuMRT4b4eeVQOB6iVILBOsKqfGMZ3xKRnYjEfgaJgqaTMHo7JQR1wFB8nt/2fkePhMuUTjEb2DPIgPPA==",
"tarball": "https://registry.npmjs.org/switchroom/-/switchroom-0.21.20.tgz",
"unpackedSize": 42627348
},
"dist-tags": {
"latest": "0.21.20"
},
"latest_version": "0.21.20",
"maintainers": [
{
"email": "me@kenthompson.com.au",
"name": "mekenthompson"
}
],
"num_versions": 395,
"repository": {
"type": "git",
"url": "git+https://github.com/switchroom/switchroom.git"
},
"scripts": {
"build": "node scripts/build.mjs",
"build:cli": "node scripts/build.mjs && bun build --compile --target=bun-linux-x64 --minify bin/switchroom.ts --outfile switchroom-linux-amd64",
"changelog:cut": "node scripts/cut-changelog-release.mjs",
"changelog:generate": "node scripts/gen-changelog-entry.mjs",
"dev": "bun bin/switchroom.ts",
"lint": "tsc --noEmit && node scripts/check-plugin-references.mjs && bash scripts/check-bot-api-wrapping.sh && node scripts/check-bun-test-imports.mjs && node scripts/check-test-runner-coverage.mjs && node scripts/check-bun-module-mock-scope.mjs && node scripts/check-no-pii-secrets.mjs && node scripts/check-bench-baseline-anonymised.mjs && node scripts/check-vault-test-hermeticity.mjs && node scripts/check-auth-test-hermeticity.mjs && node scripts/check-agent-state-dir-hermeticity.mjs && node scripts/check-hindsight-bank-hermeticity.mjs && node scripts/check-parked-turn-start-hermeticity.mjs && node scripts/check-no-broadcast-delivery.mjs && node scripts/check-stale-tool-descriptions.mjs && node scripts/check-mcp-instructions-budget.mjs && node scripts/check-web-subscription-honest.mjs && node scripts/check-no-unpinned-npx-playwright.mjs && node scripts/check-gateway-line-ratchet.mjs && node scripts/check-retry-flood-hooks.mjs && node scripts/check-callback-ctx-wrapping.mjs && node scripts/check-ctx-send-wrapping.mjs && node scripts/check-status-pin-single-path.mjs && node scripts/check-litellm-config-guard.mjs && node scripts/check-release-asset-names.mjs && node scripts/check-foreign-db-readonly.mjs && node scripts/check-claude-cli-lockstep.mjs && node scripts/check-changelog-entry.mjs && node scripts/check-agent-attribution-trailers.mjs && node scripts/check-hindsight-write-redaction.mjs && node scripts/check-mutation-coverage.mjs && bun scripts/check-secret-pattern-parity.ts && bun scripts/check-hostd-template-guard.ts",
"lint:agent-attribution-trailers": "node scripts/check-agent-attribution-trailers.mjs",
"lint:agent-state-dir-hermeticity": "node scripts/check-agent-state-dir-hermeticity.mjs",
"lint:auth-test-hermeticity": "node scripts/check-auth-test-hermeticity.mjs",
"lint:bench-baseline-anonymised": "node scripts/check-bench-baseline-anonymised.mjs",
"lint:bot-api-wrapping": "bash scripts/check-bot-api-wrapping.sh",
"lint:bun-module-mock-scope": "node scripts/check-bun-module-mock-scope.mjs",
"lint:bun-test-imports": "node scripts/check-bun-test-imports.mjs",
"lint:callback-ctx-wrapping": "node scripts/check-callback-ctx-wrapping.mjs",
"lint:changelog-entry": "node scripts/check-changelog-entry.mjs",
"lint:claude-cli-lockstep": "node scripts/check-claude-cli-lockstep.mjs",
"lint:ctx-send-wrapping": "node scripts/check-ctx-send-wrapping.mjs",
"lint:foreign-db-readonly": "node scripts/check-foreign-db-readonly.mjs",
"lint:gateway-line-ratchet": "node scripts/check-gateway-line-ratchet.mjs",
"lint:hindsight-bank-hermeticity": "node scripts/check-hindsight-bank-hermeticity.mjs",
"lint:hindsight-write-redaction": "node scripts/check-hindsight-write-redaction.mjs",
"lint:hostd-template-guard": "bun scripts/check-hostd-template-guard.ts",
"lint:litellm-config-guard": "node scripts/check-litellm-config-guard.mjs",
"lint:mcp-instructions-budget": "node scripts/check-mcp-instructions-budget.mjs",
"lint:mutation-coverage": "node scripts/check-mutation-coverage.mjs --all",
"lint:no-broadcast-delivery": "node scripts/check-no-broadcast-delivery.mjs",
"lint:no-pii": "node scripts/check-no-pii-secrets.mjs",
"lint:parked-turn-start-hermeticity": "node scripts/check-parked-turn-start-hermeticity.mjs",
"lint:plugin-references": "node scripts/check-plugin-references.mjs",
"lint:release-asset-contract": "node scripts/check-release-asset-names.mjs",
"lint:retry-flood-hooks": "node scripts/check-retry-flood-hooks.mjs",
"lint:secret-pattern-parity": "bun scripts/check-secret-pattern-parity.ts",
"lint:status-pin-single-path": "node scripts/check-status-pin-single-path.mjs",
"lint:test-runner-coverage": "node scripts/check-test-runner-coverage.mjs",
"lint:tsc": "tsc --noEmit",
"lint:web-subscription-honest": "node scripts/check-web-subscription-honest.mjs",
"prepublishOnly": "npm run build && npm run lint && npm test",
"pretest": "npm run build",
"test": "vitest run && bun test telegram-plugin/tests/hermes-messages-paging.test.ts telegram-plugin/tests/hermes-session-search.test.ts telegram-plugin/tests/agent-state-dir-preload.test.ts telegram-plugin/tests/hindsight-bank-preload.test.ts telegram-plugin/tests/catch-all-forwarded-history.test.ts telegram-plugin/tests/history.test.ts telegram-plugin/tests/boot-briefing-builder.test.ts telegram-plugin/tests/cross-turn-card-gate.test.ts telegram-plugin/tests/emission-authority-open-gate.test.ts telegram-plugin/tests/emission-authority-ping-gate.test.ts telegram-plugin/tests/emission-authority-card-drain-gate.test.ts telegram-plugin/tests/per-topic-current-turn.test.ts telegram-plugin/tests/history-reaper.test.ts telegram-plugin/tests/ipc-server-client.test.ts telegram-plugin/tests/ipc-server-race.test.ts telegram-plugin/tests/ipc-server-buzz-dedup.test.ts telegram-plugin/tests/ipc-server-query-pending-permission.test.ts telegram-plugin/tests/ipc-server-check-pre-approved.test.ts telegram-plugin/tests/rollout-narration-edit-socket.test.ts telegram-plugin/tests/gateway-bridge.test.ts telegram-plugin/tests/gateway-startup-mutex.test.ts telegram-plugin/tests/gateway-clean-shutdown-marker.test.ts telegram-plugin/tests/boot-card-dedupe.test.ts telegram-plugin/tests/boot-card-reason.test.ts telegram-plugin/tests/progress-update.test.ts telegram-plugin/tests/progress-fallback-cap.test.ts telegram-plugin/tests/progress-cap.test.ts telegram-plugin/tests/quota-cache.test.ts telegram-plugin/tests/unhandled-rejection-policy.test.ts telegram-plugin/tests/registry-turns.test.ts telegram-plugin/registry/subagents.test.ts telegram-plugin/registry/subagents-bugs.test.ts telegram-plugin/tests/subagent-watcher-parent-turn-key.test.ts telegram-plugin/tests/worker-origin-gap-dispatch.test.ts telegram-plugin/tests/subagent-nested-dispatch.test.ts telegram-plugin/tests/nested-worker-visibility-harness.test.ts telegram-plugin/tests/turns-writer.test.ts telegram-plugin/tests/resume-inbound-builder.test.ts telegram-plugin/registry/api-registry.test.ts telegram-plugin/registry/turns-schema.test.ts telegram-plugin/tests/idle-footer-wiring.test.ts telegram-plugin/tests/subagent-tracker-hooks.test.ts telegram-plugin/tests/gateway-update-placeholder-dispatch.test.ts telegram-plugin/tests/status-query-telemetry.test.ts telegram-plugin/tests/reaction-trigger.test.ts telegram-plugin/tests/reaction-trigger-flow.test.ts telegram-plugin/gateway/webhook-ingest-server.test.ts telegram-plugin/tests/skill-proposal-card.test.ts",
"test:bun": "bun test telegram-plugin/tests/hermes-messages-paging.test.ts telegram-plugin/tests/hermes-session-search.test.ts telegram-plugin/tests/agent-state-dir-preload.test.ts telegram-plugin/tests/hindsight-bank-preload.test.ts telegram-plugin/tests/catch-all-forwarded-history.test.ts src/vault/grants.test.ts src/vault/grants-db.test.ts src/vault/write-grants.test.ts src/vault/broker/server-grants.test.ts src/vault/broker/server-write-grants.test.ts src/vault/broker/server-scope-persist.test.ts src/vault/broker/server-tokenless-scope.test.ts src/vault/broker/server-mint-grant-passphrase-attest.test.ts src/vault/broker/server-passphrase-attest.test.ts src/vault/broker/server-mint-grant-posture-attest.test.ts src/vault/broker/server-admin-only-keys.test.ts src/vault/broker/client-token.test.ts src/vault/broker/server-unlock.test.ts src/vault/broker/auto-unlock.test.ts src/vault/broker/drift-detection.test.ts tests/vault-broker-passphrase.test.ts src/cli/vault-get-broker.test.ts src/vault/resolver-via-broker.test.ts src/vault/broker/scope.test.ts src/vault/broker/server.test.ts src/litellm/provision-apply-e2e.test.ts src/drive/disconnect.test.ts src/drive/grants.test.ts src/drive/oauth.test.ts src/drive/onboarding.test.ts src/drive/reconciler.test.ts src/drive/vault-slots.test.ts src/drive/wrapper.test.ts src/vault/approvals/kernel.test.ts src/vault/approvals/approval-origin.test.ts src/vault/approvals/self-approval-bypass.test.ts src/vault/approvals/schema-idempotent.test.ts src/vault/broker/server-approvals.test.ts telegram-plugin/tests/boot-probes.test.ts telegram-plugin/tests/boot-version-string.test.ts telegram-plugin/tests/history.test.ts telegram-plugin/tests/boot-briefing-builder.test.ts telegram-plugin/tests/cross-turn-card-gate.test.ts telegram-plugin/tests/emission-authority-open-gate.test.ts telegram-plugin/tests/emission-authority-ping-gate.test.ts telegram-plugin/tests/emission-authority-card-drain-gate.test.ts telegram-plugin/tests/per-topic-current-turn.test.ts telegram-plugin/tests/history-reaper.test.ts telegram-plugin/tests/ipc-server-client.test.ts telegram-plugin/tests/ipc-server-race.test.ts telegram-plugin/tests/ipc-server-buzz-dedup.test.ts telegram-plugin/tests/ipc-server-query-pending-permission.test.ts telegram-plugin/tests/ipc-server-check-pre-approved.test.ts telegram-plugin/tests/rollout-narration-edit-socket.test.ts telegram-plugin/tests/gateway-bridge.test.ts telegram-plugin/tests/gateway-startup-mutex.test.ts telegram-plugin/tests/gateway-clean-shutdown-marker.test.ts telegram-plugin/tests/boot-card-dedupe.test.ts telegram-plugin/tests/boot-card-reason.test.ts telegram-plugin/tests/progress-update.test.ts telegram-plugin/tests/progress-fallback-cap.test.ts telegram-plugin/tests/progress-cap.test.ts telegram-plugin/tests/quota-cache.test.ts telegram-plugin/tests/silent-reply-guard.test.ts telegram-plugin/tests/unhandled-rejection-policy.test.ts telegram-plugin/tests/registry-turns.test.ts telegram-plugin/registry/subagents.test.ts telegram-plugin/registry/subagents-bugs.test.ts telegram-plugin/tests/subagent-watcher-parent-turn-key.test.ts telegram-plugin/tests/worker-origin-gap-dispatch.test.ts telegram-plugin/tests/subagent-nested-dispatch.test.ts telegram-plugin/tests/nested-worker-visibility-harness.test.ts telegram-plugin/tests/turns-writer.test.ts telegram-plugin/tests/resume-inbound-builder.test.ts telegram-plugin/tests/subagent-tracker-hooks.test.ts telegram-plugin/tests/resolve-calling-subagent.test.ts telegram-plugin/tests/gateway-update-placeholder-dispatch.test.ts telegram-plugin/tests/status-query-telemetry.test.ts telegram-plugin/tests/reaction-trigger.test.ts telegram-plugin/tests/reaction-trigger-flow.test.ts telegram-plugin/tests/subagent-watcher-workflow-visibility.test.ts telegram-plugin/uat/load-env.test.ts telegram-plugin/uat/feed-matcher.test.ts telegram-plugin/uat/uat-driver.test.ts telegram-plugin/gateway/webhook-ingest-server.test.ts telegram-plugin/tests/skill-proposal-card.test.ts",
"test:vitest": "vitest run",
"test:watch": "vitest"
},
"signal_details": {
"dependency_added_unknown": "1 new non-watchlisted dep(s): ['nostr-tools']",
"script_count_spike": "scripts count 31 -> 42"
},
"time": {
"created": "2026-05-06T05:37:03.591Z",
"modified": "2026-08-18T20:21:22.085Z"
}
}