@sift-wiki/conductor 0.1.0 → 0.2.0-beta.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/README.md +28 -58
- package/dist/adapters/claudeAgent.js +1 -0
- package/dist/adapters/claudeAgent.js.map +1 -1
- package/dist/adapters/codexAgent.js +1 -0
- package/dist/adapters/codexAgent.js.map +1 -1
- package/dist/adapters/fakeAgent.js +1 -0
- package/dist/adapters/fakeAgent.js.map +1 -1
- package/dist/adapters/httpAgent.js +1 -0
- package/dist/adapters/httpAgent.js.map +1 -1
- package/dist/adapters/processAgent.js +4 -0
- package/dist/adapters/processAgent.js.map +1 -1
- package/dist/adapters/provider/runProvider.js +4 -0
- package/dist/adapters/provider/runProvider.js.map +1 -1
- package/dist/adapters/provider/store.js +3 -4
- package/dist/adapters/provider/store.js.map +1 -1
- package/dist/adapters/types.d.ts +9 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +44 -3
- package/dist/cli.js.map +1 -1
- package/dist/conductorClient.d.ts +245 -17
- package/dist/conductorClient.js +147 -38
- package/dist/conductorClient.js.map +1 -1
- package/dist/config.js +4 -5
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +23 -6
- package/dist/daemon.js +173 -95
- package/dist/daemon.js.map +1 -1
- package/dist/desktop/app/contracts.d.ts +71 -0
- package/dist/desktop/app/contracts.js +19 -0
- package/dist/desktop/app/contracts.js.map +1 -0
- package/dist/desktop/app/controller.d.ts +58 -0
- package/dist/desktop/app/controller.js +161 -0
- package/dist/desktop/app/controller.js.map +1 -0
- package/dist/desktop/app/runtimeController.d.ts +29 -0
- package/dist/desktop/app/runtimeController.js +55 -0
- package/dist/desktop/app/runtimeController.js.map +1 -0
- package/dist/localApi/authorizedPairing.d.ts +12 -0
- package/dist/localApi/authorizedPairing.js +18 -0
- package/dist/localApi/authorizedPairing.js.map +1 -0
- package/dist/localApi/contracts.d.ts +264 -0
- package/dist/localApi/contracts.js +191 -0
- package/dist/localApi/contracts.js.map +1 -0
- package/dist/localApi/recovery.d.ts +66 -0
- package/dist/localApi/recovery.js +115 -0
- package/dist/localApi/recovery.js.map +1 -0
- package/dist/localApi/server.d.ts +20 -0
- package/dist/localApi/server.js +414 -0
- package/dist/localApi/server.js.map +1 -0
- package/dist/localApi/workConsole.d.ts +74 -0
- package/dist/localApi/workConsole.js +342 -0
- package/dist/localApi/workConsole.js.map +1 -0
- package/dist/localApi/workContracts.d.ts +213 -0
- package/dist/localApi/workContracts.js +130 -0
- package/dist/localApi/workContracts.js.map +1 -0
- package/dist/localApp/platform.d.ts +2 -0
- package/dist/localApp/platform.js +57 -0
- package/dist/localApp/platform.js.map +1 -0
- package/dist/localApp/service.d.ts +25 -0
- package/dist/localApp/service.js +126 -0
- package/dist/localApp/service.js.map +1 -0
- package/dist/protocol/fenced.d.ts +135 -0
- package/dist/protocol/fenced.js +142 -0
- package/dist/protocol/fenced.js.map +1 -0
- package/dist/redaction.js +2 -0
- package/dist/redaction.js.map +1 -1
- package/dist/runtime/atomicFile.d.ts +6 -0
- package/dist/runtime/atomicFile.js +78 -0
- package/dist/runtime/atomicFile.js.map +1 -0
- package/dist/runtime/daemonCapabilities.d.ts +7 -0
- package/dist/runtime/daemonCapabilities.js +24 -0
- package/dist/runtime/daemonCapabilities.js.map +1 -0
- package/dist/runtime/eventOutbox.d.ts +100 -0
- package/dist/runtime/eventOutbox.js +206 -0
- package/dist/runtime/eventOutbox.js.map +1 -0
- package/dist/runtime/executionJournal.d.ts +102 -0
- package/dist/runtime/executionJournal.js +209 -0
- package/dist/runtime/executionJournal.js.map +1 -0
- package/dist/runtime/executionSafety.d.ts +76 -0
- package/dist/runtime/executionSafety.js +207 -0
- package/dist/runtime/executionSafety.js.map +1 -0
- package/dist/runtime/fencedExecutionState.d.ts +43 -0
- package/dist/runtime/fencedExecutionState.js +158 -0
- package/dist/runtime/fencedExecutionState.js.map +1 -0
- package/dist/runtime/leaseManager.d.ts +38 -0
- package/dist/runtime/leaseManager.js +102 -0
- package/dist/runtime/leaseManager.js.map +1 -0
- package/dist/runtime/localLogSpool.d.ts +1 -0
- package/dist/runtime/localLogSpool.js +4 -0
- package/dist/runtime/localLogSpool.js.map +1 -1
- package/dist/runtime/localRunQueue.d.ts +1 -1
- package/dist/runtime/localRunQueue.js +8 -0
- package/dist/runtime/localRunQueue.js.map +1 -1
- package/dist/runtime/localSessionCache.d.ts +1 -1
- package/dist/runtime/localSessionCache.js.map +1 -1
- package/dist/runtime/process.d.ts +13 -1
- package/dist/runtime/process.js +39 -9
- package/dist/runtime/process.js.map +1 -1
- package/dist/runtime/recoveryCoordinator.d.ts +19 -0
- package/dist/runtime/recoveryCoordinator.js +183 -0
- package/dist/runtime/recoveryCoordinator.js.map +1 -0
- package/dist/runtime/runtimeLock.d.ts +33 -0
- package/dist/runtime/runtimeLock.js +140 -0
- package/dist/runtime/runtimeLock.js.map +1 -0
- package/dist/runtime/runtimeService.d.ts +6 -1
- package/dist/runtime/runtimeService.js +54 -20
- package/dist/runtime/runtimeService.js.map +1 -1
- package/dist/runtime/taskExecution.d.ts +2 -0
- package/dist/runtime/taskExecution.js +18 -12
- package/dist/runtime/taskExecution.js.map +1 -1
- package/dist/types.d.ts +28 -13
- package/dist/userAuth/service.d.ts +26 -0
- package/dist/userAuth/service.js +170 -0
- package/dist/userAuth/service.js.map +1 -0
- package/dist/userAuth/store.d.ts +42 -0
- package/dist/userAuth/store.js +160 -0
- package/dist/userAuth/store.js.map +1 -0
- package/dist/userAuth/types.d.ts +63 -0
- package/dist/userAuth/types.js +29 -0
- package/dist/userAuth/types.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workTypes.d.ts +162 -31
- package/dist/workTypes.js +31 -0
- package/dist/workTypes.js.map +1 -1
- package/dist-web/assets/index-CWAdDb9V.js +72 -0
- package/dist-web/assets/index-CWfnzdLn.css +1 -0
- package/dist-web/index.html +15 -0
- package/docs/provider-setup.md +81 -0
- package/docs/quickstart.md +62 -0
- package/docs/troubleshooting.md +63 -0
- package/package.json +13 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{color:#191a1c;font-synthesis:none;text-rendering:optimizelegibility;letter-spacing:0;--surface:#fff;--background:#f7f7f5;--muted:#6f7378;--border:#dedfdb;--border-strong:#c9cbc6;--ink:#191a1c;--accent:#2958d3;--accent-hover:#2149b1;--green:#25805c;--amber:#a86b18;--red:#b4433d;--sidebar:#202225;background:#f7f7f5;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{background:var(--background);min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit;letter-spacing:0}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.52}h1,h2,h3,p{margin:0}.app-shell{grid-template-columns:220px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{color:#e8e9e7;background:var(--sidebar);flex-direction:column;height:100vh;padding:18px 12px 14px;display:flex;position:sticky;top:0}.sidebar-brand{width:100%;color:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:10px;padding:0 9px 20px;font-size:14px;display:flex}.sidebar-brand>span{color:#fff;border:1px solid #4b4e52;border-radius:6px;place-items:center;width:28px;height:28px;display:grid}.sidebar nav{gap:3px;display:grid}.nav-item{color:#b7babd;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:10px;width:100%;height:36px;padding:0 10px;font-size:13px;display:flex}.nav-item:hover{color:#fff;background:#2b2e32}.nav-item.active{color:#fff;background:#34373b}.sidebar-bottom{gap:3px;margin-top:auto;display:grid}.machine-row{border-top:1px solid #393b3e;align-items:center;gap:9px;min-width:0;margin-top:10px;padding:11px 10px 2px;display:flex}.machine-row>span:last-child{min-width:0;display:grid}.machine-row strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;overflow:hidden}.machine-row small{color:#8f9397;margin-top:2px;font-size:11px}.machine-dot{background:#6f7378;border-radius:50%;flex:none;width:7px;height:7px}.machine-dot.online{background:#47b483;box-shadow:0 0 0 3px #47b4831f}.main-content{min-width:0;padding:34px clamp(28px,5vw,68px)}.content-header{justify-content:space-between;align-items:flex-start;gap:24px;max-width:1080px;margin:0 auto;display:flex}.content-header h1{font-size:25px;font-weight:650;line-height:1.2}.content-header p{color:var(--muted);margin-top:6px;font-size:13px;line-height:1.5}.header-actions{align-items:center;gap:8px;display:flex}.primary-button,.secondary-button,.text-button{border-radius:5px;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:0 13px;font-size:12px;font-weight:600;display:inline-flex}.primary-button{border:1px solid var(--accent);color:#fff;background:var(--accent)}.primary-button:hover:not(:disabled){border-color:var(--accent-hover);background:var(--accent-hover)}.secondary-button{border:1px solid var(--border-strong);color:#3f4246;background:#fff}.secondary-button:hover:not(:disabled){background:#f2f3f0}.text-button{min-height:28px;color:var(--accent);background:0 0;border:0;padding:0}.full-width{width:100%}.icon-button{color:#676b70;background:0 0;border:1px solid #0000;border-radius:5px;place-items:center;width:30px;height:30px;padding:0;display:inline-grid}.icon-button:hover:not(:disabled){border-color:var(--border);color:var(--ink);background:#f2f3f0}.summary-strip{border:1px solid var(--border);background:var(--surface);border-radius:6px;max-width:1080px;margin:26px auto 16px;display:flex}.summary-strip>div{border-right:1px solid var(--border);align-items:center;gap:10px;min-width:135px;padding:13px 16px;display:flex}.summary-strip>div:last-child{border-right:0}.summary-strip>div>span:last-child{align-items:baseline;gap:6px;display:flex}.summary-strip strong{font-size:14px}.summary-strip small{color:var(--muted);font-size:11px}.summary-dot{border-radius:50%;width:7px;height:7px}.summary-dot.green{background:var(--green)}.summary-dot.amber{background:var(--amber)}.summary-dot.red{background:var(--red)}.agent-list{border:1px solid var(--border);background:var(--surface);border-radius:6px;max-width:1080px;margin:0 auto;overflow:visible}.agent-list-header,.agent-row{grid-template-columns:minmax(230px,1.6fr) minmax(120px,1fr) 100px 126px 104px;align-items:center;column-gap:16px;display:grid}.agent-list-header{border-bottom:1px solid var(--border);color:#85898e;text-transform:uppercase;background:#fafaf8;min-height:36px;padding:0 14px;font-size:10px;font-weight:650}.agent-row{border-bottom:1px solid #e8e9e5;min-height:68px;padding:8px 14px}.agent-row:last-child{border-bottom:0}.agent-row:hover{background:#fbfbf9}.agent-identity{align-items:center;gap:11px;min-width:0;display:flex}.agent-identity>span:last-child{min-width:0;display:grid}.agent-identity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.agent-identity small{color:var(--muted);margin-top:3px;font-size:11px}.agent-avatar{border-radius:6px;flex:none;place-items:center;width:34px;height:34px;font-size:10px;font-weight:750;display:grid}.agent-avatar.codex{color:#1e5c43;background:#e0f1e9}.agent-avatar.claude{color:#7d4e15;background:#f4e8d7}.row-value{color:#4e5256;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.status{border-radius:4px;align-items:center;gap:6px;width:fit-content;min-height:24px;padding:0 8px;font-size:10.5px;font-weight:600;display:inline-flex}.status i{border-radius:50%;width:6px;height:6px}.status.ready{color:#1e684a;background:#e6f2ec}.status.ready i{background:#2a8a62}.status.paused{color:#6c7074;background:#edeeeb}.status.paused i{background:#85898d}.status.error{color:#963d37;background:#f7e8e6}.status.error i{background:#bd4e47}.row-actions{justify-content:flex-end;align-items:center;gap:2px;display:flex}.action-menu{position:relative}.action-menu summary{color:#676b70;cursor:pointer;border-radius:5px;place-items:center;width:30px;height:30px;list-style:none;display:grid}.action-menu summary::-webkit-details-marker{display:none}.action-menu[open] summary{color:var(--ink);background:#f2f3f0}.action-menu>div{z-index:5;border:1px solid var(--border);background:#fff;border-radius:5px;width:150px;padding:4px;position:absolute;top:34px;right:0;box-shadow:0 8px 20px #2223251f}.action-menu button{color:#3f4246;background:#fff;border:0;border-radius:4px;align-items:center;gap:7px;width:100%;min-height:32px;padding:0 8px;font-size:11px;display:flex}.action-menu button:hover{background:#f3f4f1}.action-menu button.danger{color:var(--red)}.empty-state{border:1px solid var(--border);max-width:1080px;color:var(--muted);background:var(--surface);text-align:center;border-radius:6px;justify-items:center;margin:0 auto;padding:72px 24px;display:grid}.empty-state h3{color:var(--ink);margin-top:14px;font-size:14px}.empty-state p{max-width:340px;margin-top:6px;font-size:12px;line-height:1.5}.page-error,.inline-error{color:var(--red);font-size:12px;line-height:1.45}.page-error{background:#fff0ee;border:1px solid #e5b7b2;border-radius:5px;max-width:1080px;margin:0 auto 12px;padding:9px 11px}.modal-backdrop{z-index:20;background:#18191b6b;place-items:center;padding:30px;display:grid;position:fixed;inset:0}.wizard{background:#fff;border:1px solid #cfd0cc;border-radius:7px;grid-template-rows:auto auto minmax(330px,1fr) auto;width:min(680px,100%);max-height:calc(100vh - 60px);display:grid;overflow:hidden;box-shadow:0 24px 70px #191a1c3b}.wizard-header{justify-content:space-between;align-items:flex-start;gap:20px;padding:20px 22px 16px;display:flex}.wizard-header h2{font-size:18px;font-weight:650}.wizard-header p{color:var(--muted);margin-top:4px;font-size:12px}.step-rail{border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:#fafaf8;grid-template-columns:repeat(3,1fr);display:grid}.step{border-right:1px solid var(--border);color:#83878b;justify-content:center;align-items:center;gap:7px;height:42px;font-size:11px;font-weight:600;display:flex}.step:last-child{border-right:0}.step span{border:1px solid #c9cbc6;border-radius:50%;place-items:center;width:18px;height:18px;font-size:9px;display:grid}.step.active{color:var(--accent);background:#f3f6ff}.step.active span{border-color:var(--accent);color:#fff;background:var(--accent)}.wizard-body{padding:26px 28px;overflow:auto}.wizard-section{gap:22px;display:grid}.wizard-section h3{font-size:15px;font-weight:650}.wizard-section>div:first-child>p{max-width:520px;color:var(--muted);margin-top:5px;font-size:12px;line-height:1.5}.provider-options{grid-template-columns:1fr 1fr;gap:10px;display:grid}.provider-option{border:1px solid var(--border);min-height:72px;color:var(--ink);text-align:left;background:#fff;border-radius:6px;grid-template-columns:38px 1fr auto;align-items:center;gap:11px;padding:12px;display:grid}.provider-option:hover{background:#fafbff;border-color:#aeb7ce}.provider-option.selected{background:#f6f8ff;border-color:#7e99df;box-shadow:inset 0 0 0 1px #7e99df}.provider-option>span:nth-child(2){display:grid}.provider-option strong{font-size:12px}.provider-option small{color:var(--muted);margin-top:3px;font-size:11px}.provider-option>svg{color:var(--accent)}.provider-icon{color:#3c465b;background:#eceef2;border-radius:6px;place-items:center;width:36px;height:36px;display:grid}.selection-row{border:1px solid var(--border);min-height:58px;color:var(--ink);text-align:left;background:#fff;border-radius:6px;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:10px 12px;display:grid}.selection-row:hover{border-color:var(--border-strong);background:#fafaf8}.selection-row>span{display:grid}.selection-row strong{font-size:12px}.selection-row small{color:var(--muted);margin-top:3px;font-size:11px}.selection-row>svg:first-child{color:var(--accent)}.access-fieldset{border:0;gap:8px;margin:0;padding:0;display:grid}.access-fieldset legend{color:#4a4e52;margin-bottom:8px;font-size:11px;font-weight:650}.access-option{border:1px solid var(--border);cursor:pointer;border-radius:6px;grid-template-columns:16px 22px 1fr;align-items:start;gap:8px;padding:11px 12px;display:grid}.access-option.selected{background:#f7f9ff;border-color:#96a8d9}.access-option input{margin:3px 0 0}.access-option>svg{color:#69707b;margin-top:1px}.access-option>span{display:grid}.access-option strong{font-size:12px}.access-option small{color:var(--muted);margin-top:3px;font-size:11px;line-height:1.4}.diagnostic{border:1px solid var(--border);border-radius:5px;gap:4px;padding:11px 12px;font-size:11px;display:grid}.diagnostic.error{color:#843934;background:#fff2f0;border-color:#e1b1ac}.field-label{color:#4a4e52;gap:7px;font-size:11px;font-weight:650;display:grid}.field-label input,.form-stack input{border:1px solid var(--border-strong);width:100%;height:38px;color:var(--ink);background:#fff;border-radius:5px;outline:none;padding:0 10px}.field-label input:focus,.form-stack input:focus{border-color:#7e99df;box-shadow:0 0 0 3px #4367c41a}.verification-summary{color:#225c44;background:#f0f8f4;border:1px solid #b8d7c8;border-radius:6px;align-items:center;gap:11px;padding:13px;display:flex}.verification-summary>span{display:grid}.verification-summary strong{font-size:12px}.verification-summary small{color:#4d7563;margin-top:3px;font-size:11px}.wizard-footer{border-top:1px solid var(--border);background:#fafaf8;justify-content:space-between;align-items:center;gap:10px;padding:13px 18px;display:flex}.editor-dialog{background:#fff;border:1px solid #cfd0cc;border-radius:7px;width:min(520px,100%);overflow:hidden;box-shadow:0 24px 70px #191a1c3b}.editor-body{border-top:1px solid var(--border);gap:18px;padding:22px;display:grid}.quota-note{color:var(--muted);font-size:11px;line-height:1.45}.pairing-shell{background:#f3f4f1;place-items:center;min-height:100vh;padding:30px;display:grid}.pairing-panel{border:1px solid var(--border);background:#fff;border-radius:7px;width:min(430px,100%);padding:30px;box-shadow:0 16px 45px #20222517}.pairing-divider{color:var(--muted);text-transform:uppercase;align-items:center;gap:10px;margin:16px 0;font-size:10px;display:flex}.pairing-divider:before,.pairing-divider:after{content:"";background:var(--border);flex:1;height:1px}.brand-mark{color:#fff;background:#272a2e;border-radius:7px;place-items:center;width:38px;height:38px;margin-bottom:18px;display:grid}.pairing-panel h1{font-size:21px}.pairing-panel>p{color:var(--muted);margin-top:7px;font-size:12px;line-height:1.55}.form-stack{gap:14px;margin:24px 0 18px;display:grid}.form-stack label{color:#4a4e52;gap:6px;font-size:11px;font-weight:650;display:grid}.loading-screen{min-height:100vh;color:var(--muted);place-items:center;font-size:13px;display:grid}.page-loading{min-height:50vh;color:var(--muted);place-items:center;font-size:13px;display:grid}.danger-text{color:var(--red)}.state-notice{border-top:1px solid var(--border);border-bottom:1px solid var(--border);max-width:720px;color:var(--muted);text-align:center;justify-items:center;margin:48px auto 0;padding:54px 24px;display:grid}.state-notice svg{color:#777c83}.state-notice h2{color:var(--ink);margin-top:14px;font-size:16px}.state-notice p{max-width:460px;margin:7px 0 18px;font-size:12px;line-height:1.6}.work-header{max-width:1280px}.work-console{border:1px solid var(--border);background:var(--surface);border-radius:6px;grid-template-columns:minmax(290px,360px) minmax(0,1fr);max-width:1280px;min-height:650px;margin:24px auto 0;display:grid;overflow:hidden}.work-queue-pane{border-right:1px solid var(--border);background:#fafaf8;min-width:0}.work-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:end;gap:12px;min-height:60px;padding:10px 12px;display:flex}.work-toolbar label{color:var(--muted);text-transform:uppercase;gap:4px;font-size:10px;font-weight:650;display:grid}.work-toolbar select{border:1px solid var(--border-strong);width:min(220px,100%);height:30px;color:var(--ink);background:#fff;border-radius:4px;padding:0 28px 0 8px;font-size:12px}.work-toolbar>span{color:var(--muted);white-space:nowrap;font-size:10px}.work-queue{max-height:calc(100vh - 180px);overflow:auto}.work-row{width:100%;min-height:74px;color:var(--ink);text-align:left;background:0 0;border:0;border-bottom:1px solid #e7e8e4;grid-template-columns:8px minmax(0,1fr) auto 15px;align-items:center;gap:9px;padding:10px 10px 10px 12px;display:grid}.work-row:hover{background:#f3f4f0}.work-row.selected{box-shadow:inset 3px 0 0 var(--accent);background:#eef2fb}.work-row>svg{color:#9a9ea2}.work-state-dot{background:#8a8f94;border-radius:50%;width:7px;height:7px}.work-state-dot.needs_review{background:#9b651d}.work-state-dot.blocked,.work-state-dot.needs_attention{background:var(--red)}.work-state-dot.running{background:var(--green);box-shadow:0 0 0 3px #25805c1f}.work-state-dot.finished{background:#7d8287}.work-row-copy{min-width:0;display:grid}.work-row-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}.work-row-copy small{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin-top:5px;font-size:10.5px;overflow:hidden}.state-chip{color:#5e6267;white-space:nowrap;background:#e9eae7;border-radius:4px;align-items:center;min-height:22px;padding:0 7px;font-size:9.5px;font-weight:700;display:inline-flex}.state-chip.needs_review{color:#845317;background:#f4e9d7}.state-chip.blocked,.state-chip.needs_attention{color:#903c37;background:#f5e5e3}.state-chip.running{color:#1f684a;background:#e2f0e8}.state-chip.ready{color:#35518f;background:#e8edf8}.queue-empty{color:var(--muted);text-align:center;justify-items:center;padding:54px 18px;display:grid}.queue-empty strong{color:var(--ink);margin-top:10px;font-size:12px}.queue-empty span{max-width:220px;margin-top:5px;font-size:10.5px;line-height:1.5}.work-detail-pane{background:#fff;min-width:0}.mobile-work-back{display:none}.work-detail{min-width:0}.detail-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:18px;padding:24px 28px 20px;display:flex}.detail-header>div{justify-items:start;gap:10px;min-width:0;display:grid}.detail-header h2{overflow-wrap:anywhere;font-size:19px;font-weight:650}.detail-header small{color:var(--muted);font-size:10px}.detail-header>.detail-heading-actions{align-items:center;justify-items:initial;flex:none;gap:8px;display:flex}.priority-label{color:var(--muted);text-transform:capitalize;border-left:2px solid #9ca0a5;padding-left:7px;font-size:10px;font-weight:650}.priority-label.critical{border-color:var(--red);color:var(--red)}.priority-label.high{border-color:var(--amber)}.task-body{border-bottom:1px solid var(--border);color:#45494e;white-space:pre-wrap;overflow-wrap:anywhere;padding:20px 28px;font-size:12.5px;line-height:1.65}.run-panel{border-bottom:1px solid var(--border);background:#fbfcfa;padding:20px 28px}.run-heading{justify-content:space-between;align-items:center;gap:16px;display:flex}.run-heading>span{align-items:center;gap:8px;display:flex}.run-heading strong{font-size:12px}.run-heading small{color:var(--muted);font-size:10px}.pulse-dot{background:var(--green);border-radius:50%;width:7px;height:7px}.run-panel>p{color:#3f4448;margin-top:10px;font-size:13px;line-height:1.5}.progress-list{gap:9px;margin:16px 0 0;padding:0;list-style:none;display:grid}.progress-list li{grid-template-columns:8px 1fr;align-items:start;gap:9px;display:grid}.progress-list li>span{background:#fff;border:1px solid #8f969c;border-radius:50%;width:6px;height:6px;margin-top:4px}.progress-list li>div{display:grid}.progress-list strong{color:#565a5f;font-size:10.5px;font-weight:550}.progress-list small{color:#979b9f;margin-top:2px;font-size:9.5px}.trace{border-top:1px solid var(--border);margin-top:14px;padding-top:10px}.trace summary{color:#70757a;cursor:pointer;font-size:10.5px;font-weight:650}.trace p,.trace pre{color:#777c81;white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0 0;font:10px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace}.detail-band{border-bottom:1px solid var(--border);padding:20px 28px}.detail-band h3,.review-panel h3{color:#4e5358;text-transform:uppercase;margin-bottom:11px;font-size:10px;font-weight:750}.detail-band.warning{color:#7d3b36;background:#fff8f6}.detail-band.warning p{font-size:12px}.detail-band.warning span{color:var(--muted);margin-left:6px;font-size:10px}.artifact-list{gap:7px;display:grid}.artifact-row{border:1px solid var(--border);min-height:50px;color:var(--ink);border-radius:5px;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:9px;padding:8px 10px;text-decoration:none;display:grid}.artifact-row:hover{border-color:var(--border-strong);background:#fafaf8}.artifact-row>svg{color:#5f6d86}.artifact-row>span{display:grid}.artifact-row strong{font-size:11.5px}.artifact-row small{color:var(--muted);margin-top:3px;font-size:10px}.artifact-row em{color:var(--amber);text-transform:uppercase;font-size:9px;font-style:normal;font-weight:650}.review-panel{background:#fffaf1;border-bottom:1px solid #e2cda9;gap:12px;padding:20px 28px;display:grid}.review-panel h3{color:#765021;margin:0}.review-panel p{color:#8a6c45;margin-top:4px;font-size:11px}.review-panel textarea,.comment-composer textarea,.task-dialog textarea{resize:vertical;border:1px solid var(--border-strong);width:100%;min-height:72px;color:var(--ink);background:#fff;border-radius:5px;padding:9px 10px;font-size:12px;line-height:1.5}.review-actions,.detail-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:7px;display:flex}.comment-list{gap:10px;display:grid}.comment-list>div{color:#666b70;grid-template-columns:18px 1fr;gap:8px;display:grid}.comment-list p{color:#454a4f;font-size:11.5px;line-height:1.5}.comment-list small{color:#969a9e;margin-top:3px;font-size:9.5px;display:block}.comment-composer{grid-template-columns:1fr auto;align-items:end;gap:8px;margin-top:14px;display:grid}.comment-composer textarea{min-height:58px}.detail-actions{min-height:62px;padding:12px 28px}.detail-actions select{border:1px solid var(--border-strong);background:#fff;border-radius:5px;min-width:170px;height:34px;padding:0 8px;font-size:11px}.task-dialog{border:1px solid var(--border-strong);background:#fff;border-radius:7px;gap:16px;width:min(520px,100%);padding:20px;display:grid;box-shadow:0 24px 70px #191a1c3b}.task-dialog header,.task-dialog footer{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.task-dialog header p{color:var(--muted);margin-top:4px;font-size:11px}.task-dialog label{color:#555a5f;gap:6px;font-size:11px;font-weight:650;display:grid}.task-dialog input,.task-dialog select{border:1px solid var(--border-strong);background:#fff;border-radius:5px;width:100%;height:36px;padding:0 9px}.task-dialog footer{justify-content:flex-end;padding-top:4px}.activity-filters{border-top:1px solid var(--border);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:14px;max-width:900px;margin:24px auto 0;padding:10px 12px;display:flex}.activity-filters>label:first-child{min-width:240px;color:var(--muted);flex:1;align-items:center;gap:8px;display:flex}.activity-filters input[type=text],.activity-filters input:not([type]){background:0 0;border:0;outline:0;width:100%;height:32px;font-size:12px}.check-label{color:#555a5f;white-space:nowrap;align-items:center;gap:6px;font-size:11px;display:flex}.activity-feed{max-width:900px;margin:0 auto}.activity-entry{border-bottom:1px solid var(--border);grid-template-columns:10px 1fr auto;align-items:center;gap:10px;min-height:60px;display:grid}.timeline-dot{background:#fff;border:1px solid #8b9095;border-radius:50%;width:7px;height:7px}.activity-entry>div{display:grid}.activity-entry strong{font-size:12px;font-weight:600}.activity-entry small{color:var(--muted);margin-top:4px;font-size:10px}.activity-entry button{color:var(--accent);background:0 0;border:0;font-size:10.5px}.empty-copy{color:var(--muted);text-align:center;padding:46px 0;font-size:12px}.settings-sections{max-width:900px;margin:24px auto 0}.settings-section{border-top:1px solid var(--border);grid-template-columns:minmax(180px,.8fr) minmax(260px,1.2fr);gap:28px;padding:24px 0;display:grid}.settings-section:last-child{border-bottom:1px solid var(--border)}.settings-section h2,.help-section h2{font-size:14px}.settings-section>div:first-child p,.help-section>div p{color:var(--muted);margin-top:5px;font-size:11px;line-height:1.5}.definition-rows{margin:0}.definition-rows>div{border-bottom:1px solid #ecece9;grid-template-columns:110px 1fr;gap:12px;min-height:34px;padding:8px 0;display:grid}.definition-rows dt{color:var(--muted);font-size:10px}.definition-rows dd{color:#44494e;overflow-wrap:anywhere;min-width:0;margin:0;font-size:11px}.settings-actions{grid-column:2;justify-content:flex-end;display:flex}.help-grid{border-top:1px solid var(--border);border-bottom:1px solid var(--border);grid-template-columns:repeat(3,minmax(0,1fr));gap:0;max-width:1040px;margin:26px auto 0;display:grid}.help-section{border-right:1px solid var(--border);flex-direction:column;align-items:flex-start;gap:14px;min-height:300px;padding:26px 22px;display:flex}.help-section:last-child{border-right:0}.help-section>svg{color:#606a77}.help-section>a{color:#3e4d6b;border-bottom:1px solid #ecece9;justify-content:space-between;align-items:center;gap:12px;width:100%;min-height:34px;font-size:11px;text-decoration:none;display:flex}.help-section>p{color:#555b60;font-size:11px;line-height:1.6}.help-section code{color:#3f4a5a;font:10px ui-monospace,SFMono-Regular,Menlo,monospace}.help-section>small{color:var(--muted);margin-top:auto;font-size:9.5px}@media (width<=960px){.app-shell{grid-template-columns:190px minmax(0,1fr)}.main-content{padding-inline:24px}.agent-list-header,.agent-row{grid-template-columns:minmax(210px,1.5fr) minmax(100px,1fr) 110px 94px}.agent-list-header span:nth-child(3),.agent-row>.row-value:nth-child(3){display:none}.work-console{grid-template-columns:minmax(270px,320px) minmax(0,1fr)}.help-grid{grid-template-columns:1fr}.help-section{border-right:0;border-bottom:1px solid var(--border);min-height:auto}}@media (width<=720px){.app-shell{display:block}.sidebar{grid-template-columns:auto 1fr;gap:8px;width:100%;height:auto;padding:9px 10px;display:grid;position:static}.sidebar-brand{width:auto;padding:0}.sidebar-brand strong{display:none}.sidebar nav{justify-content:flex-end;display:flex;overflow-x:auto}.sidebar nav .nav-item{flex:none;width:auto}.sidebar-bottom{border-top:1px solid #393b3e;grid-column:1/-1;padding-top:6px;display:flex}.sidebar-bottom .nav-item{width:auto}.machine-row{display:none}.main-content{padding:24px 16px}.content-header{display:grid}.header-actions{flex-wrap:wrap}.summary-strip{overflow-x:auto}.agent-list-header{display:none}.agent-row{grid-template-columns:1fr auto;gap:8px;padding:13px}.agent-row>.row-value,.agent-row>.status{display:none}.modal-backdrop{padding:0}.wizard{border:0;border-radius:0;width:100%;height:100vh;max-height:none}.provider-options{grid-template-columns:1fr}.work-console{min-height:0;display:block}.work-queue-pane{border-right:0;border-bottom:1px solid var(--border)}.work-queue{max-height:360px}.work-console:not(.mobile-detail-open) .work-detail-pane,.work-console.mobile-detail-open .work-queue-pane{display:none}.mobile-work-back{border:0;border-bottom:1px solid var(--border);color:#4c5662;background:#f8f8f6;align-items:center;gap:7px;width:100%;min-height:42px;padding:0 18px;font-size:11px;font-weight:650;display:flex}.detail-header,.task-body,.run-panel,.detail-band,.review-panel,.detail-actions{padding-inline:18px}.comment-composer{grid-template-columns:1fr}.settings-section{grid-template-columns:1fr;gap:14px}.settings-actions{grid-column:1}.activity-filters{flex-direction:column;align-items:stretch}.task-dialog{border:0;border-radius:0;align-content:start;width:100%;height:100vh}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta name="color-scheme" content="light" />
|
|
7
|
+
<title>Sift Conductor</title>
|
|
8
|
+
<meta name="sift-conductor-version" content="0.2.0-beta.2">
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-CWAdDb9V.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CWfnzdLn.css">
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Codex And Claude Code Setup
|
|
2
|
+
|
|
3
|
+
## Local App Flow
|
|
4
|
+
|
|
5
|
+
1. Run `npx @sift-wiki/conductor@latest start` and open Sift Conductor.
|
|
6
|
+
2. Pair the computer with a short-lived code from Sift.
|
|
7
|
+
3. Open **Agents** and choose **Add agent**.
|
|
8
|
+
4. Choose Codex CLI or Claude Code.
|
|
9
|
+
5. If the runtime is missing, follow the official provider setup link and
|
|
10
|
+
return to recheck it.
|
|
11
|
+
6. Complete the provider-owned login flow. Conductor observes only whether the
|
|
12
|
+
provider reports a valid session.
|
|
13
|
+
7. Choose a local folder with the native folder picker.
|
|
14
|
+
8. Choose `workspace` to update files or `inspect` for read-only work.
|
|
15
|
+
9. Run the structured smoke test. It may use provider quota.
|
|
16
|
+
10. Name the agent and add it. Conductor advertises it only after every check
|
|
17
|
+
passes.
|
|
18
|
+
|
|
19
|
+
Sift Web then lists the advertised agent for assignment and monitoring. Local
|
|
20
|
+
runtime creation stays in Conductor because the browser cannot inspect local
|
|
21
|
+
executables, launch provider login, choose folders, or supervise processes.
|
|
22
|
+
|
|
23
|
+
## Provider Authentication
|
|
24
|
+
|
|
25
|
+
Codex uses its own `codex login` and `codex login status` commands. Claude Code
|
|
26
|
+
uses its own `claude auth login` and `claude auth status --json` commands.
|
|
27
|
+
Conductor does not request or persist provider API keys, OAuth tokens, or auth
|
|
28
|
+
files.
|
|
29
|
+
|
|
30
|
+
## Access Profiles
|
|
31
|
+
|
|
32
|
+
`inspect` maps Codex to its read-only sandbox and Claude Code to plan/read-only
|
|
33
|
+
tools.
|
|
34
|
+
|
|
35
|
+
`workspace` maps Codex to workspace-write and Claude Code to file read/edit/write
|
|
36
|
+
tools with dangerous bypass, shell, and web tools excluded from the initial
|
|
37
|
+
preset.
|
|
38
|
+
|
|
39
|
+
The selected workspace path is stored in the owner-restricted local agent file.
|
|
40
|
+
The browser receives only an opaque folder token and basename. Sift receives
|
|
41
|
+
only provider type, version, status, access profile, and non-sensitive
|
|
42
|
+
capabilities.
|
|
43
|
+
|
|
44
|
+
## Supported Baseline
|
|
45
|
+
|
|
46
|
+
| Provider | Minimum | Fixture baseline | Authentication probe |
|
|
47
|
+
| --- | --- | --- | --- |
|
|
48
|
+
| Codex CLI | `0.100.0` | `0.140.0` on macOS | `codex login status` |
|
|
49
|
+
| Claude Code | `2.1.0` | `2.1.81` on macOS | `claude auth status --json` |
|
|
50
|
+
|
|
51
|
+
Provider versions below the minimum or versions that no longer support the
|
|
52
|
+
required structured output and access flags are blocked by readiness checks.
|
|
53
|
+
GitHub Actions run `29098610087` passed the full automated matrix on macOS and
|
|
54
|
+
Windows with Node.js 20, 22, and 24. That matrix covers provider fixtures,
|
|
55
|
+
paths with spaces, executable overrides, process-tree cancellation, packaged
|
|
56
|
+
CLI installation, renderer redaction, and an actual Electron load.
|
|
57
|
+
|
|
58
|
+
Authenticated local Codex `gpt-5.4` verification completed at both boundaries:
|
|
59
|
+
the provider smoke returned a valid structured result, and a task dispatched
|
|
60
|
+
through an isolated local Sift API was claimed by Conductor and settled as
|
|
61
|
+
`done`. Sift received one health event, two bounded progress events, provider
|
|
62
|
+
usage, and the terminal result; the largest event payload was 307 bytes. The
|
|
63
|
+
deterministic Sift suite also passed completion, review/approval, artifact,
|
|
64
|
+
blocked, policy hard-stop, cancellation, and routine cases through the same
|
|
65
|
+
bridge and settlement contracts.
|
|
66
|
+
|
|
67
|
+
Authenticated Claude Code remains a release gate. Automated Claude fixtures do
|
|
68
|
+
not replace that provider-owned login and live-run check.
|
|
69
|
+
|
|
70
|
+
## Headless Configuration
|
|
71
|
+
|
|
72
|
+
Headless users can pass a JSON adapter file through `--adapters`. Codex uses
|
|
73
|
+
`type: "codex"`; Claude Code uses `type: "claude-code"`. Paperclip-compatible
|
|
74
|
+
`codex_local` and `claude_local` type aliases are accepted during migration.
|
|
75
|
+
|
|
76
|
+
The CLI doctor performs local executable, version, workspace, and authentication
|
|
77
|
+
checks without pairing or contacting Sift:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
sift-conductor doctor --adapters ./agents.json
|
|
81
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Sift Conductor Quickstart
|
|
2
|
+
|
|
3
|
+
Sift Conductor connects Codex CLI and Claude Code agents on this computer to a Sift workspace.
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
- Node.js 20 or newer.
|
|
8
|
+
- A Sift account with access to a workspace. A short-lived pairing code remains
|
|
9
|
+
available as a fallback.
|
|
10
|
+
- Codex CLI or Claude Code installed and signed in before adding that provider.
|
|
11
|
+
|
|
12
|
+
## Start The Local App
|
|
13
|
+
|
|
14
|
+
Start the local service and browser app:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx @sift-wiki/conductor@latest start
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Then:
|
|
21
|
+
|
|
22
|
+
1. Name this computer and choose **Sign in to Sift**.
|
|
23
|
+
2. Approve the computer and select the workspace in the Sift window. Conductor
|
|
24
|
+
polls for approval and connects the computer without a localhost callback or
|
|
25
|
+
a copied pairing code.
|
|
26
|
+
3. Open **Agents**, choose **Add agent**, and follow the Codex CLI or Claude Code setup checks.
|
|
27
|
+
4. Select the local workspace folder and an `inspect` or `workspace` access profile.
|
|
28
|
+
5. Run the provider smoke test and add the agent.
|
|
29
|
+
6. Choose **Start runtime**. Work can now be assigned from Sift or the local **Work** view.
|
|
30
|
+
|
|
31
|
+
If account authorization is unavailable, enter a short-lived pairing code in
|
|
32
|
+
the fallback form on the same screen.
|
|
33
|
+
|
|
34
|
+
Conductor binds only to this computer. Keep the terminal process running while local agents are available. Closing the browser does not stop active work; stop the terminal process with `Ctrl+C` when finished.
|
|
35
|
+
|
|
36
|
+
To start without opening the browser automatically:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx @sift-wiki/conductor start --no-open
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Open the one-time local URL printed in the terminal.
|
|
43
|
+
|
|
44
|
+
The URL contains a short-lived fragment used once to create a local browser session. Do not reuse an old startup URL after restarting Conductor.
|
|
45
|
+
|
|
46
|
+
## Headless Operation
|
|
47
|
+
|
|
48
|
+
The existing daemon remains available without the local interface:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx @sift-wiki/conductor run
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Headless pairing is also available:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx @sift-wiki/conductor pair --api https://sift-wiki-api.fly.dev --code SC-... --display-name "My computer"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Use `status`, `doctor`, and `logout` to inspect pairing, verify providers, or remove the local machine credential.
|
|
61
|
+
|
|
62
|
+
See [Provider setup](provider-setup.md) and [Troubleshooting](troubleshooting.md) for the supported Codex CLI and Claude Code flows.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Runtime Not Found
|
|
4
|
+
|
|
5
|
+
The local app may not inherit the same `PATH` as an interactive shell. Conductor checks
|
|
6
|
+
`PATH`, common user install locations, and an explicit executable path. Use the
|
|
7
|
+
official provider setup link, install or update the runtime, then select
|
|
8
|
+
**Retest agent**.
|
|
9
|
+
|
|
10
|
+
## Login Required
|
|
11
|
+
|
|
12
|
+
Use the local app **Sign in** action. Authentication is performed by Codex or
|
|
13
|
+
Claude Code, not by Sift. If login completes but readiness remains red, run the
|
|
14
|
+
provider's status command directly and update the provider before retesting.
|
|
15
|
+
|
|
16
|
+
## Sift Connection Approval
|
|
17
|
+
|
|
18
|
+
Use **Sign in to Sift** on Conductor's connection screen, approve the computer,
|
|
19
|
+
and select the intended workspace in the hosted Sift window. Conductor uses a
|
|
20
|
+
device flow and polls for approval; it does not require Chrome to open a
|
|
21
|
+
temporary `127.0.0.1` callback.
|
|
22
|
+
|
|
23
|
+
If a blocked localhost callback appears after running the separate `sift login`
|
|
24
|
+
CLI command, close that tab and use Conductor's own sign-in action. The CLI
|
|
25
|
+
callback is not required for Conductor account-led pairing.
|
|
26
|
+
|
|
27
|
+
## Folder Is Invalid
|
|
28
|
+
|
|
29
|
+
Choose an existing folder. `inspect` requires read access; `workspace` requires
|
|
30
|
+
read and write access. Paths containing spaces are supported because Conductor
|
|
31
|
+
uses argument arrays and stdin rather than shell interpolation.
|
|
32
|
+
|
|
33
|
+
## Smoke Test Failed
|
|
34
|
+
|
|
35
|
+
The smoke test requires a valid structured result. Common causes are expired
|
|
36
|
+
provider login, unsupported CLI versions, provider quota, malformed provider
|
|
37
|
+
output, or a permission profile the detected version cannot enforce. The agent
|
|
38
|
+
is not advertised until the test passes.
|
|
39
|
+
|
|
40
|
+
## Agent Is Offline In Sift
|
|
41
|
+
|
|
42
|
+
Check that:
|
|
43
|
+
|
|
44
|
+
1. the computer is still paired;
|
|
45
|
+
2. the local runtime is running;
|
|
46
|
+
3. the agent is enabled and ready;
|
|
47
|
+
4. the Sift API is reachable;
|
|
48
|
+
5. the provider is still authenticated.
|
|
49
|
+
|
|
50
|
+
Pausing or removing a local agent marks it inactive but does not delete Sift
|
|
51
|
+
task or run history.
|
|
52
|
+
|
|
53
|
+
## Cancellation Takes Time
|
|
54
|
+
|
|
55
|
+
Conductor first asks the provider process tree to stop and then force-terminates
|
|
56
|
+
it after the configured grace period. A late provider success is ignored after
|
|
57
|
+
cancellation has been accepted.
|
|
58
|
+
|
|
59
|
+
## Safe Diagnostics
|
|
60
|
+
|
|
61
|
+
Conductor redacts Sift credentials, pairing codes, home-directory usernames,
|
|
62
|
+
and bounded provider errors. Do not attach raw provider auth files or full
|
|
63
|
+
environment dumps to support requests.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sift-wiki/conductor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-beta.2",
|
|
4
4
|
"description": "Local Sift Conductor tracer-bullet CLI daemon.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"dist",
|
|
28
|
+
"dist-web",
|
|
29
|
+
"docs/quickstart.md",
|
|
30
|
+
"docs/provider-setup.md",
|
|
31
|
+
"docs/troubleshooting.md",
|
|
28
32
|
"README.md",
|
|
29
33
|
"LICENSE",
|
|
30
34
|
"THIRD_PARTY_NOTICES.md"
|
|
@@ -33,15 +37,20 @@
|
|
|
33
37
|
"access": "public"
|
|
34
38
|
},
|
|
35
39
|
"scripts": {
|
|
36
|
-
"build": "
|
|
40
|
+
"build": "pnpm build:server && pnpm build:web",
|
|
41
|
+
"build:server": "tsc -p tsconfig.build.json",
|
|
42
|
+
"build:web": "vite build --config vite.web.config.ts",
|
|
37
43
|
"clean": "node scripts/clean.mjs",
|
|
38
44
|
"desktop:renderer": "vite --config vite.desktop.config.ts",
|
|
39
|
-
"desktop:build": "pnpm build && tsc -p tsconfig.desktop.json && vite build --config vite.desktop.config.ts",
|
|
45
|
+
"desktop:build": "pnpm build:server && tsc -p tsconfig.desktop.json && vite build --config vite.desktop.config.ts",
|
|
40
46
|
"desktop:smoke": "pnpm desktop:build && node scripts/smoke-desktop.mjs",
|
|
41
47
|
"desktop:start": "electron dist-desktop/main/desktop/app/main.js",
|
|
42
48
|
"desktop:dev": "pnpm desktop:build && pnpm desktop:start",
|
|
43
49
|
"dev": "tsx src/cli.ts",
|
|
44
50
|
"lint": "eslint . --max-warnings=0",
|
|
51
|
+
"qa:sandbox:start": "pnpm build && tsx qa/local-web-sandbox/start.ts",
|
|
52
|
+
"qa:sandbox:test": "pnpm build && playwright test --config playwright.config.ts",
|
|
53
|
+
"qa:sandbox:install-browser": "playwright install chromium",
|
|
45
54
|
"prepack": "pnpm clean && pnpm build && pnpm validate:release && node scripts/validate-package.mjs",
|
|
46
55
|
"test:package": "pnpm clean && pnpm build && node scripts/test-packed-package.mjs",
|
|
47
56
|
"test": "vitest run",
|
|
@@ -58,6 +67,7 @@
|
|
|
58
67
|
"devDependencies": {
|
|
59
68
|
"@eslint/js": "^9.39.2",
|
|
60
69
|
"@fission-ai/openspec": "1.4.1",
|
|
70
|
+
"@playwright/test": "^1.61.1",
|
|
61
71
|
"@testing-library/react": "^16.3.2",
|
|
62
72
|
"@testing-library/user-event": "^14.6.1",
|
|
63
73
|
"@types/node": "^24.10.1",
|