@openscout/scout 0.2.29 → 0.2.34
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/dist/control-plane-client/assets/index-DHW-M-8X.js +9 -0
- package/dist/control-plane-client/assets/index-OWiDN7qF.css +1 -0
- package/dist/control-plane-client/index.html +2 -2
- package/dist/main.mjs +50 -19
- package/dist/pair-supervisor.mjs +24 -14
- package/dist/scout-control-plane-web.mjs +39 -18
- package/dist/scout-web-server.mjs +37 -17
- package/package.json +2 -2
- package/dist/control-plane-client/assets/index-DEsi9Gmq.js +0 -9
- package/dist/control-plane-client/assets/index-SY_-C1vO.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg: #F9F9F8;--surface: #FFFFFF;--ink: #1C1C1A;--muted: #8A8A86;--dim: #C4C4C0;--border: #E4E4E2;--accent: #0066FF;--accent-soft: rgba(0, 102, 255, .08);--green: #22c55e;--red: #dc2626;--radius: 8px;--shadow-soft: rgba(24, 24, 22, .06);--sidebar-w: 280px;--font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--font-serif: "Spectral", Georgia, serif;font-family:var(--font-sans);font-size:13px;line-height:1.5;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}*{box-sizing:border-box;margin:0}body{margin:0}.s-app{display:flex;height:100vh;overflow:hidden}.s-sidebar{width:var(--sidebar-w);flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid var(--border);background:var(--surface);height:100vh;overflow:hidden}.s-content{flex:1;min-width:0;height:100vh;overflow-y:auto;background:var(--bg)}.s-sidebar-header{padding:16px 16px 12px;flex-shrink:0}.s-logo{font-family:var(--font-serif);font-size:18px;font-weight:600;letter-spacing:-.02em;cursor:pointer;-webkit-user-select:none;user-select:none}.s-sidebar-footer{flex-shrink:0;padding:8px;border-top:1px solid var(--border)}.s-nav-item{display:flex;align-items:center;gap:8px;width:100%;border:none;background:none;padding:6px 8px;border-radius:6px;font-family:var(--font-sans);font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;transition:background .12s ease,color .12s ease}.s-nav-item:hover{background:var(--bg);color:var(--ink)}.s-nav-item-active{background:var(--accent-soft);color:var(--accent)}.s-sidebar-label{padding:4px 16px 6px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--dim);flex-shrink:0}.s-sidebar-list{flex:1;overflow-y:auto;padding-bottom:12px}.s-sidebar-empty{padding:24px 16px;text-align:center;font-size:11px;color:var(--dim)}.s-sidebar-row{display:flex;align-items:center;gap:8px;padding:8px 12px;margin:0 6px;border-radius:6px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .1s ease}.s-sidebar-row:hover{background:var(--bg)}.s-sidebar-row-active,.s-sidebar-row-active:hover{background:var(--accent-soft)}.s-sidebar-row-body{flex:1;min-width:0}.s-sidebar-row-header{display:flex;align-items:center;gap:5px}.s-sidebar-row-name{font-size:12px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.s-sidebar-row-preview{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px;line-height:1.3}.s-sidebar-row-preview-empty{font-style:italic;color:var(--dim)}.s-sidebar-row-time{font-size:10px;color:var(--dim);font-family:var(--font-mono);flex-shrink:0;align-self:flex-start;margin-top:2px}.s-welcome{display:flex;align-items:center;justify-content:center;height:100%;color:var(--dim)}.s-welcome-inner{text-align:center}.s-welcome h2{font-family:var(--font-serif);font-size:24px;font-weight:600;color:var(--dim);margin-bottom:4px}.s-welcome p{font-size:12px}.s-home{padding:32px;height:100vh;overflow-y:auto}.s-home-header{margin-bottom:32px}.s-home-header h2{font-family:var(--font-serif);font-size:22px;font-weight:600;color:var(--ink);margin-bottom:4px}.s-home-header p{font-size:12px;color:var(--muted)}.s-home-section{margin-bottom:28px}.s-home-section-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--dim);margin-bottom:10px}.s-home-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;max-width:480px}.s-home-card-row{display:flex;align-items:center;gap:10px;padding:10px 14px;font-size:12px}.s-home-card-row+.s-home-card-row{border-top:1px solid var(--border)}.s-home-card-row-label{color:var(--muted);font-size:11px;min-width:80px;flex-shrink:0}.s-home-card-row-value{color:var(--ink);font-family:var(--font-mono);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-home-steps{list-style:none;padding:0;max-width:480px}.s-home-steps li{display:flex;align-items:baseline;gap:10px;padding:6px 0;font-size:12px;color:var(--ink);line-height:1.5}.s-home-steps li:before{content:attr(data-step);font-size:10px;font-weight:700;font-family:var(--font-mono);color:var(--muted);flex-shrink:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--bg);border:1px solid var(--border)}.s-home-steps code{font-family:var(--font-mono);font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:1px 5px}.s-home-card-row-clickable{cursor:pointer;transition:background .1s ease}.s-home-card-row-clickable:hover{background:var(--bg)}.s-activity-stream{max-width:560px}.s-activity-row{display:flex;align-items:baseline;gap:8px;padding:4px 0;font-size:12px;line-height:1.5}.s-activity-row-clickable{cursor:pointer;border-radius:4px;padding:4px 6px;margin:0 -6px;transition:background .1s ease}.s-activity-row-clickable:hover{background:var(--surface)}.s-activity-time{font-size:10px;color:var(--dim);font-family:var(--font-mono);flex-shrink:0;min-width:36px}.s-activity-actor{font-weight:600;color:var(--ink);flex-shrink:0}.s-activity-kind{color:var(--muted)}.s-activity-title{color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-activity-list{max-width:560px}.s-activity-list-row{display:flex;align-items:flex-start;gap:10px;padding:8px 0}.s-activity-list-item+.s-activity-list-item{border-top:1px solid var(--border)}.s-activity-list-row-clickable{cursor:pointer;border-radius:6px;padding:8px;margin:0 -8px;transition:background .1s ease}.s-activity-list-row-clickable:hover{background:var(--surface)}.s-activity-list-body{flex:1;min-width:0}.s-activity-list-header{display:flex;align-items:baseline;gap:6px}.s-activity-list-actor{font-size:12px;font-weight:600;color:var(--ink)}.s-activity-list-kind{font-size:11px;color:var(--muted)}.s-activity-list-title{font-size:12px;color:var(--ink);margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.s-activity-list-summary{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.s-activity-expanded{padding:4px 8px 12px 38px}.s-activity-expanded-summary{font-size:12px;color:var(--ink);margin-bottom:8px;line-height:1.4}.s-activity-expanded-meta{display:flex;gap:8px;font-size:11px;padding:2px 0}.s-activity-meta-label{color:var(--muted);min-width:56px}.s-activity-meta-value{color:var(--ink);word-break:break-all}.s-activity-expanded-actions{margin-top:8px}.s-btn-sm{font-size:11px;padding:4px 10px}.s-error{color:var(--red);font-size:12px;padding:8px 12px;background:#fef2f2;border:1px solid #fecaca;border-radius:var(--radius);margin:12px}.s-empty{padding:32px 0;color:var(--muted);font-size:12px}.s-empty p:first-child{font-size:13px;font-weight:500;color:var(--ink);margin-bottom:4px}.s-meta{font-size:11px;color:var(--muted);font-family:var(--font-mono)}.s-spacer{flex:1}.s-dot{display:inline-block;width:6px;height:6px;border-radius:50%;flex-shrink:0}.s-dot-sm{width:5px;height:5px}.s-badge{font-size:10px;font-family:var(--font-mono);color:var(--muted);background:var(--bg);border-radius:4px;padding:1px 6px;flex-shrink:0;text-transform:uppercase;letter-spacing:.04em}.s-time{font-size:10px;color:var(--dim);font-family:var(--font-mono);flex-shrink:0;letter-spacing:.01em}.s-back{border:none;background:none;padding:0;font-family:var(--font-sans);font-size:12px;font-weight:500;color:var(--muted);cursor:pointer;transition:color .12s ease}.s-back:hover{color:var(--ink)}.s-chevron{width:12px;height:12px;flex-shrink:0;position:relative;opacity:.3;transition:opacity .14s ease}.s-chevron:before{content:"";position:absolute;top:3px;left:2px;width:6px;height:6px;border-right:1.5px solid var(--ink);border-bottom:1.5px solid var(--ink);transform:rotate(-45deg)}.s-avatar{width:32px;height:32px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:#fff}.s-avatar-sm{width:28px;height:28px;font-size:11px}.s-avatar-lg{width:56px;height:56px;font-size:20px}.s-conversation{display:flex;flex-direction:column;height:100vh}.s-conv-header{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .12s ease}.s-conv-header:hover{background:#f6f6f5}.s-conv-header .s-back{margin-right:2px;font-size:16px;line-height:1}.s-conv-header-info{flex:1;min-width:0}.s-conv-header-name{font-size:13px;font-weight:600;color:var(--ink)}.s-conv-header-state{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);margin-top:1px}.s-conv-status{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid var(--border);flex-shrink:0}.s-conv-status-pending{background:#0066ff0f;border-bottom-color:#0066ff1f}.s-conv-status-working{background:#22c55e0f;border-bottom-color:#22c55e24}.s-conv-status-offline{background:#1118270a;border-bottom-color:#11182714}.s-conv-status-dot{width:8px;height:8px;border-radius:50%;background:currentColor;color:var(--accent);flex-shrink:0}.s-conv-status-working .s-conv-status-dot{color:var(--green);animation:s-pulse 1.4s ease-in-out infinite}.s-conv-status-offline .s-conv-status-dot{color:var(--dim)}.s-conv-status-copy{display:flex;flex-direction:column;min-width:0;gap:2px}.s-conv-status-label{font-size:11px;font-weight:700;color:var(--ink)}.s-conv-status-detail{font-size:11px;color:var(--muted);line-height:1.4}.s-messages{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:6px}.s-msg{max-width:85%;align-self:flex-start}.s-msg-you{align-self:flex-end}.s-msg-header{display:flex;align-items:baseline;gap:6px;margin-bottom:2px;padding:0 2px}.s-msg-actor{font-size:11px;font-weight:600;color:var(--ink)}.s-msg-time{font-size:10px;color:var(--dim);font-family:var(--font-mono)}.s-msg-body{font-size:12px;line-height:1.5;color:var(--ink);white-space:pre-wrap;word-break:break-word;padding:8px 12px;border-radius:14px 14px 14px 4px;background:var(--surface);border:1px solid var(--border)}.s-msg-you .s-msg-body{border-radius:14px 14px 4px;background:var(--accent-soft);border-color:#0066ff1f}.s-msg-you .s-msg-header{justify-content:flex-end}.s-msg-working{max-width:85%;align-self:flex-start}.s-msg-working-body{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px 14px 14px 4px;background:linear-gradient(135deg,#22c55e14,#22c55e0a);border:1px solid rgba(34,197,94,.14)}.s-msg-working-copy{font-size:12px;line-height:1.45;color:var(--ink)}.s-typing-indicator{display:inline-flex;align-items:center;gap:4px;flex-shrink:0}.s-typing-dot{width:6px;height:6px;border-radius:50%;background:var(--green);opacity:.35;animation:s-typing-bounce 1.1s ease-in-out infinite}.s-typing-dot:nth-child(2){animation-delay:.14s}.s-typing-dot:nth-child(3){animation-delay:.28s}@keyframes s-typing-bounce{0%,80%,to{opacity:.35;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}.s-compose{display:flex;align-items:flex-end;gap:8px;padding:10px 20px;border-top:1px solid var(--border);background:var(--bg);flex-shrink:0}.s-compose-input{flex:1;border:1px solid var(--border);background:var(--surface);border-radius:20px;min-height:40px;max-height:160px;padding:10px 14px;font-family:var(--font-sans);font-size:12px;line-height:1.45;color:var(--ink);outline:none;transition:border-color .12s ease;resize:none;overflow-y:hidden;white-space:pre-wrap}.s-compose-input:focus{border-color:var(--accent)}.s-compose-input:disabled{opacity:.5;cursor:not-allowed}.s-compose-send{width:32px;height:32px;border-radius:50%;border:none;background:var(--ink);color:#fff;font-size:14px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:opacity .12s ease}.s-compose-send svg{display:block}.s-compose-send:disabled{opacity:.3;cursor:not-allowed}.s-agent-profile{display:flex;flex-direction:column;align-items:flex-start;padding:8px 0 16px;gap:4px}.s-agent-profile-name{font-size:18px;font-weight:600;color:var(--ink);margin-top:8px}.s-agent-profile-handle{font-size:12px;font-family:var(--font-mono);color:var(--muted)}.s-agent-profile-state{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);margin-top:4px}.s-agent-details{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-top:16px;max-width:480px}.s-detail-row{display:flex;align-items:baseline;justify-content:space-between;padding:7px 14px;font-size:12px;gap:12px}.s-detail-row+.s-detail-row{border-top:1px solid var(--border)}.s-detail-label{color:var(--muted);flex-shrink:0;font-size:11px}.s-detail-value{color:var(--ink);font-family:var(--font-mono);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-section-title{font-size:15px;font-weight:600;color:var(--ink);margin-bottom:16px}.s-actions{display:flex;gap:8px;margin-bottom:16px}.s-btn{border:1px solid var(--border);background:var(--surface);padding:6px 14px;border-radius:var(--radius);font-family:var(--font-sans);font-size:12px;font-weight:500;cursor:pointer;transition:all .14s cubic-bezier(.16,1,.3,1)}.s-btn:hover{border-color:var(--dim);box-shadow:0 1px 2px var(--shadow-soft)}.s-btn:disabled{opacity:.4;cursor:not-allowed}.s-btn-primary{background:var(--ink);color:var(--bg);border-color:var(--ink)}.s-btn-primary:hover{background:#2a2a28;box-shadow:0 2px 6px var(--shadow-soft)}.s-qr{max-width:240px;margin:20px 0;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:0 2px 6px var(--shadow-soft)}.s-qr svg{display:block;width:100%;height:auto}.s-pair-meta{max-width:360px;margin:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.s-pair-row{display:flex;align-items:center;justify-content:space-between;padding:7px 14px;font-size:12px}.s-pair-row+.s-pair-row{border-top:1px solid var(--border)}.s-pair-label{color:var(--muted);flex-shrink:0}.s-pair-value{display:flex;align-items:center;color:var(--ink);text-align:right;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-pair-mono{font-family:var(--font-mono);font-size:11px}.s-sidebar-nav{padding:0 8px 4px;flex-shrink:0}.s-nav-badge{font-size:10px;font-weight:600;font-family:var(--font-mono);color:#fff;background:var(--green);border-radius:10px;padding:0 6px;min-width:18px;text-align:center;line-height:16px;margin-left:auto}.s-sidebar-avatar-wrap{position:relative;flex-shrink:0}.s-task-indicator{position:absolute;bottom:-1px;right:-1px;width:8px;height:8px;border-radius:50%;background:var(--green);border:2px solid var(--surface)}.s-sidebar-row-active .s-task-indicator{border-color:#0066ff14}.s-flight-banner{display:flex;align-items:center;gap:6px;padding:6px 20px;background:#22c55e0f;border-bottom:1px solid rgba(34,197,94,.12);font-size:11px;flex-shrink:0}.s-flight-banner-dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex-shrink:0;animation:s-pulse 2s ease-in-out infinite}@keyframes s-pulse{0%,to{opacity:1}50%{opacity:.4}}.s-flight-banner-label{font-weight:600;color:var(--ink)}.s-flight-banner-summary{color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-flights{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.s-flight-row{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--surface);cursor:pointer;transition:background .12s ease}.s-flight-row:hover{background:#f6f6f5}.s-flight-row+.s-flight-row{border-top:1px solid var(--border)}.s-flight-body{flex:1;min-width:0}.s-flight-header{display:flex;align-items:center;gap:6px}.s-flight-name{font-size:12px;font-weight:600;color:var(--ink)}.s-flight-state{font-size:11px;font-family:var(--font-mono);font-weight:500}.s-flight-summary{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.s-content>div:not(.s-conversation):not(.s-welcome):not(.s-home):not(.s-agents-layout){padding:24px 32px;max-width:640px}.s-agents-layout{display:flex;height:100vh;overflow:hidden}.s-agents-list-panel{width:100%;height:100vh;overflow-y:auto;padding:24px 16px;transition:width .15s ease}.s-agents-layout-split .s-agents-list-panel{width:280px;flex-shrink:0;border-right:1px solid var(--border);padding:16px 8px}.s-agents-detail-panel{flex:1;min-width:0;height:100vh;overflow-y:auto;padding:24px 32px}.s-agent-list-row{display:flex;align-items:center;gap:10px;padding:8px;border-radius:6px;cursor:pointer;transition:background .1s ease}.s-agent-list-row:hover{background:var(--bg)}.s-agent-list-row-active,.s-agent-list-row-active:hover{background:var(--accent-soft)}.s-agent-list-body{flex:1;min-width:0}.s-agent-list-header{display:flex;align-items:center;gap:5px}.s-agent-list-name{font-size:12px;font-weight:600;color:var(--ink)}.s-agent-list-qualifier{font-size:10px;font-family:var(--font-mono);color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-agent-list-meta{display:flex;align-items:center;gap:8px;margin-top:1px;font-size:11px;color:var(--muted)}.s-agent-list-meta span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.s-agent-detail-header{display:flex;align-items:center;gap:16px;margin-bottom:20px}.s-agent-detail-name{font-size:18px;font-weight:600;color:var(--ink);display:flex;align-items:baseline;gap:8px}.s-agent-detail-qualifier{font-size:12px;font-family:var(--font-mono);color:var(--dim);font-weight:400}.s-agent-detail-state{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);margin-top:2px}.s-agent-detail-meta{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;max-width:480px}.s-agent-detail-section{margin-top:20px}.s-agent-detail-messages{max-width:480px}.s-agent-detail-msg{display:flex;align-items:baseline;gap:6px;padding:4px 0;font-size:12px}.s-agent-detail-msg-clickable{cursor:pointer;border-radius:4px;margin:0 -4px;padding:4px}.s-agent-detail-msg-clickable:hover{background:var(--hover)}.s-agent-detail-msg+.s-agent-detail-msg{border-top:1px solid var(--border)}.s-agent-detail-msg-actor{font-weight:600;color:var(--ink);flex-shrink:0}.s-agent-detail-msg-body{color:var(--muted);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:767px){.s-sidebar{width:100%;position:absolute;inset:0;z-index:20;transition:transform .2s cubic-bezier(.16,1,.3,1)}.s-content{position:absolute;inset:0;z-index:10;transform:translate(100%);transition:transform .2s cubic-bezier(.16,1,.3,1)}.s-app{position:relative}.s-app-content-open .s-sidebar{transform:translate(-100%)}.s-app-content-open .s-content{transform:translate(0)}.s-conv-header .s-back{display:block}}@media(min-width:768px){.s-conv-header .s-back{display:none}}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&family=Spectral:wght@500;600&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-DHW-M-8X.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-OWiDN7qF.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
package/dist/main.mjs
CHANGED
|
@@ -547,35 +547,44 @@ function parseSegmentedIdentity(raw) {
|
|
|
547
547
|
const next = {
|
|
548
548
|
definitionId: definitionPart
|
|
549
549
|
};
|
|
550
|
-
|
|
550
|
+
const positional = [];
|
|
551
551
|
for (const part of parts) {
|
|
552
552
|
if (part.includes(":")) {
|
|
553
553
|
const [rawKey, rawValue = ""] = part.split(":", 2);
|
|
554
554
|
const key = normalizeDimensionKey(rawKey);
|
|
555
|
-
const
|
|
556
|
-
if (!key || !
|
|
555
|
+
const value = normalizeAgentIdentitySegment(rawValue);
|
|
556
|
+
if (!key || !value) {
|
|
557
557
|
return null;
|
|
558
558
|
}
|
|
559
559
|
if (key === "workspace") {
|
|
560
|
-
next.workspaceQualifier =
|
|
560
|
+
next.workspaceQualifier = value;
|
|
561
561
|
} else if (key === "profile") {
|
|
562
|
-
next.profile =
|
|
562
|
+
next.profile = value;
|
|
563
563
|
} else if (key === "harness") {
|
|
564
|
-
next.harness =
|
|
564
|
+
next.harness = value;
|
|
565
565
|
} else if (key === "node") {
|
|
566
|
-
next.nodeQualifier =
|
|
566
|
+
next.nodeQualifier = value;
|
|
567
567
|
}
|
|
568
568
|
continue;
|
|
569
569
|
}
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
const value = normalizeAgentIdentitySegment(
|
|
574
|
-
if (!value)
|
|
570
|
+
positional.push(part);
|
|
571
|
+
}
|
|
572
|
+
if (positional.length === 1) {
|
|
573
|
+
const value = normalizeAgentIdentitySegment(positional[0]);
|
|
574
|
+
if (!value)
|
|
575
575
|
return null;
|
|
576
|
-
}
|
|
577
576
|
next.workspaceQualifier = value;
|
|
578
|
-
|
|
577
|
+
} else if (positional.length === 2) {
|
|
578
|
+
const nodeValue = normalizeAgentIdentitySegment(positional[0]);
|
|
579
|
+
const workspaceValue = normalizeAgentIdentitySegment(positional[1]);
|
|
580
|
+
if (!nodeValue || !workspaceValue)
|
|
581
|
+
return null;
|
|
582
|
+
if (!next.nodeQualifier)
|
|
583
|
+
next.nodeQualifier = nodeValue;
|
|
584
|
+
if (!next.workspaceQualifier)
|
|
585
|
+
next.workspaceQualifier = workspaceValue;
|
|
586
|
+
} else if (positional.length > 2) {
|
|
587
|
+
return null;
|
|
579
588
|
}
|
|
580
589
|
return constructAgentIdentity(next, { raw });
|
|
581
590
|
}
|
|
@@ -626,16 +635,26 @@ function constructAgentIdentity(input, options = {}) {
|
|
|
626
635
|
};
|
|
627
636
|
}
|
|
628
637
|
function extractAgentIdentities(text) {
|
|
638
|
+
return extractAgentMentions(text).parsed;
|
|
639
|
+
}
|
|
640
|
+
function extractAgentMentions(text) {
|
|
629
641
|
const matches = Array.from(text.matchAll(/(^|\s)@([a-z0-9][a-z0-9._/:-]*)/gi));
|
|
630
642
|
const identities = new Map;
|
|
643
|
+
const unparsed = [];
|
|
631
644
|
for (const match of matches) {
|
|
632
|
-
const
|
|
645
|
+
const raw = match[2] ?? "";
|
|
646
|
+
const candidate = parseAgentIdentity(raw);
|
|
633
647
|
if (!candidate) {
|
|
648
|
+
if (raw)
|
|
649
|
+
unparsed.push(`@${raw}`);
|
|
634
650
|
continue;
|
|
635
651
|
}
|
|
636
652
|
identities.set(candidate.label, candidate);
|
|
637
653
|
}
|
|
638
|
-
return
|
|
654
|
+
return {
|
|
655
|
+
parsed: Array.from(identities.values()),
|
|
656
|
+
unparsed: Array.from(new Set(unparsed))
|
|
657
|
+
};
|
|
639
658
|
}
|
|
640
659
|
function candidateAliases(candidate) {
|
|
641
660
|
const canonical = canonicalizeIdentity({
|
|
@@ -7736,9 +7755,10 @@ function scoutConversationIdForChannel(channel) {
|
|
|
7736
7755
|
return `channel.${sanitizeConversationSegment(normalizedChannel)}`;
|
|
7737
7756
|
}
|
|
7738
7757
|
async function resolveMentionTargets(snapshot, text, currentDirectory) {
|
|
7739
|
-
const
|
|
7758
|
+
const mentions = extractAgentMentions(text);
|
|
7759
|
+
const selectors = mentions.parsed;
|
|
7740
7760
|
const resolved = new Map;
|
|
7741
|
-
const unresolved = [];
|
|
7761
|
+
const unresolved = [...mentions.unparsed];
|
|
7742
7762
|
const candidateMap = new Map;
|
|
7743
7763
|
const endpointBackedAgentIds = [...new Set(Object.values(snapshot.endpoints).map((endpoint) => endpoint.agentId).filter((agentId) => agentId && agentId !== OPERATOR_ID))];
|
|
7744
7764
|
for (const agent of Object.values(snapshot.agents)) {
|
|
@@ -7957,6 +7977,7 @@ async function resolveConversationActorId(baseUrl, snapshot, nodeId, actorId, cu
|
|
|
7957
7977
|
await syncBrokerBinding(baseUrl, snapshot, binding);
|
|
7958
7978
|
return binding.actor.id;
|
|
7959
7979
|
}
|
|
7980
|
+
await syncBrokerAgentRegistration(baseUrl, snapshot, scoutBrokerAgentRegistrationFromConfig(configured, nodeId));
|
|
7960
7981
|
return configured.agentId;
|
|
7961
7982
|
}
|
|
7962
7983
|
async function ensureTargetRelayAgentRegistered(baseUrl, snapshot, nodeId, agentId, currentDirectory) {
|
|
@@ -9462,6 +9483,16 @@ async function runScoutSetup(input) {
|
|
|
9462
9483
|
brokerWarning = error instanceof Error ? error.message : String(error);
|
|
9463
9484
|
broker = await getRuntimeBrokerServiceStatus();
|
|
9464
9485
|
}
|
|
9486
|
+
if (broker.reachable && broker.brokerUrl) {
|
|
9487
|
+
try {
|
|
9488
|
+
await fetch(new URL("/v1/mesh/discover", broker.brokerUrl), {
|
|
9489
|
+
method: "POST",
|
|
9490
|
+
headers: { "content-type": "application/json" },
|
|
9491
|
+
body: "{}",
|
|
9492
|
+
signal: AbortSignal.timeout(1e4)
|
|
9493
|
+
});
|
|
9494
|
+
} catch {}
|
|
9495
|
+
}
|
|
9465
9496
|
return {
|
|
9466
9497
|
currentDirectory: input.currentDirectory,
|
|
9467
9498
|
setup,
|
|
@@ -99624,7 +99655,7 @@ function renderScoutHelp(version2 = "0.2.18") {
|
|
|
99624
99655
|
init_options();
|
|
99625
99656
|
|
|
99626
99657
|
// ../../apps/desktop/src/shared/product.ts
|
|
99627
|
-
var SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.
|
|
99658
|
+
var SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.34";
|
|
99628
99659
|
|
|
99629
99660
|
// ../../apps/desktop/src/cli/main.ts
|
|
99630
99661
|
async function main3() {
|
package/dist/pair-supervisor.mjs
CHANGED
|
@@ -2115,35 +2115,44 @@ function parseSegmentedIdentity(raw) {
|
|
|
2115
2115
|
const next = {
|
|
2116
2116
|
definitionId: definitionPart
|
|
2117
2117
|
};
|
|
2118
|
-
|
|
2118
|
+
const positional = [];
|
|
2119
2119
|
for (const part of parts) {
|
|
2120
2120
|
if (part.includes(":")) {
|
|
2121
2121
|
const [rawKey, rawValue = ""] = part.split(":", 2);
|
|
2122
2122
|
const key = normalizeDimensionKey(rawKey);
|
|
2123
|
-
const
|
|
2124
|
-
if (!key || !
|
|
2123
|
+
const value = normalizeAgentIdentitySegment(rawValue);
|
|
2124
|
+
if (!key || !value) {
|
|
2125
2125
|
return null;
|
|
2126
2126
|
}
|
|
2127
2127
|
if (key === "workspace") {
|
|
2128
|
-
next.workspaceQualifier =
|
|
2128
|
+
next.workspaceQualifier = value;
|
|
2129
2129
|
} else if (key === "profile") {
|
|
2130
|
-
next.profile =
|
|
2130
|
+
next.profile = value;
|
|
2131
2131
|
} else if (key === "harness") {
|
|
2132
|
-
next.harness =
|
|
2132
|
+
next.harness = value;
|
|
2133
2133
|
} else if (key === "node") {
|
|
2134
|
-
next.nodeQualifier =
|
|
2134
|
+
next.nodeQualifier = value;
|
|
2135
2135
|
}
|
|
2136
2136
|
continue;
|
|
2137
2137
|
}
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
const value = normalizeAgentIdentitySegment(
|
|
2142
|
-
if (!value)
|
|
2138
|
+
positional.push(part);
|
|
2139
|
+
}
|
|
2140
|
+
if (positional.length === 1) {
|
|
2141
|
+
const value = normalizeAgentIdentitySegment(positional[0]);
|
|
2142
|
+
if (!value)
|
|
2143
2143
|
return null;
|
|
2144
|
-
}
|
|
2145
2144
|
next.workspaceQualifier = value;
|
|
2146
|
-
|
|
2145
|
+
} else if (positional.length === 2) {
|
|
2146
|
+
const nodeValue = normalizeAgentIdentitySegment(positional[0]);
|
|
2147
|
+
const workspaceValue = normalizeAgentIdentitySegment(positional[1]);
|
|
2148
|
+
if (!nodeValue || !workspaceValue)
|
|
2149
|
+
return null;
|
|
2150
|
+
if (!next.nodeQualifier)
|
|
2151
|
+
next.nodeQualifier = nodeValue;
|
|
2152
|
+
if (!next.workspaceQualifier)
|
|
2153
|
+
next.workspaceQualifier = workspaceValue;
|
|
2154
|
+
} else if (positional.length > 2) {
|
|
2155
|
+
return null;
|
|
2147
2156
|
}
|
|
2148
2157
|
return constructAgentIdentity(next, { raw });
|
|
2149
2158
|
}
|
|
@@ -12338,6 +12347,7 @@ async function resolveConversationActorId(baseUrl, snapshot, nodeId, actorId, cu
|
|
|
12338
12347
|
await syncBrokerBinding(baseUrl, snapshot, binding);
|
|
12339
12348
|
return binding.actor.id;
|
|
12340
12349
|
}
|
|
12350
|
+
await syncBrokerAgentRegistration(baseUrl, snapshot, scoutBrokerAgentRegistrationFromConfig(configured, nodeId));
|
|
12341
12351
|
return configured.agentId;
|
|
12342
12352
|
}
|
|
12343
12353
|
async function ensureTargetRelayAgentRegistered(baseUrl, snapshot, nodeId, agentId, currentDirectory) {
|
|
@@ -1022,35 +1022,44 @@ function parseSegmentedIdentity(raw2) {
|
|
|
1022
1022
|
const next = {
|
|
1023
1023
|
definitionId: definitionPart
|
|
1024
1024
|
};
|
|
1025
|
-
|
|
1025
|
+
const positional = [];
|
|
1026
1026
|
for (const part of parts) {
|
|
1027
1027
|
if (part.includes(":")) {
|
|
1028
1028
|
const [rawKey, rawValue = ""] = part.split(":", 2);
|
|
1029
1029
|
const key = normalizeDimensionKey(rawKey);
|
|
1030
|
-
const
|
|
1031
|
-
if (!key || !
|
|
1030
|
+
const value = normalizeAgentIdentitySegment(rawValue);
|
|
1031
|
+
if (!key || !value) {
|
|
1032
1032
|
return null;
|
|
1033
1033
|
}
|
|
1034
1034
|
if (key === "workspace") {
|
|
1035
|
-
next.workspaceQualifier =
|
|
1035
|
+
next.workspaceQualifier = value;
|
|
1036
1036
|
} else if (key === "profile") {
|
|
1037
|
-
next.profile =
|
|
1037
|
+
next.profile = value;
|
|
1038
1038
|
} else if (key === "harness") {
|
|
1039
|
-
next.harness =
|
|
1039
|
+
next.harness = value;
|
|
1040
1040
|
} else if (key === "node") {
|
|
1041
|
-
next.nodeQualifier =
|
|
1041
|
+
next.nodeQualifier = value;
|
|
1042
1042
|
}
|
|
1043
1043
|
continue;
|
|
1044
1044
|
}
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
const value = normalizeAgentIdentitySegment(
|
|
1049
|
-
if (!value)
|
|
1045
|
+
positional.push(part);
|
|
1046
|
+
}
|
|
1047
|
+
if (positional.length === 1) {
|
|
1048
|
+
const value = normalizeAgentIdentitySegment(positional[0]);
|
|
1049
|
+
if (!value)
|
|
1050
1050
|
return null;
|
|
1051
|
-
}
|
|
1052
1051
|
next.workspaceQualifier = value;
|
|
1053
|
-
|
|
1052
|
+
} else if (positional.length === 2) {
|
|
1053
|
+
const nodeValue = normalizeAgentIdentitySegment(positional[0]);
|
|
1054
|
+
const workspaceValue = normalizeAgentIdentitySegment(positional[1]);
|
|
1055
|
+
if (!nodeValue || !workspaceValue)
|
|
1056
|
+
return null;
|
|
1057
|
+
if (!next.nodeQualifier)
|
|
1058
|
+
next.nodeQualifier = nodeValue;
|
|
1059
|
+
if (!next.workspaceQualifier)
|
|
1060
|
+
next.workspaceQualifier = workspaceValue;
|
|
1061
|
+
} else if (positional.length > 2) {
|
|
1062
|
+
return null;
|
|
1054
1063
|
}
|
|
1055
1064
|
return constructAgentIdentity(next, { raw: raw2 });
|
|
1056
1065
|
}
|
|
@@ -1101,16 +1110,26 @@ function constructAgentIdentity(input, options = {}) {
|
|
|
1101
1110
|
};
|
|
1102
1111
|
}
|
|
1103
1112
|
function extractAgentIdentities(text) {
|
|
1113
|
+
return extractAgentMentions(text).parsed;
|
|
1114
|
+
}
|
|
1115
|
+
function extractAgentMentions(text) {
|
|
1104
1116
|
const matches = Array.from(text.matchAll(/(^|\s)@([a-z0-9][a-z0-9._/:-]*)/gi));
|
|
1105
1117
|
const identities = new Map;
|
|
1118
|
+
const unparsed = [];
|
|
1106
1119
|
for (const match2 of matches) {
|
|
1107
|
-
const
|
|
1120
|
+
const raw2 = match2[2] ?? "";
|
|
1121
|
+
const candidate = parseAgentIdentity(raw2);
|
|
1108
1122
|
if (!candidate) {
|
|
1123
|
+
if (raw2)
|
|
1124
|
+
unparsed.push(`@${raw2}`);
|
|
1109
1125
|
continue;
|
|
1110
1126
|
}
|
|
1111
1127
|
identities.set(candidate.label, candidate);
|
|
1112
1128
|
}
|
|
1113
|
-
return
|
|
1129
|
+
return {
|
|
1130
|
+
parsed: Array.from(identities.values()),
|
|
1131
|
+
unparsed: Array.from(new Set(unparsed))
|
|
1132
|
+
};
|
|
1114
1133
|
}
|
|
1115
1134
|
function candidateAliases(candidate) {
|
|
1116
1135
|
const canonical = canonicalizeIdentity({
|
|
@@ -7669,9 +7688,10 @@ async function loadScoutBrokerContext(baseUrl = resolveScoutBrokerUrl()) {
|
|
|
7669
7688
|
}
|
|
7670
7689
|
}
|
|
7671
7690
|
async function resolveMentionTargets(snapshot, text, currentDirectory) {
|
|
7672
|
-
const
|
|
7691
|
+
const mentions = extractAgentMentions(text);
|
|
7692
|
+
const selectors = mentions.parsed;
|
|
7673
7693
|
const resolved = new Map;
|
|
7674
|
-
const unresolved = [];
|
|
7694
|
+
const unresolved = [...mentions.unparsed];
|
|
7675
7695
|
const candidateMap = new Map;
|
|
7676
7696
|
const endpointBackedAgentIds = [...new Set(Object.values(snapshot.endpoints).map((endpoint) => endpoint.agentId).filter((agentId) => agentId && agentId !== OPERATOR_ID))];
|
|
7677
7697
|
for (const agent of Object.values(snapshot.agents)) {
|
|
@@ -7838,6 +7858,7 @@ async function resolveConversationActorId(baseUrl, snapshot, nodeId, actorId, cu
|
|
|
7838
7858
|
await syncBrokerBinding(baseUrl, snapshot, binding);
|
|
7839
7859
|
return binding.actor.id;
|
|
7840
7860
|
}
|
|
7861
|
+
await syncBrokerAgentRegistration(baseUrl, snapshot, scoutBrokerAgentRegistrationFromConfig(configured, nodeId));
|
|
7841
7862
|
return configured.agentId;
|
|
7842
7863
|
}
|
|
7843
7864
|
async function ensureTargetRelayAgentRegistered(baseUrl, snapshot, nodeId, agentId, currentDirectory) {
|
|
@@ -1023,35 +1023,44 @@ function parseSegmentedIdentity(raw2) {
|
|
|
1023
1023
|
const next = {
|
|
1024
1024
|
definitionId: definitionPart
|
|
1025
1025
|
};
|
|
1026
|
-
|
|
1026
|
+
const positional = [];
|
|
1027
1027
|
for (const part of parts) {
|
|
1028
1028
|
if (part.includes(":")) {
|
|
1029
1029
|
const [rawKey, rawValue = ""] = part.split(":", 2);
|
|
1030
1030
|
const key = normalizeDimensionKey(rawKey);
|
|
1031
|
-
const
|
|
1032
|
-
if (!key || !
|
|
1031
|
+
const value = normalizeAgentIdentitySegment(rawValue);
|
|
1032
|
+
if (!key || !value) {
|
|
1033
1033
|
return null;
|
|
1034
1034
|
}
|
|
1035
1035
|
if (key === "workspace") {
|
|
1036
|
-
next.workspaceQualifier =
|
|
1036
|
+
next.workspaceQualifier = value;
|
|
1037
1037
|
} else if (key === "profile") {
|
|
1038
|
-
next.profile =
|
|
1038
|
+
next.profile = value;
|
|
1039
1039
|
} else if (key === "harness") {
|
|
1040
|
-
next.harness =
|
|
1040
|
+
next.harness = value;
|
|
1041
1041
|
} else if (key === "node") {
|
|
1042
|
-
next.nodeQualifier =
|
|
1042
|
+
next.nodeQualifier = value;
|
|
1043
1043
|
}
|
|
1044
1044
|
continue;
|
|
1045
1045
|
}
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
const value = normalizeAgentIdentitySegment(
|
|
1050
|
-
if (!value)
|
|
1046
|
+
positional.push(part);
|
|
1047
|
+
}
|
|
1048
|
+
if (positional.length === 1) {
|
|
1049
|
+
const value = normalizeAgentIdentitySegment(positional[0]);
|
|
1050
|
+
if (!value)
|
|
1051
1051
|
return null;
|
|
1052
|
-
}
|
|
1053
1052
|
next.workspaceQualifier = value;
|
|
1054
|
-
|
|
1053
|
+
} else if (positional.length === 2) {
|
|
1054
|
+
const nodeValue = normalizeAgentIdentitySegment(positional[0]);
|
|
1055
|
+
const workspaceValue = normalizeAgentIdentitySegment(positional[1]);
|
|
1056
|
+
if (!nodeValue || !workspaceValue)
|
|
1057
|
+
return null;
|
|
1058
|
+
if (!next.nodeQualifier)
|
|
1059
|
+
next.nodeQualifier = nodeValue;
|
|
1060
|
+
if (!next.workspaceQualifier)
|
|
1061
|
+
next.workspaceQualifier = workspaceValue;
|
|
1062
|
+
} else if (positional.length > 2) {
|
|
1063
|
+
return null;
|
|
1055
1064
|
}
|
|
1056
1065
|
return constructAgentIdentity(next, { raw: raw2 });
|
|
1057
1066
|
}
|
|
@@ -1102,16 +1111,26 @@ function constructAgentIdentity(input, options = {}) {
|
|
|
1102
1111
|
};
|
|
1103
1112
|
}
|
|
1104
1113
|
function extractAgentIdentities(text) {
|
|
1114
|
+
return extractAgentMentions(text).parsed;
|
|
1115
|
+
}
|
|
1116
|
+
function extractAgentMentions(text) {
|
|
1105
1117
|
const matches = Array.from(text.matchAll(/(^|\s)@([a-z0-9][a-z0-9._/:-]*)/gi));
|
|
1106
1118
|
const identities = new Map;
|
|
1119
|
+
const unparsed = [];
|
|
1107
1120
|
for (const match2 of matches) {
|
|
1108
|
-
const
|
|
1121
|
+
const raw2 = match2[2] ?? "";
|
|
1122
|
+
const candidate = parseAgentIdentity(raw2);
|
|
1109
1123
|
if (!candidate) {
|
|
1124
|
+
if (raw2)
|
|
1125
|
+
unparsed.push(`@${raw2}`);
|
|
1110
1126
|
continue;
|
|
1111
1127
|
}
|
|
1112
1128
|
identities.set(candidate.label, candidate);
|
|
1113
1129
|
}
|
|
1114
|
-
return
|
|
1130
|
+
return {
|
|
1131
|
+
parsed: Array.from(identities.values()),
|
|
1132
|
+
unparsed: Array.from(new Set(unparsed))
|
|
1133
|
+
};
|
|
1115
1134
|
}
|
|
1116
1135
|
function candidateAliases(candidate) {
|
|
1117
1136
|
const canonical = canonicalizeIdentity({
|
|
@@ -8024,7 +8043,7 @@ init_setup();
|
|
|
8024
8043
|
|
|
8025
8044
|
// apps/desktop/src/shared/product.ts
|
|
8026
8045
|
var SCOUT_PRODUCT_NAME = "Scout";
|
|
8027
|
-
var SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.
|
|
8046
|
+
var SCOUT_APP_VERSION = process.env.SCOUT_APP_VERSION?.trim() || "0.2.34";
|
|
8028
8047
|
|
|
8029
8048
|
// apps/desktop/src/shared/surface-capabilities.ts
|
|
8030
8049
|
function resolveScoutSurfaceCapabilities(surface) {
|
|
@@ -8543,6 +8562,7 @@ async function resolveConversationActorId(baseUrl, snapshot, nodeId, actorId, cu
|
|
|
8543
8562
|
await syncBrokerBinding(baseUrl, snapshot, binding);
|
|
8544
8563
|
return binding.actor.id;
|
|
8545
8564
|
}
|
|
8565
|
+
await syncBrokerAgentRegistration(baseUrl, snapshot, scoutBrokerAgentRegistrationFromConfig(configured, nodeId));
|
|
8546
8566
|
return configured.agentId;
|
|
8547
8567
|
}
|
|
8548
8568
|
async function ensureTargetRelayAgentRegistered(baseUrl, snapshot, nodeId, agentId, currentDirectory) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openscout/scout",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.34",
|
|
4
4
|
"description": "Published Scout package that installs the `scout` command",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -23,6 +23,6 @@
|
|
|
23
23
|
"access": "public"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@openscout/runtime": "0.2.
|
|
26
|
+
"@openscout/runtime": "0.2.34"
|
|
27
27
|
}
|
|
28
28
|
}
|