tandem-editor 0.6.2 → 0.7.0

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.
@@ -31,6 +31,27 @@
31
31
  --tandem-accent-fg-strong: #4338ca;
32
32
  --tandem-author-user: #3b82f6;
33
33
  --tandem-author-claude: #ea8a1e;
34
+ --tandem-success: #16a34a;
35
+ --tandem-success-fg: #ffffff;
36
+ --tandem-success-fg-strong: #166534;
37
+ --tandem-success-bg: color-mix(in srgb, var(--tandem-success) 10%, var(--tandem-surface));
38
+ --tandem-success-border: color-mix(in srgb, var(--tandem-success) 40%, var(--tandem-border));
39
+ --tandem-warning: #d97706;
40
+ --tandem-warning-fg: #ffffff;
41
+ --tandem-warning-fg-strong: #92400e;
42
+ --tandem-warning-bg: color-mix(in srgb, var(--tandem-warning) 10%, var(--tandem-surface));
43
+ --tandem-warning-border: color-mix(in srgb, var(--tandem-warning) 40%, var(--tandem-border));
44
+ --tandem-error: #dc2626;
45
+ --tandem-error-fg: #ffffff;
46
+ --tandem-error-fg-strong: #991b1b;
47
+ --tandem-error-bg: color-mix(in srgb, var(--tandem-error) 10%, var(--tandem-surface));
48
+ --tandem-error-border: color-mix(in srgb, var(--tandem-error) 40%, var(--tandem-border));
49
+ --tandem-info: #2563eb;
50
+ --tandem-info-fg: #ffffff;
51
+ --tandem-info-fg-strong: #1e40af;
52
+ --tandem-info-bg: #eff6ff;
53
+ --tandem-info-border: #bfdbfe;
54
+ --tandem-accent-border: #c7d2fe;
34
55
  }
35
56
 
36
57
  [data-theme="dark"] {
@@ -48,6 +69,27 @@
48
69
  --tandem-accent-fg-strong: #c7d2fe;
49
70
  --tandem-author-user: #60a5fa;
50
71
  --tandem-author-claude: #fbbf24;
72
+ --tandem-success: #22c55e;
73
+ --tandem-success-fg: #0f172a;
74
+ --tandem-success-fg-strong: #bbf7d0;
75
+ --tandem-success-bg: #052e16;
76
+ --tandem-success-border: #14532d;
77
+ --tandem-warning: #fbbf24;
78
+ --tandem-warning-fg: #0f172a;
79
+ --tandem-warning-fg-strong: #fde68a;
80
+ --tandem-warning-bg: #451a03;
81
+ --tandem-warning-border: #78350f;
82
+ --tandem-error: #ef4444;
83
+ --tandem-error-fg: #0f172a;
84
+ --tandem-error-fg-strong: #fca5a5;
85
+ --tandem-error-bg: #450a0a;
86
+ --tandem-error-border: #7f1d1d;
87
+ --tandem-info: #3b82f6;
88
+ --tandem-info-fg: #0f172a;
89
+ --tandem-info-fg-strong: #bfdbfe;
90
+ --tandem-info-bg: #0c4a6e;
91
+ --tandem-info-border: #0369a1;
92
+ --tandem-accent-border: #4338ca;
51
93
  }
52
94
 
53
95
  /* Windows High Contrast — let the OS drive everything. */
@@ -68,9 +110,14 @@
68
110
  --tandem-author-user: CanvasText;
69
111
  --tandem-author-claude: CanvasText;
70
112
  }
113
+
114
+ /* Held-count badge uses warning-bg only (no border) — add one so it stays visible. */
115
+ [data-testid="held-badge"] {
116
+ border: 1px solid ButtonText;
117
+ }
71
118
  }
72
119
  </style>
73
- <script type="module" crossorigin src="/assets/index-mo5ZOPfU.js"></script>
120
+ <script type="module" crossorigin src="/assets/index-B1Cd5UGT.js"></script>
74
121
  </head>
75
122
  <body>
76
123
  <div id="root"></div>
@@ -84,6 +84,27 @@ var TANDEM_MODE_DEFAULT = "tandem";
84
84
  var CHANNEL_MAX_RETRIES = 5;
85
85
  var CHANNEL_RETRY_DELAY_MS = 2e3;
86
86
 
87
+ // src/shared/cli-runtime.ts
88
+ var VALID_TOKEN_RE = /^[A-Za-z0-9_\-]{32,}$/;
89
+ var _warnedInvalidToken = false;
90
+ async function authFetch(url, init) {
91
+ const token = process.env.TANDEM_AUTH_TOKEN;
92
+ if (token !== void 0 && token.trim() !== "") {
93
+ if (VALID_TOKEN_RE.test(token.trim())) {
94
+ const headers = new Headers(init?.headers);
95
+ headers.set("Authorization", `Bearer ${token.trim()}`);
96
+ return fetch(url, { ...init, headers });
97
+ }
98
+ if (!_warnedInvalidToken) {
99
+ _warnedInvalidToken = true;
100
+ console.error(
101
+ "[tandem] authFetch: TANDEM_AUTH_TOKEN is set but invalid (must be 32+ alphanumeric chars [A-Za-z0-9_-]); sending without Authorization header"
102
+ );
103
+ }
104
+ }
105
+ return fetch(url, init);
106
+ }
107
+
87
108
  // node_modules/zod/v3/external.js
88
109
  var external_exports = {};
89
110
  __export(external_exports, {
@@ -4132,6 +4153,7 @@ var HighlightColorSchema = external_exports.enum(["yellow", "red", "green", "blu
4132
4153
  var SeveritySchema = external_exports.enum(["info", "warning", "error", "success"]);
4133
4154
  var TandemModeSchema = external_exports.enum(["solo", "tandem"]);
4134
4155
  var AuthorSchema = external_exports.enum(["user", "claude", "import"]);
4156
+ var ReplyAuthorSchema = external_exports.enum(["user", "claude"]);
4135
4157
  var AnnotationActionSchema = external_exports.enum(["accept", "dismiss"]);
4136
4158
  var ExportFormatSchema = external_exports.enum(["markdown", "json"]);
4137
4159
  var DocumentFormatSchema = external_exports.enum(["md", "txt", "html", "docx"]);
@@ -4167,7 +4189,7 @@ var STABLE_CONNECTION_MS = 6e4;
4167
4189
  var CHANNEL_RETRY_MAX_DELAY_MS = 3e4;
4168
4190
  async function fetchWithTimeout(url, init, timeoutMs) {
4169
4191
  const signal = AbortSignal.timeout(timeoutMs);
4170
- return fetch(url, { ...init, signal });
4192
+ return authFetch(url, { ...init, signal });
4171
4193
  }
4172
4194
  function describeFetchError(err, endpoint, timeoutMs) {
4173
4195
  if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError")) {
@@ -4252,7 +4274,7 @@ async function connectAndStream(lastEventId, onEventId, onStable = () => {
4252
4274
  );
4253
4275
  let res;
4254
4276
  try {
4255
- res = await fetch(`${TANDEM_URL}/api/events`, { headers, signal: connectCtrl.signal });
4277
+ res = await authFetch(`${TANDEM_URL}/api/events`, { headers, signal: connectCtrl.signal });
4256
4278
  } finally {
4257
4279
  clearTimeout(connectTimer);
4258
4280
  }