@jhizzard/termdeck 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -161,7 +161,7 @@ Honest limits, stated upfront so the skeptic has nothing to chase:
161
161
  - **Not a replacement for reading docs.** It's the shortest path to a memory you already wrote. If the memory isn't there, the feature does nothing.
162
162
  - **Not fully local by default.** Tier 2+ reaches out to Supabase for storage and OpenAI for embeddings. Tier 1 is fully local. A fully-local Tier 2 (local Postgres + local embeddings) is on the roadmap.
163
163
  - **Not free forever.** Tier 2+ pays OpenAI fractions of a cent per memory for embeddings. Self-hosted embeddings via Ollama are on the roadmap.
164
- - **Not proven at scale.** v0.3.5, validated against 3,527 memories in one developer's production store. First full Rumen kickstart on 2026-04-15 processed 111 sessions into 111 insights in one pass. No multi-user data yet. Bug reports and issues welcome.
164
+ - **Not proven at scale.** v0.3.7, validated against 3,527 memories in one developer's production store. First full Rumen kickstart on 2026-04-15 processed 111 sessions into 111 insights in one pass. No multi-user data yet. Bug reports and issues welcome.
165
165
 
166
166
  ---
167
167
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jhizzard/termdeck",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Browser-based terminal multiplexer with metadata overlays, panel flashback memory recall, and AI-aware session management",
5
5
  "bin": {
6
6
  "termdeck": "./packages/cli/src/index.js"
@@ -106,10 +106,22 @@ const port = config.port || 3000;
106
106
  const host = config.host || '127.0.0.1';
107
107
  const url = `http://${host}:${port}`;
108
108
 
109
+ // Bind guardrail: refuse non-loopback without auth token
110
+ const LOOPBACK = new Set(['127.0.0.1', 'localhost', '::1']);
111
+ if (!LOOPBACK.has(host)) {
112
+ const authToken = config.auth?.token || process.env.TERMDECK_AUTH_TOKEN;
113
+ if (!authToken) {
114
+ console.error('[security] Refusing to bind to ' + host + ' without auth.token set.');
115
+ console.error('[security] Set auth.token in ~/.termdeck/config.yaml or TERMDECK_AUTH_TOKEN env var.');
116
+ console.error('[security] To bind locally only, set host: 127.0.0.1 in config.yaml');
117
+ process.exit(1);
118
+ }
119
+ }
120
+
109
121
  server.listen(port, host, async () => {
110
122
  console.log(`
111
123
  ╔══════════════════════════════════════╗
112
- ║ TermDeck v0.2.0
124
+ ║ TermDeck v${require(path.join(__dirname, '..', '..', '..', 'package.json')).version.padEnd(14)}
113
125
  ╠══════════════════════════════════════╣
114
126
  ║ ${url.padEnd(34)} ║
115
127
  ║ ║
@@ -2565,9 +2565,13 @@
2565
2565
  const TIER23_CHECKS = new Set(['mnestra_reachable', 'mnestra_has_memories', 'rumen_recent', 'database_url']);
2566
2566
 
2567
2567
  function filterChecksByTier(checks) {
2568
- const hasDb = checks.some(c => c.name === 'database_url' && c.passed);
2569
- if (hasDb) return checks; // full stack configured show everything
2570
- // No DATABASE_URL: only show Tier 1 checks
2568
+ // Show Tier 2/3 checks if DATABASE_URL was ATTEMPTED (exists in results),
2569
+ // regardless of pass/fail. Only hide higher-tier checks when the user
2570
+ // has no DATABASE_URL at all (detail says "not set").
2571
+ const dbCheck = checks.find(c => c.name === 'database_url');
2572
+ const dbConfigured = dbCheck && !/not set/i.test(dbCheck.detail || '');
2573
+ if (dbConfigured) return checks; // full stack configured — show everything
2574
+ // No DATABASE_URL configured: only show Tier 1 checks
2571
2575
  return checks.filter(c => TIER1_CHECKS.has(c.name));
2572
2576
  }
2573
2577