{"_id":"@a-company/portal-viewer","name":"@a-company/portal-viewer","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@a-company/portal-viewer","version":"0.1.0","description":"Portal Viewer - Real-time visualization and testing dashboard for portal activations","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"vite","dev:server":"tsx watch src/index.ts","build":"tsc && vite build && tsup src/index.ts --format esm --dts --outDir dist/server","build:ui":"tsc && vite build","build:server":"tsup src/index.ts --format esm --dts --outDir dist/server","preview":"vite preview","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"dependencies":{"@a-company/portal-core":"*","react":"^18.2.0","react-dom":"^18.2.0","zustand":"^4.4.7","ws":"^8.16.0","sirv":"^3.0.1","js-yaml":"^4.1.0"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^20.10.0","@types/react":"^18.2.45","@types/react-dom":"^18.2.18","@types/ws":"^8.5.10","@vitejs/plugin-react":"^4.2.1","tsup":"^8.0.1","tsx":"^4.7.0","typescript":"^5.3.3","vite":"^7.3.1"},"publishConfig":{"access":"public"},"author":{"name":"ascend42"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ascend42/a-paradigm.git","directory":"packages/portal/viewer"},"bugs":{"url":"https://github.com/ascend42/a-paradigm/issues"},"homepage":"https://github.com/ascend42/a-paradigm#readme","keywords":["paradigm","portal","viewer","visualization","testing","react"],"engines":{"node":">=18.0.0"},"gitHead":"c0c9c22fa3d85db8b3f314c5c8edef44a5d3eb25","_id":"@a-company/portal-viewer@0.1.0","_nodeVersion":"24.12.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-T0WeyIvGFEmMBhwR0mM/k9RJDw8Npz8b/PG0lO53LCsR0j8dbU3hx5Nvo3/ivuUcVCS98re8kmVaCgB7o9uSzw==","shasum":"f09e22e9874080be1e563a0a37443770b6dc1a8a","tarball":"https://registry.npmjs.org/@a-company/portal-viewer/-/portal-viewer-0.1.0.tgz","fileCount":11,"unpackedSize":670315,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDRU5Hefy3gvQkNcqeL5I+6bFTUmajLWPCnBx/BqhZt0gIgGXBNbS85Dl5AXfIeDUoOjQ9rsEY0NbeV1610GMkuvpk="}]},"_npmUser":{"name":"ascend42","email":"ascend@a-company.org"},"directories":{},"maintainers":[{"name":"ascend42","email":"ascend@a-company.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/portal-viewer_0.1.0_1771872386749_0.7240124265468337"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-23T18:46:26.593Z","0.1.0":"2026-02-23T18:46:26.913Z","modified":"2026-02-23T18:46:27.211Z"},"maintainers":[{"name":"ascend42","email":"ascend@a-company.org"}],"description":"Portal Viewer - Real-time visualization and testing dashboard for portal activations","homepage":"https://github.com/ascend42/a-paradigm#readme","keywords":["paradigm","portal","viewer","visualization","testing","react"],"repository":{"type":"git","url":"git+https://github.com/ascend42/a-paradigm.git","directory":"packages/portal/viewer"},"author":{"name":"ascend42"},"bugs":{"url":"https://github.com/ascend42/a-paradigm/issues"},"license":"MIT","readme":"# @a-company/portal-viewer\n\nReal-time visualization and testing dashboard for portal (gate) activations.\n\n## Features\n\n- **Live Constellation View**: Gates displayed as interconnected stars that \"light up\" when activated\n- **Event Timeline**: Scrolling log of all portal events with filtering\n- **Testing Checklist**: Auto-ticking checklist for QA verification\n- **Session Recording**: Capture test sessions for reporting\n- **Flow Visualization**: Track progress through multi-gate flows\n- **Webhook Reporting**: Send session reports to Slack, Discord, email, or custom endpoints\n\n## Installation\n\n```bash\nnpm install @a-company/portal-viewer\n```\n\n## Usage\n\n### As a CLI (via paradigm)\n\n```bash\n# Start the portal viewer\nparadigm portal watch\n```\n\n### Programmatically\n\n```typescript\nimport { ViewerServer } from '@a-company/portal-viewer';\n\nconst server = new ViewerServer({\n  port: 42196,     // WebSocket port for SDK connections (marathon + 1)\n  uiPort: 42195,   // HTTP port for UI (marathon: 42.195km)\n  configPath: './portal.yaml',\n});\n\nawait server.start();\n```\n\n## Architecture\n\n```\n┌─────────────────────┐      ┌─────────────────────┐\n│   Your App (:8080)  │      │ Portal Viewer       │\n│                     │      │                     │\n│  ┌───────────────┐  │      │  ┌───────────────┐  │\n│  │  Portal SDK   │──┼─────►│  │ WebSocket     │  │\n│  │               │  │      │  │ Server(:42196)│  │\n│  │ portal.check()│  │      │  └───────┬───────┘  │\n│  └───────────────┘  │      │          │          │\n│                     │      │  ┌───────▼───────┐  │\n└─────────────────────┘      │  │ Constellation │  │\n                             │  │ UI (:42195)   │  │\n                             │  └───────────────┘  │\n                             └─────────────────────┘\n```\n\n## Ports\n\n| Port | Purpose |\n|------|---------|\n| 42195 | HTTP server for UI (marathon: 42.195km) |\n| 42196 | WebSocket server for SDK connections |\n\n## Views\n\n### Constellation View\n\nA visual star map where each portal is a node. When portal events occur:\n\n- **Checking**: Yellow pulse animation\n- **Passed**: Green glow effect\n- **Failed**: Red glow effect\n\n### Checklist View\n\nList of all gates with checkboxes that auto-tick when gates are hit:\n\n- ⬜ Unchecked - gate not yet visited\n- ✅ Passed - gate was allowed\n- ❌ Failed - gate was denied\n- ⚠️ Mixed - gate had both passes and failures\n\n### Timeline View\n\nScrolling log of all events with:\n\n- Gate name\n- Decision (allow/deny)\n- Reason\n- Entity ID\n- Timestamp\n- Duration\n\n## Session Recording\n\nStart a session to capture all events:\n\n```\n1. Click \"Start Recording\"\n2. Run your tests\n3. Click \"End Session\"\n4. Export or send to webhooks\n```\n\n## Webhook Integration\n\nConfigure webhooks in `.paradigm/portal-webhooks.yaml`:\n\n```yaml\nwebhooks:\n  slack-qa:\n    type: slack\n    url: https://hooks.slack.com/services/xxx/yyy/zzz\n    enabled: true\n    triggers: [session-end, gate-fail]\n```\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Start dev server (UI only)\nnpm run dev\n\n# Start WebSocket server\nnpm run dev:server\n\n# Build everything\nnpm run build\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-a6a73fa87cc8c5fa0e3d67a9b0ac3df1"}