tandem-editor 0.14.0 → 0.14.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tandem-editor",
3
- "version": "0.14.0",
3
+ "version": "0.14.2",
4
4
  "description": "Edit and iterate on documents with any MCP-capable AI (Claude by default). Real-time push via the channel shim.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,8 +54,9 @@
54
54
  "lint": "eslint .",
55
55
  "format": "biome format --write .",
56
56
  "doctor": "tsx scripts/doctor.mjs",
57
- "dev:tauri": "node scripts/download-node-sidecar.mjs && cargo tauri dev",
58
- "build:tauri": "cargo tauri build",
57
+ "build:reaper": "node scripts/build-reaper.mjs",
58
+ "dev:tauri": "node scripts/download-node-sidecar.mjs && node scripts/build-reaper.mjs && cargo tauri dev",
59
+ "build:tauri": "node scripts/download-node-sidecar.mjs && node scripts/build-reaper.mjs && cargo tauri build",
59
60
  "check:tokens": "tsx scripts/check-semantic-tokens.ts",
60
61
  "audit:dead-code": "knip",
61
62
  "audit:origins": "tsx scripts/audit-origins.ts",
@@ -71,17 +72,17 @@
71
72
  "lint-staged": {
72
73
  "**/*.{ts,tsx}": [
73
74
  "eslint --fix",
74
- "biome check --write"
75
+ "biome check --write --no-errors-on-unmatched"
75
76
  ],
76
77
  "src/**/*.{svelte,css,html}": [
77
- "biome check --write"
78
+ "biome check --write --no-errors-on-unmatched"
78
79
  ],
79
80
  "**/*.mjs": [
80
81
  "eslint --fix",
81
- "biome check --write"
82
+ "biome check --write --no-errors-on-unmatched"
82
83
  ],
83
84
  "**/*.json !package-lock.json": [
84
- "biome check --write"
85
+ "biome check --write --no-errors-on-unmatched"
85
86
  ],
86
87
  "src/client/**/*.{ts,tsx,svelte,css,html}": [
87
88
  "tsx scripts/check-semantic-tokens.ts"
package/sample/welcome.md CHANGED
@@ -43,7 +43,7 @@ Tandem is built for keyboard-first work:
43
43
  - **Outline panel** — navigate by heading and collapse whole sections to focus.
44
44
  - **Keyboard shortcuts** (Ctrl+Shift+,) — customize any shortcut, or press ? to see them all.
45
45
 
46
- You can connect more than one model, too: open the Models settings to add providers and pick a default, or use the first-run picker when you start out.
46
+ Want to connect your AI? Open Settings AI Assistant and use the setup wizard one click connects Claude Code, no API key needed. (Support for additional model providers is on the way.)
47
47
 
48
48
  ## Sample Content
49
49
 
@@ -1,3 +0,0 @@
1
- import{p as Ie,c as Se,o as Te,s as i,a as n,i as w,g as e,b as c,d as Ee,e as D,m as Fe,u as L,f as Le,t as p,h,T as Oe,j as Re,k as H,l as J,n as _,q as x,r as y,v as l,w as $e,x as De,C as Ne,y as Q,z as Ae,A as We,B as Me,D as X,E as Ue,F as je,G as Pe,H as ze}from"./index-KMogjPDL.js";var Be=l('<div class="cs-help-text svelte-kvy574" data-testid="cowork-settings-loading">Loading Cowork status...</div>'),Ke=l(`<div class="cs-info-banner svelte-kvy574" data-testid="cowork-settings-unsupported">Cowork integration is available on Windows in v0.8.0. macOS/Linux support tracked in #316 /
2
- #317.</div>`),Ve=l('<div class="cs-info-banner svelte-kvy574" data-testid="cowork-settings-undetected"> <a class="cs-link svelte-kvy574" target="_blank" rel="noreferrer">Learn more</a></div>'),qe=l(`<div class="cs-warning-banner svelte-kvy574" data-testid="cowork-enable-confirm" role="dialog"><div class="cs-confirm-heading svelte-kvy574">Confirm: Enable Cowork</div> <div class="cs-confirm-body svelte-kvy574">Windows will prompt for admin permission to modify firewall rules. This is expected.
3
- Tandem will write plugin entries to every detected Cowork workspace.</div> <div class="cs-actions svelte-kvy574"><button class="cs-btn cs-btn--primary svelte-kvy574" data-testid="cowork-enable-confirm-btn" type="button">Enable</button> <button class="cs-btn cs-btn--ghost svelte-kvy574" data-testid="cowork-enable-cancel-btn" type="button">Cancel</button></div></div>`),Ge=l('<div class="cs-vethernet svelte-kvy574" data-testid="cowork-vethernet-cidr">Detected Cowork environment: <code> </code></div>'),He=l('<div><label data-testid="cowork-lan-ip-override"><input class="cs-accent-cbx svelte-kvy574" data-testid="cowork-lan-ip-override-checkbox" type="checkbox"/> <span>Use LAN IP instead of host.docker.internal</span></label> <div class="cs-help svelte-kvy574"> </div></div>'),Je=l('<div class="cs-help-text svelte-kvy574">No Cowork workspaces detected yet.</div>'),Qe=l('<a class="cs-report-link svelte-kvy574" href="mailto:maintainers@tandem.invalid?subject=Cowork%20schema%20drift">Report</a>'),Xe=l('<div class="cs-workspace-row svelte-kvy574"><span class="cs-workspace-id svelte-kvy574"> </span> <span class="cs-workspace-label svelte-kvy574"> </span> <!></div>'),Ye=l('<div class="cs-workspace-table svelte-kvy574" data-testid="cowork-workspace-table"></div>'),Ze=l('<label data-testid="cowork-toggle"><input class="cs-accent-cbx svelte-kvy574" data-testid="cowork-toggle-checkbox" type="checkbox"/> <span>Enable Cowork integration</span></label> <div class="cs-help svelte-kvy574"> </div> <!> <!> <!> <div><div class="cs-label svelte-kvy574"> </div> <!> <button class="cs-btn cs-btn--ghost cs-rescan-btn svelte-kvy574" data-testid="cowork-rescan-btn" type="button">Re-scan workspaces</button></div>',1),ea=l('<div class="cs-error-banner svelte-kvy574" data-testid="cowork-settings-error" role="alert"> </div>'),aa=l('<div class="cs-error-banner svelte-kvy574" data-testid="cowork-inline-toast" role="alert"> </div>'),ta=l('<div class="cs-root svelte-kvy574" data-testid="cowork-settings"><div class="cs-label svelte-kvy574">Cowork Integration</div> <!> <!> <!></div>');function ra(Y,Z){Ie(Z,!0);const ee={success:{bg:"var(--tandem-success-bg)",fg:"var(--tandem-success-fg-strong)",border:"var(--tandem-success-border)"},warning:{bg:"var(--tandem-warning-bg)",fg:"var(--tandem-warning-fg-strong)",border:"var(--tandem-warning-border)"},error:{bg:"var(--tandem-error-bg)",fg:"var(--tandem-error-fg-strong)",border:"var(--tandem-error-border)"}},g=Se(()=>!0),{refetch:C}=g;let I=D(null),S=D(null),b=D(!1);const N=Fe(Ne);Te(()=>N.cancel());const O=L(()=>Le(g.status));async function T(a,t){y(b,!0);try{const r=await $e();await a(r),y(I,null)}catch(r){const f=r instanceof Error?r.message:String(r),E=De(f);y(I,`${t}: ${E}`)}finally{y(b,!1)}}async function ae(){await T(async a=>{await Q(a,!0),await C(),y(S,null)},"Failed to enable Cowork")}async function te(){await T(async a=>{await Q(a,!1),await C()},"Failed to disable Cowork")}function se(){N.schedule(()=>{T(async a=>{await Ae(a),await C()},"Re-scan failed")})}async function re(a){await T(async t=>{await Pe(t,a),await C()},"Failed to update LAN-IP override")}function oe(a){const t=X(a),r=ee[ze(t)];return`display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 4px 6px; border: 1px solid ${r.border}; background: ${r.bg}; color: ${r.fg}; border-radius: var(--tandem-r-2); font-size: 11px;`}var A=ta(),W=i(n(A),2);{var ne=a=>{var t=Be();c(a,t)},ie=a=>{var t=Ke();c(a,t)},ce=a=>{var t=Ve(),r=n(t);r.nodeValue="Cowork not detected on this system. ";var f=i(r);p(()=>h(f,"href",`${Oe}#cowork`)),c(a,t)},le=a=>{const t=L(()=>g.status);var r=Ze(),f=Re(r);let E;var R=n(f),U=i(f,2),be=n(U),j=i(U,2);{var pe=s=>{var v=qe(),d=i(n(v),4),o=n(d),k=i(o,2);p(()=>{o.disabled=e(b),k.disabled=e(b)}),x("click",o,()=>void ae()),x("click",k,()=>{y(S,null)}),c(s,v)};w(j,s=>{e(S)==="enable"&&s(pe)})}var P=i(j,2);{var ge=s=>{var v=Ge(),d=i(n(v)),o=n(d);p(()=>_(o,e(t).vethernetCidr)),c(s,v)};w(P,s=>{e(t).vethernetCidr!==null&&s(ge)})}var z=i(P,2);{var ue=s=>{var v=He(),d=n(v);let o;var k=n(d),$=i(d,2),u=n($);p(()=>{o=H(d,1,"cs-toggle svelte-kvy574",null,o,{"is-busy":e(b)}),J(k,e(t).useLanIpOverride),k.disabled=e(b),_(u,`Fallback: ${e(t).lanIpFallback??""}`)}),x("change",k,F=>void re(F.target.checked)),c(s,v)};w(z,s=>{e(t).lanIpFallback!==null&&s(ue)})}var we=i(z,2),B=n(we),_e=n(B),K=i(B,2);{var fe=s=>{var v=Je();c(s,v)},ye=s=>{var v=Ye();We(v,21,()=>e(t).workspaces,d=>`${d.workspaceId}/${d.vmId}`,(d,o)=>{const k=L(()=>X(e(o))),$=L(()=>Ue(e(k)));var u=Xe(),F=n(u),me=n(F),q=i(F,2),he=n(q),xe=i(q,2);{var Ce=m=>{var G=Qe();p(()=>h(G,"data-testid",`cowork-workspace-report-${e(o).workspaceId}-${e(o).vmId}`)),c(m,G)};w(xe,m=>{e(k)==="schemaDrift"&&m(Ce)})}p(m=>{h(u,"data-testid",`cowork-workspace-row-${e(o).workspaceId}-${e(o).vmId}`),h(u,"data-status",e(k)),h(u,"title",e(o).failureDetail??e(o).path),Me(u,m),_(me,`${e(o).workspaceId??""} / ${e(o).vmId??""}`),_(he,e($))},[()=>oe(e(o))]),c(d,u)}),c(s,v)};w(K,s=>{e(t).workspaces.length===0?s(fe):s(ye,-1)})}var V=i(K,2);p(()=>{E=H(f,1,"cs-toggle svelte-kvy574",null,E,{"is-busy":e(b)}),J(R,e(t).enabled),R.disabled=e(b),_(be,`Token provisioned: ${e(t).enabled?"yes":"no"}`),_(_e,`Workspaces (${e(t).workspaces.length??""})`),V.disabled=e(b)}),x("change",R,s=>{s.target.checked?y(S,"enable"):te()}),x("click",V,se),c(a,r)};w(W,a=>{g.loading?a(ne):e(O)==="unsupported"?a(ie,1):e(O)==="undetected"?a(ce,2):e(O)==="normal"&&g.status!==null&&a(le,3)})}var M=i(W,2);{var ve=a=>{var t=ea(),r=n(t);p(()=>_(r,`Failed to load Cowork status: ${g.error??""}`)),c(a,t)};w(M,a=>{g.error&&!g.status&&a(ve)})}var de=i(M,2);{var ke=a=>{var t=aa(),r=n(t);p(()=>_(r,e(I))),c(a,t)};w(de,a=>{e(I)&&a(ke)})}c(Y,A),Ee()}je(["change","click"]);export{ra as default};