@tt-a1i/hive 0.6.0-alpha.0 → 0.6.0-alpha.1
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/CHANGELOG.md +37 -2
- package/README.md +164 -90
- package/README.zh-CN.md +213 -0
- package/SECURITY.md +1 -2
- package/assets/hive-hero.png +0 -0
- package/dist/src/server/agent-runtime.js +3 -0
- package/dist/src/server/agent-runtime.js.map +1 -1
- package/dist/src/server/routes-workspaces.js +12 -7
- package/dist/src/server/routes-workspaces.js.map +1 -1
- package/dist/src/server/runtime-store-helpers.d.ts +2 -0
- package/dist/src/server/runtime-store-helpers.js +10 -0
- package/dist/src/server/runtime-store-helpers.js.map +1 -1
- package/dist/src/server/runtime-store.d.ts +1 -0
- package/dist/src/server/runtime-store.js +1 -0
- package/dist/src/server/runtime-store.js.map +1 -1
- package/dist/src/server/team-list-serializer.d.ts +2 -8
- package/dist/src/server/team-list-serializer.js +2 -1
- package/dist/src/server/team-list-serializer.js.map +1 -1
- package/dist/src/server/terminal-state-mirror.d.ts +6 -0
- package/dist/src/server/terminal-state-mirror.js +21 -0
- package/dist/src/server/terminal-state-mirror.js.map +1 -1
- package/dist/src/server/worker-output-tracker.d.ts +14 -0
- package/dist/src/server/worker-output-tracker.js +51 -0
- package/dist/src/server/worker-output-tracker.js.map +1 -0
- package/dist/src/shared/types.d.ts +3 -0
- package/package.json +2 -1
- package/web/dist/assets/index-BHCMWDT9.js +75 -0
- package/web/dist/assets/index-D1TTen00.css +1 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-CjlaoOoA.css +0 -1
- package/web/dist/assets/index-CwdRvXrs.js +0 -63
|
@@ -5,12 +5,17 @@ import { authenticateCliAgent, requireCommandForRole } from './team-authz.js';
|
|
|
5
5
|
import { serializeTeamListItem } from './team-list-serializer.js';
|
|
6
6
|
import { requireUiTokenFromRequest } from './ui-auth-helpers.js';
|
|
7
7
|
import { getOrchestratorId } from './workspace-store-support.js';
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const enrichWithLastOutput = (workspaceId, store, workers) => workers.map((worker) => {
|
|
9
|
+
const line = store.getLastOutputLineForAgent(workspaceId, worker.id);
|
|
10
|
+
return line === null ? worker : { ...worker, lastOutputLine: line };
|
|
11
|
+
});
|
|
12
|
+
const getSerializedWorker = (workspaceId, workerId, store) => {
|
|
13
|
+
const worker = store.listWorkers(workspaceId).find((item) => item.id === workerId);
|
|
10
14
|
if (!worker) {
|
|
11
15
|
throw new Error(`Worker not found: ${workerId}`);
|
|
12
16
|
}
|
|
13
|
-
|
|
17
|
+
const line = store.getLastOutputLineForAgent(workspaceId, workerId);
|
|
18
|
+
return serializeTeamListItem(line === null ? worker : { ...worker, lastOutputLine: line });
|
|
14
19
|
};
|
|
15
20
|
const getRuntimePort = (request) => String(request.socket.localPort ?? '');
|
|
16
21
|
export const workspaceRoutes = [
|
|
@@ -53,7 +58,7 @@ export const workspaceRoutes = [
|
|
|
53
58
|
return;
|
|
54
59
|
}
|
|
55
60
|
requireUiTokenFromRequest(request, store.validateUiToken);
|
|
56
|
-
sendJson(response, 200, store.listWorkers(workspaceId).map(serializeTeamListItem));
|
|
61
|
+
sendJson(response, 200, enrichWithLastOutput(workspaceId, store, store.listWorkers(workspaceId)).map(serializeTeamListItem));
|
|
57
62
|
}),
|
|
58
63
|
route('GET', '/api/workspaces/:workspaceId/team', ({ params, request, response, store }) => {
|
|
59
64
|
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id is required');
|
|
@@ -70,7 +75,7 @@ export const workspaceRoutes = [
|
|
|
70
75
|
workspaceId,
|
|
71
76
|
});
|
|
72
77
|
requireCommandForRole(agent, 'list');
|
|
73
|
-
sendJson(response, 200, store.listWorkers(workspaceId).map(serializeTeamListItem));
|
|
78
|
+
sendJson(response, 200, enrichWithLastOutput(workspaceId, store, store.listWorkers(workspaceId)).map(serializeTeamListItem));
|
|
74
79
|
}),
|
|
75
80
|
route('POST', '/api/workspaces/:workspaceId/workers', async ({ params, request, response, store }) => {
|
|
76
81
|
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id is required');
|
|
@@ -97,7 +102,7 @@ export const workspaceRoutes = [
|
|
|
97
102
|
})
|
|
98
103
|
: { ok: false, error: null, run_id: null };
|
|
99
104
|
sendJson(response, 201, {
|
|
100
|
-
...getSerializedWorker(workspaceId, worker.id, store
|
|
105
|
+
...getSerializedWorker(workspaceId, worker.id, store),
|
|
101
106
|
agent_start: agentStart,
|
|
102
107
|
});
|
|
103
108
|
}),
|
|
@@ -125,7 +130,7 @@ export const workspaceRoutes = [
|
|
|
125
130
|
return;
|
|
126
131
|
}
|
|
127
132
|
store.renameWorker(workspaceId, workerId, body.name);
|
|
128
|
-
sendJson(response, 200, getSerializedWorker(workspaceId, workerId, store
|
|
133
|
+
sendJson(response, 200, getSerializedWorker(workspaceId, workerId, store));
|
|
129
134
|
}),
|
|
130
135
|
route('POST', '/api/workspaces/:workspaceId/user-input', async ({ params, request, response, store }) => {
|
|
131
136
|
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id is required');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-workspaces.js","sourceRoot":"","sources":["../../../src/server/routes-workspaces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAQpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,MAAM,
|
|
1
|
+
{"version":3,"file":"routes-workspaces.js","sourceRoot":"","sources":["../../../src/server/routes-workspaces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAQpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,MAAM,oBAAoB,GAAG,CAC3B,WAAmB,EACnB,KAAsD,EACtD,OAAgD,EAChD,EAAE,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IACpE,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;AACrE,CAAC,CAAC,CAAA;AAEJ,MAAM,mBAAmB,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAE,KAAmB,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IAClF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IACnE,OAAO,qBAAqB,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;AAC5F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,OAAwB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;AAE3F,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/D,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAA;IACjD,CAAC,CAAC;IACF,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACtE,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAsB,OAAO,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,KAAK,KAAK,CAAA;QACvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACtB,GAAG,SAAS;gBACZ,kBAAkB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;aAC7D,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,4BAA4B,CAC1B,KAAK,EACL,KAAK,CAAC,QAAQ,EACd,SAAS,CAAC,EAAE,EACZ,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAC/B,CAAA;QACD,qEAAqE;QACrE,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CACnD,KAAK,EACL,SAAS,CAAC,EAAE,EACZ,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,EAC/B,cAAc,CAAC,OAAO,CAAC,CACxB,CAAA;QACD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAClF,CAAC,CAAC;IACF,KAAK,CAAC,QAAQ,EAAE,8BAA8B,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7F,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,0BAA0B,CAC3B,CAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,MAAM,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;QACxC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;QACzB,QAAQ,CAAC,GAAG,EAAE,CAAA;IAChB,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,sCAAsC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5F,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,0BAA0B,CAC3B,CAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QAEzD,QAAQ,CACN,QAAQ,EACR,GAAG,EACH,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAC1E,qBAAqB,CACtB,CACF,CAAA;IACH,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,mCAAmC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACzF,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,0BAA0B,CAC3B,CAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACnD,MAAM,KAAK,GAAG,oBAAoB,CAAC;YACjC,WAAW,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC9D,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,aAAa,EAAE,KAAK,CAAC,kBAAkB;YACvC,WAAW;SACZ,CAAC,CAAA;QACF,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAEpC,QAAQ,CACN,QAAQ,EACR,GAAG,EACH,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAC1E,qBAAqB,CACtB,CACF,CAAA;IACH,CAAC,CAAC;IACF,KAAK,CACH,MAAM,EACN,sCAAsC,EACtC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,0BAA0B,CAC3B,CAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QAEzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAmB,OAAO,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAA;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;YACxD,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAA;YACrE,KAAK,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE;gBACjD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,eAAe,EAAE,MAAM,CAAC,EAAE;aAC3B,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,UAAU,GACd,IAAI,CAAC,SAAS,KAAK,IAAI;YACrB,CAAC,CAAC,MAAM,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;gBAC3E,kBAAkB,EAAE,mCAAmC;aACxD,CAAC;YACJ,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAE9C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,GAAG,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;YACrD,WAAW,EAAE,UAAU;SACxB,CAAC,CAAA;IACJ,CAAC,CACF;IACD,KAAK,CACH,QAAQ,EACR,gDAAgD,EAChD,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QACvC,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,yCAAyC,CAC1C,CAAA;QACD,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,QAAQ,EACR,MAAM,EACN,UAAU,EACV,yCAAyC,CAC1C,CAAA;QACD,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACzC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;QACzB,QAAQ,CAAC,GAAG,EAAE,CAAA;IAChB,CAAC,CACF;IACD,KAAK,CACH,OAAO,EACP,gDAAgD,EAChD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,yCAAyC,CAC1C,CAAA;QACD,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,QAAQ,EACR,MAAM,EACN,UAAU,EACV,yCAAyC,CAC1C,CAAA;QACD,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAoB,OAAO,CAAC,CAAA;QAC3D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAA;YACtD,OAAM;QACR,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACpD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5E,CAAC,CACF;IACD,KAAK,CACH,MAAM,EACN,yCAAyC,EACzC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,0BAA0B,CAC3B,CAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QAEzD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAgB,OAAO,CAAC,CAAA;QACvD,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,WAAW,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5E,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC,CACF;IACD,KAAK,CACH,MAAM,EACN,oDAAoD,EACpD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAClC,QAAQ,EACR,MAAM,EACN,aAAa,EACb,wCAAwC,CACzC,CAAA;QACD,MAAM,OAAO,GAAG,gBAAgB,CAC9B,QAAQ,EACR,MAAM,EACN,SAAS,EACT,wCAAwC,CACzC,CAAA;QACD,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;QAEzD,IACE,OAAO,KAAK,iBAAiB,CAAC,WAAW,CAAC;YAC1C,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,EAClD,CAAC;YACD,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QAClE,CAAC;QACD,QAAQ,CACN,QAAQ,EACR,GAAG,EACH,MAAM,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CACpF,CAAA;IACH,CAAC,CACF;CACF,CAAA"}
|
|
@@ -11,6 +11,7 @@ import { createTasksFileService } from './tasks-file.js';
|
|
|
11
11
|
import { createTasksFileWatcher } from './tasks-file-watcher.js';
|
|
12
12
|
import { createTeamOperations } from './team-operations.js';
|
|
13
13
|
import { createUiAuth } from './ui-auth.js';
|
|
14
|
+
import { type WorkerOutputTracker } from './worker-output-tracker.js';
|
|
14
15
|
import { createWorkspaceStore } from './workspace-store.js';
|
|
15
16
|
export interface RuntimeStoreServices {
|
|
16
17
|
agentRunStore: ReturnType<typeof createAgentRunStore>;
|
|
@@ -24,6 +25,7 @@ export interface RuntimeStoreServices {
|
|
|
24
25
|
tasksFileService: ReturnType<typeof createTasksFileService>;
|
|
25
26
|
teamOps: ReturnType<typeof createTeamOperations>;
|
|
26
27
|
uiAuth: ReturnType<typeof createUiAuth>;
|
|
28
|
+
workerOutputTracker: WorkerOutputTracker | null;
|
|
27
29
|
workspaceStore: ReturnType<typeof createWorkspaceStore>;
|
|
28
30
|
}
|
|
29
31
|
interface CreateRuntimeStoreServicesOptions {
|
|
@@ -11,6 +11,7 @@ import { createTasksFileService } from './tasks-file.js';
|
|
|
11
11
|
import { createTasksFileWatcher } from './tasks-file-watcher.js';
|
|
12
12
|
import { createTeamOperations } from './team-operations.js';
|
|
13
13
|
import { createUiAuth } from './ui-auth.js';
|
|
14
|
+
import { createWorkerOutputTracker } from './worker-output-tracker.js';
|
|
14
15
|
import { createWorkspaceStore } from './workspace-store.js';
|
|
15
16
|
const notifyTasksUpdated = (callbacks, workspaceId, content) => {
|
|
16
17
|
for (const callback of callbacks) {
|
|
@@ -46,7 +47,11 @@ export const createRuntimeStoreServices = (options = {}) => {
|
|
|
46
47
|
tasksFileService,
|
|
47
48
|
workspaceStore,
|
|
48
49
|
});
|
|
50
|
+
const workerOutputTracker = options.agentManager
|
|
51
|
+
? createWorkerOutputTracker(options.agentManager.getOutputBus())
|
|
52
|
+
: null;
|
|
49
53
|
const agentRuntime = createAgentRuntime(options.agentManager, agentRunStore, agentSessionStore, settings.getCommandPreset, (workspaceId, agentId) => {
|
|
54
|
+
workerOutputTracker?.detach(workspaceId, agentId);
|
|
50
55
|
if (!workspaceStore.hasAgent(workspaceId, agentId))
|
|
51
56
|
return;
|
|
52
57
|
workspaceStore.markAgentStopped(workspaceId, agentId);
|
|
@@ -75,6 +80,7 @@ export const createRuntimeStoreServices = (options = {}) => {
|
|
|
75
80
|
tasksFileService,
|
|
76
81
|
teamOps,
|
|
77
82
|
uiAuth,
|
|
83
|
+
workerOutputTracker,
|
|
78
84
|
workspaceStore,
|
|
79
85
|
};
|
|
80
86
|
};
|
|
@@ -87,6 +93,9 @@ export const createRuntimeStoreLifecycle = ({ agentManager, services, }) => {
|
|
|
87
93
|
if (run.status === 'error') {
|
|
88
94
|
services.workspaceStore.markAgentStopped(workspaceId, agentId);
|
|
89
95
|
}
|
|
96
|
+
else {
|
|
97
|
+
services.workerOutputTracker?.attach(workspaceId, agentId, run.runId, run.output);
|
|
98
|
+
}
|
|
90
99
|
return run;
|
|
91
100
|
}
|
|
92
101
|
catch (error) {
|
|
@@ -131,6 +140,7 @@ export const createRuntimeStoreLifecycle = ({ agentManager, services, }) => {
|
|
|
131
140
|
close: async () => {
|
|
132
141
|
await services.agentRuntime.close();
|
|
133
142
|
await services.tasksFileWatcher.close();
|
|
143
|
+
services.workerOutputTracker?.closeAll();
|
|
134
144
|
services.agentRunStore.close?.();
|
|
135
145
|
services.db?.close();
|
|
136
146
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-store-helpers.js","sourceRoot":"","sources":["../../../src/server/runtime-store-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-store-helpers.js","sourceRoot":"","sources":["../../../src/server/runtime-store-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ interface RuntimeStore {
|
|
|
22
22
|
reportTask: (workspaceId: string, workerId: string, input?: ReportTaskInput) => DispatchRecord;
|
|
23
23
|
listDispatches: (workspaceId: string, options?: ListDispatchesOptions) => DispatchRecord[];
|
|
24
24
|
listWorkers: (workspaceId: string) => TeamListItem[];
|
|
25
|
+
getLastOutputLineForAgent: (workspaceId: string, agentId: string) => string | null;
|
|
25
26
|
getWorkspaceSnapshot: (workspaceId: string) => WorkspaceRecord;
|
|
26
27
|
getWorker: (workspaceId: string, workerId: string) => AgentSummary;
|
|
27
28
|
getAgent: (workspaceId: string, agentId: string) => AgentSummary;
|
|
@@ -52,6 +52,7 @@ export const createRuntimeStore = (options = {}) => {
|
|
|
52
52
|
reportTask: services.teamOps.reportTask,
|
|
53
53
|
listDispatches: services.dispatchLedgerStore.listWorkspaceDispatches,
|
|
54
54
|
listWorkers: (workspaceId) => services.workspaceStore.listWorkers(workspaceId),
|
|
55
|
+
getLastOutputLineForAgent: (workspaceId, agentId) => services.workerOutputTracker?.getLastOutputLine(workspaceId, agentId) ?? null,
|
|
55
56
|
getWorkspaceSnapshot: (workspaceId) => services.workspaceStore.getWorkspaceSnapshot(workspaceId),
|
|
56
57
|
getWorker: (workspaceId, workerId) => services.workspaceStore.getWorker(workspaceId, workerId),
|
|
57
58
|
getAgent: (workspaceId, agentId) => services.workspaceStore.getAgent(workspaceId, agentId),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-store.js","sourceRoot":"","sources":["../../../src/server/runtime-store.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-store.js","sourceRoot":"","sources":["../../../src/server/runtime-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
import type { TeamListItem } from '../shared/types.js';
|
|
2
|
-
export declare const serializeTeamListItem: ({ id, name, pendingTaskCount, role, status, }: TeamListItem) =>
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
role: string;
|
|
6
|
-
status: string;
|
|
7
|
-
pending_task_count: number;
|
|
8
|
-
};
|
|
1
|
+
import type { TeamListItem, TeamListItemPayload } from '../shared/types.js';
|
|
2
|
+
export declare const serializeTeamListItem: ({ id, lastOutputLine, name, pendingTaskCount, role, status, }: TeamListItem) => TeamListItemPayload;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export const serializeTeamListItem = ({ id, name, pendingTaskCount, role, status, }) => ({
|
|
1
|
+
export const serializeTeamListItem = ({ id, lastOutputLine, name, pendingTaskCount, role, status, }) => ({
|
|
2
2
|
id,
|
|
3
3
|
name,
|
|
4
4
|
role,
|
|
5
5
|
status,
|
|
6
6
|
pending_task_count: pendingTaskCount,
|
|
7
|
+
last_output_line: lastOutputLine ?? null,
|
|
7
8
|
});
|
|
8
9
|
//# sourceMappingURL=team-list-serializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-list-serializer.js","sourceRoot":"","sources":["../../../src/server/team-list-serializer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,EAAE,EACF,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,MAAM,GACO,
|
|
1
|
+
{"version":3,"file":"team-list-serializer.js","sourceRoot":"","sources":["../../../src/server/team-list-serializer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,EAAE,EACF,cAAc,EACd,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,MAAM,GACO,EAAuB,EAAE,CAAC,CAAC;IACxC,EAAE;IACF,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,kBAAkB,EAAE,gBAAgB;IACpC,gBAAgB,EAAE,cAAc,IAAI,IAAI;CACzC,CAAC,CAAA"}
|
|
@@ -10,6 +10,12 @@ export declare class TerminalStateMirror {
|
|
|
10
10
|
constructor(size?: TerminalMirrorSize);
|
|
11
11
|
dispose(): void;
|
|
12
12
|
getSnapshot(): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the most recent non-empty scrollback line (trimmed, ANSI-stripped,
|
|
15
|
+
* truncated to `maxLen`). Returns `null` when scrollback has no printable
|
|
16
|
+
* content, so the wire protocol can express "no output yet" as a null.
|
|
17
|
+
*/
|
|
18
|
+
lastOutputLine(maxLen?: number): string | null;
|
|
13
19
|
resize(cols: number, rows: number): void;
|
|
14
20
|
write(chunk: string): void;
|
|
15
21
|
}
|
|
@@ -7,6 +7,11 @@ const normalizeTerminalSize = ({ cols, rows }) => ({
|
|
|
7
7
|
cols: Math.max(1, Math.floor(cols)),
|
|
8
8
|
rows: Math.max(1, Math.floor(rows)),
|
|
9
9
|
});
|
|
10
|
+
// Strips CSI escape sequences emitted by interactive CLIs (color, cursor moves,
|
|
11
|
+
// etc.) before exposing a single line of scrollback to JSON consumers. Built
|
|
12
|
+
// from a String so the regex source does not embed a literal control character
|
|
13
|
+
// (lint/suspicious/noControlCharactersInRegex would otherwise flag the file).
|
|
14
|
+
const ANSI_CSI_PATTERN = new RegExp(`${String.fromCharCode(0x1b)}\\[[0-9;?]*[a-zA-Z]`, 'g');
|
|
10
15
|
export class TerminalStateMirror {
|
|
11
16
|
serializeAddon = new SerializeAddon();
|
|
12
17
|
terminal;
|
|
@@ -28,6 +33,22 @@ export class TerminalStateMirror {
|
|
|
28
33
|
await this.operationQueue;
|
|
29
34
|
return this.serializeAddon.serialize();
|
|
30
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns the most recent non-empty scrollback line (trimmed, ANSI-stripped,
|
|
38
|
+
* truncated to `maxLen`). Returns `null` when scrollback has no printable
|
|
39
|
+
* content, so the wire protocol can express "no output yet" as a null.
|
|
40
|
+
*/
|
|
41
|
+
lastOutputLine(maxLen = 60) {
|
|
42
|
+
const buffer = this.terminal.buffer.active;
|
|
43
|
+
for (let row = buffer.length - 1; row >= 0; row -= 1) {
|
|
44
|
+
const raw = buffer.getLine(row)?.translateToString(true) ?? '';
|
|
45
|
+
const cleaned = raw.replace(ANSI_CSI_PATTERN, '').trim();
|
|
46
|
+
if (cleaned.length === 0)
|
|
47
|
+
continue;
|
|
48
|
+
return cleaned.slice(0, maxLen);
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
31
52
|
resize(cols, rows) {
|
|
32
53
|
const normalized = normalizeTerminalSize({ cols, rows });
|
|
33
54
|
this.operationQueue = this.operationQueue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-state-mirror.js","sourceRoot":"","sources":["../../../src/server/terminal-state-mirror.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,sBAAsB,MAAM,iBAAiB,CAAA;AAEpD,MAAM,EAAE,cAAc,EAAE,GAAG,oBAA+D,CAAA;AAC1F,MAAM,EAAE,QAAQ,EAAE,GAAG,sBAA0D,CAAA;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAOzC,MAAM,qBAAqB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAsB,EAAsB,EAAE,CAAC,CAAC;IACzF,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC,CAAA;AAEF,MAAM,OAAO,mBAAmB;IACb,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,QAAQ,CAA+B;IAChD,cAAc,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAEzD,YAAY,OAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3D,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC3B,gBAAgB,EAAE,IAAI;YACtB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,mBAAmB;SAChC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,cAAc,CAAA;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;aACtC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;aACtC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CACH,GAAG,EAAE,CACH,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7C,CAAC,CAAC,CACL,CAAA;IACL,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"terminal-state-mirror.js","sourceRoot":"","sources":["../../../src/server/terminal-state-mirror.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,sBAAsB,MAAM,iBAAiB,CAAA;AAEpD,MAAM,EAAE,cAAc,EAAE,GAAG,oBAA+D,CAAA;AAC1F,MAAM,EAAE,QAAQ,EAAE,GAAG,sBAA0D,CAAA;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAOzC,MAAM,qBAAqB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAsB,EAAsB,EAAE,CAAC,CAAC;IACzF,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC,CAAA;AAEF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;AAE3F,MAAM,OAAO,mBAAmB;IACb,cAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IACrC,QAAQ,CAA+B;IAChD,cAAc,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAEzD,YAAY,OAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3D,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC3B,gBAAgB,EAAE,IAAI;YACtB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,mBAAmB;SAChC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,cAAc,CAAA;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAA;IACxC,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAM,GAAG,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAA;QAC1C,KAAK,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAClC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACjC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;aACtC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;aACtC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CACH,GAAG,EAAE,CACH,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7C,CAAC,CAAC,CACL,CAAA;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PtyOutputBus } from './pty-output-bus.js';
|
|
2
|
+
export interface WorkerOutputTracker {
|
|
3
|
+
attach: (workspaceId: string, agentId: string, runId: string, initialOutput: string) => void;
|
|
4
|
+
closeAll: () => void;
|
|
5
|
+
detach: (workspaceId: string, agentId: string) => void;
|
|
6
|
+
getLastOutputLine: (workspaceId: string, agentId: string) => string | null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Maintains a headless terminal mirror per active agent run so the team-list
|
|
10
|
+
* endpoint can report each worker's last output line without requiring a
|
|
11
|
+
* connected UI viewer. Created on run start (via `attach`) and torn down on
|
|
12
|
+
* run exit (via `detach`).
|
|
13
|
+
*/
|
|
14
|
+
export declare const createWorkerOutputTracker: (outputBus: PtyOutputBus) => WorkerOutputTracker;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TerminalStateMirror } from './terminal-state-mirror.js';
|
|
2
|
+
const trackerKey = (workspaceId, agentId) => `${workspaceId}:${agentId}`;
|
|
3
|
+
/**
|
|
4
|
+
* Maintains a headless terminal mirror per active agent run so the team-list
|
|
5
|
+
* endpoint can report each worker's last output line without requiring a
|
|
6
|
+
* connected UI viewer. Created on run start (via `attach`) and torn down on
|
|
7
|
+
* run exit (via `detach`).
|
|
8
|
+
*/
|
|
9
|
+
export const createWorkerOutputTracker = (outputBus) => {
|
|
10
|
+
const tracked = new Map();
|
|
11
|
+
const disposeEntry = (entry) => {
|
|
12
|
+
entry.unsubscribe();
|
|
13
|
+
entry.mirror.dispose();
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
attach(workspaceId, agentId, runId, initialOutput) {
|
|
17
|
+
const key = trackerKey(workspaceId, agentId);
|
|
18
|
+
const existing = tracked.get(key);
|
|
19
|
+
if (existing) {
|
|
20
|
+
if (existing.runId === runId)
|
|
21
|
+
return;
|
|
22
|
+
disposeEntry(existing);
|
|
23
|
+
}
|
|
24
|
+
const mirror = new TerminalStateMirror();
|
|
25
|
+
if (initialOutput.length > 0)
|
|
26
|
+
mirror.write(initialOutput);
|
|
27
|
+
const unsubscribe = outputBus.subscribe(runId, (chunk) => {
|
|
28
|
+
mirror.write(chunk);
|
|
29
|
+
});
|
|
30
|
+
tracked.set(key, { mirror, runId, unsubscribe });
|
|
31
|
+
},
|
|
32
|
+
closeAll() {
|
|
33
|
+
for (const entry of tracked.values())
|
|
34
|
+
disposeEntry(entry);
|
|
35
|
+
tracked.clear();
|
|
36
|
+
},
|
|
37
|
+
detach(workspaceId, agentId) {
|
|
38
|
+
const key = trackerKey(workspaceId, agentId);
|
|
39
|
+
const entry = tracked.get(key);
|
|
40
|
+
if (!entry)
|
|
41
|
+
return;
|
|
42
|
+
disposeEntry(entry);
|
|
43
|
+
tracked.delete(key);
|
|
44
|
+
},
|
|
45
|
+
getLastOutputLine(workspaceId, agentId) {
|
|
46
|
+
const entry = tracked.get(trackerKey(workspaceId, agentId));
|
|
47
|
+
return entry ? entry.mirror.lastOutputLine() : null;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=worker-output-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-output-tracker.js","sourceRoot":"","sources":["../../../src/server/worker-output-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAehE,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAA;AAExF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAuB,EAAuB,EAAE;IACxF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAA;IAE7C,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;QACzC,KAAK,CAAC,WAAW,EAAE,CAAA;QACnB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC,CAAA;IAED,OAAO;QACL,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa;YAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK;oBAAE,OAAM;gBACpC,YAAY,CAAC,QAAQ,CAAC,CAAA;YACxB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAA;YACxC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;YACzD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,QAAQ;YACN,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAA;YACzD,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;QACD,MAAM,CAAC,WAAW,EAAE,OAAO;YACzB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAM;YAClB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,iBAAiB,CAAC,WAAW,EAAE,OAAO;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;YAC3D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACrD,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -21,6 +21,8 @@ export interface TeamListItem {
|
|
|
21
21
|
role: WorkerRole;
|
|
22
22
|
status: AgentStatus;
|
|
23
23
|
pendingTaskCount: number;
|
|
24
|
+
/** Optional: last output line shown in the worker card when status is working. */
|
|
25
|
+
lastOutputLine?: string;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* Wire payload shape for /api/workspaces/:id/team and worker-creation responses.
|
|
@@ -33,4 +35,5 @@ export interface TeamListItemPayload {
|
|
|
33
35
|
role: WorkerRole;
|
|
34
36
|
status: AgentStatus;
|
|
35
37
|
pending_task_count: number;
|
|
38
|
+
last_output_line: string | null;
|
|
36
39
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tt-a1i/hive",
|
|
3
|
-
"version": "0.6.0-alpha.
|
|
3
|
+
"version": "0.6.0-alpha.1",
|
|
4
4
|
"description": "Local multi-agent workspace for coordinating CLI coding agents through a web UI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@10.30.3",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"node": ">=22"
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
30
|
+
"assets/",
|
|
30
31
|
"CHANGELOG.md",
|
|
31
32
|
"LICENSE",
|
|
32
33
|
"README.md",
|