@volter/supercode-teams 0.2.139 → 0.2.140
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": "@volter/supercode-teams",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.140",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A machine daemon serving this machine's doors, and a local or remote Teams server for shared session discovery, OpenTelemetry ingestion and access to enrolled machines.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -197,14 +197,15 @@ async function listSessions(api,res,auth,url,requestId,search){
|
|
|
197
197
|
}
|
|
198
198
|
/** A report older than this (four missed heartbeats) says nothing about what the session is doing now. */
|
|
199
199
|
const ACTIVITY_FRESH_MS=60000;
|
|
200
|
-
/**
|
|
201
|
-
async function
|
|
200
|
+
/** The connector's latest fresh native turn report; stale or unrecognized reports remain unknown. */
|
|
201
|
+
async function activityOf(api,teamId,sessionId){
|
|
202
202
|
const row=await api.store.one('SELECT a.turn,a.since,a.observed_at FROM session_activity a JOIN origins o ON o.team_id=a.team_id AND o.source_id=a.source_id AND o.harness=a.harness AND o.native_id=a.native_id WHERE a.team_id=? AND o.deleted_at IS NULL AND o.session_id IN (SELECT id FROM sessions WHERE team_id=? AND (id=? OR canonical_id=?)) ORDER BY a.observed_at DESC LIMIT 1',[teamId,teamId,sessionId,sessionId]);
|
|
203
|
-
return row&&row.turn
|
|
203
|
+
return row&&['working','idle','needs_input'].includes(row.turn)&&api.clock.nowMs()-row.observed_at<ACTIVITY_FRESH_MS?{state:row.turn,since:row.since??row.observed_at,observedAt:row.observed_at}:{state:'unknown'};
|
|
204
204
|
}
|
|
205
205
|
async function sessionDescriptor(api,res,auth,id,requestId){
|
|
206
206
|
const row=await api.store.authorizedSession({teamId:auth.team_id,principalId:auth.principal_id,credentialId:auth.credential_id,ref:id,now:api.clock.nowMs(),bound:auth.bound});
|
|
207
|
-
|
|
207
|
+
const activity=await activityOf(api,auth.team_id,row.id);
|
|
208
|
+
send(res,200,result(api,auth,{...JSON.parse(row.descriptor_json),turnActivity:activity,working:activity.state==='working'?{since:activity.since}:null}),requestId,{ETag:`"${row.revision}"`});
|
|
208
209
|
}
|
|
209
210
|
async function correlateRoute(api,req,res,auth,path,requestId){
|
|
210
211
|
if(!['user','service'].includes(auth.kind)||auth.role==='viewer')fail(403,'forbidden','credential cannot correlate sessions');
|
|
@@ -230,7 +231,8 @@ async function readSession(api,res,auth,id,url,requestId){
|
|
|
230
231
|
const {rows,beforeCursor,revision}=snapshot;
|
|
231
232
|
const messages=rows.map(row=>({id:row.id,source_id:row.source_id,native_key:row.native_key,recorded_at:row.recorded_at,value:JSON.parse(row.value_json)}));
|
|
232
233
|
const descriptor=JSON.parse(snapshot.descriptor_json);
|
|
233
|
-
|
|
234
|
+
const activity=await activityOf(api,auth.team_id,descriptor.id);
|
|
235
|
+
send(res,200,{version:1,context:{server_id:api.serverId,team_id:auth.team_id,principal_id:auth.principal_id},descriptor,turnActivity:activity,working:activity.state==='working'?{since:activity.since}:null,names:await sessionNames(api,auth.team_id,descriptor),messages,before_cursor:beforeCursor,event_cursor:snapshot.eventCursor,revision,display:{returned:messages.length,total:snapshot.total,truncated_fields:0}},requestId);
|
|
234
236
|
}
|
|
235
237
|
async function readArtifact(api,req,res,auth,id,uploadId,requestId){
|
|
236
238
|
const artifact=await api.store.readArtifact({teamId:auth.team_id,principalId:auth.principal_id,credentialId:auth.credential_id,ref:id,uploadId,now:api.clock.nowMs()}),bytes=Buffer.from(artifact.bytes),range=req.headers.range;
|