reflectt-node 0.1.18 → 0.1.19
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.
|
@@ -39,6 +39,8 @@ export interface SweepDeps {
|
|
|
39
39
|
assignee?: string;
|
|
40
40
|
status?: Task['status'] | Task['status'][];
|
|
41
41
|
}): Task[];
|
|
42
|
+
/** Get all known agent IDs (for seeding canvas with all agents) */
|
|
43
|
+
listAllAgents?(): string[];
|
|
42
44
|
/** Get current canvas state entry for an agent (null if never set) */
|
|
43
45
|
getCanvasState(agentId: string): CanvasStateEntry | null;
|
|
44
46
|
/** Emit a synthetic canvas state event */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-auto-state.d.ts","sourceRoot":"","sources":["../src/canvas-auto-state.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,eAAO,MAAM,gBAAgB,OAAQ,CAAA;AACrC,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAE5C,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,SAAS,GACT,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,QAAQ,GACR,SAAS,CAAA;AAGb,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAW5D;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,SAAS,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,EAAE,CAAA;IAC1F,sEAAsE;IACtE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAA;IACxD,0CAA0C;IAC1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpG,sEAAsE;IACtE,gBAAgB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACpD,2EAA2E;IAC3E,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"canvas-auto-state.d.ts","sourceRoot":"","sources":["../src/canvas-auto-state.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,eAAO,MAAM,gBAAgB,OAAQ,CAAA;AACrC,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAE5C,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,SAAS,GACT,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,QAAQ,GACR,SAAS,CAAA;AAGb,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAW5D;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,qDAAqD;IACrD,SAAS,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,EAAE,CAAA;IAC1F,mEAAmE;IACnE,aAAa,CAAC,IAAI,MAAM,EAAE,CAAA;IAC1B,sEAAsE;IACtE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAA;IACxD,0CAA0C;IAC1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpG,sEAAsE;IACtE,gBAAgB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACpD,2EAA2E;IAC3E,kBAAkB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAuFpE"}
|
|
@@ -57,9 +57,16 @@ export function runCanvasAutoStateSweep(deps) {
|
|
|
57
57
|
list.push(task);
|
|
58
58
|
byAgent.set(task.assignee, list);
|
|
59
59
|
}
|
|
60
|
-
// Also include
|
|
61
|
-
//
|
|
62
|
-
|
|
60
|
+
// Also include ALL known agents (even without tasks) so they're visible on canvas
|
|
61
|
+
// This ensures all team members show up, not just those with active tasks
|
|
62
|
+
const allAgents = deps.listAllAgents ? deps.listAllAgents() : null;
|
|
63
|
+
if (allAgents) {
|
|
64
|
+
for (const agentId of allAgents) {
|
|
65
|
+
if (!byAgent.has(agentId)) {
|
|
66
|
+
byAgent.set(agentId, []);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
63
70
|
let emitted = 0;
|
|
64
71
|
let skipped = 0;
|
|
65
72
|
let unchanged = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-auto-state.js","sourceRoot":"","sources":["../src/canvas-auto-state.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA,CAAC,gDAAgD;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA,CAAC,4BAA4B;AAYzE,2CAA2C;AAC3C,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAA;IACrF,IAAI,gBAAgB;QAAE,OAAO,QAAQ,CAAA;IAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAA;IACtD,IAAI,QAAQ;QAAE,OAAO,SAAwB,CAAA,CAAC,sCAAsC;IAEpF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IAC1D,IAAI,UAAU;QAAE,OAAO,iBAAgC,CAAA;IAEvD,OAAO,OAAO,CAAA;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas-auto-state.js","sourceRoot":"","sources":["../src/canvas-auto-state.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA,CAAC,gDAAgD;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA,CAAC,4BAA4B;AAYzE,2CAA2C;AAC3C,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAA;IACrF,IAAI,gBAAgB;QAAE,OAAO,QAAQ,CAAA;IAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAA;IACtD,IAAI,QAAQ;QAAE,OAAO,SAAwB,CAAA,CAAC,sCAAsC;IAEpF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IAC1D,IAAI,UAAU;QAAE,OAAO,iBAAgC,CAAA;IAEvD,OAAO,OAAO,CAAA;AAChB,CAAC;AA6BD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAe;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAqB,EAAE,CAAC,CAAA;IAExF,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,SAAQ;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,kFAAkF;IAClF,0EAA0E;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAClE,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,oDAAoD;IACpD,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrD,iDAAiD;IACjD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACpD,MAAM,wBAAwB,GAAG,KAAK,CAAA,CAAC,iDAAiD;IAExF,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAE5C,sEAAsE;QACtE,IAAI,OAAO,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,uBAAuB,EAAE,CAAC;YACpE,OAAO,EAAE,CAAA;YACT,SAAQ;QACV,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAExC,mDAAmD;QACnD,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACzC,SAAS,EAAE,CAAA;QACb,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAChD,OAAO,EAAE,CAAA;QACX,CAAC;QAED,wDAAwD;QACxD,8CAA8C;QAC9C,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,sCAAsC;YACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnD,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,CAAA;YAEpC,+DAA+D;YAC/D,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;gBACjC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBAC/C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC7C,CAAC;QACH,CAAC;QAED,oFAAoF;QACpF,oFAAoF;QACpF,IAAI,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACxD,IAAI,GAAG,GAAG,WAAW,IAAI,wBAAwB,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC5B,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBACpC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AAm8D9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AAm8D9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CA0ghB7D"}
|
package/dist/server.js
CHANGED
|
@@ -9775,6 +9775,16 @@ export async function createServer() {
|
|
|
9775
9775
|
try {
|
|
9776
9776
|
runCanvasAutoStateSweep({
|
|
9777
9777
|
listTasks: (opts) => taskManager.listTasks(opts),
|
|
9778
|
+
listAllAgents: () => {
|
|
9779
|
+
// Get ALL agent IDs from task board - every assignee, even those without tasks
|
|
9780
|
+
const allTasks = taskManager.listTasks({});
|
|
9781
|
+
const agents = new Set();
|
|
9782
|
+
for (const t of allTasks) {
|
|
9783
|
+
if (t.assignee)
|
|
9784
|
+
agents.add(t.assignee);
|
|
9785
|
+
}
|
|
9786
|
+
return [...agents];
|
|
9787
|
+
},
|
|
9778
9788
|
getCanvasState: (agentId) => {
|
|
9779
9789
|
const entry = canvasStateMap.get(agentId);
|
|
9780
9790
|
return entry ? { state: entry.state, updatedAt: entry.updatedAt } : null;
|
|
@@ -9833,21 +9843,8 @@ export async function createServer() {
|
|
|
9833
9843
|
},
|
|
9834
9844
|
emitAmbientThought: (agentId, task) => {
|
|
9835
9845
|
const now = Date.now();
|
|
9836
|
-
// Emit ambient thought - makes /live feel alive with
|
|
9837
|
-
//
|
|
9838
|
-
const messages = [
|
|
9839
|
-
`Working on: ${task.title.slice(0, 50)}`,
|
|
9840
|
-
`Analyzing: ${task.title.slice(0, 40)}`,
|
|
9841
|
-
`Processing: ${task.title.slice(0, 40)}`,
|
|
9842
|
-
`Building: ${task.title.slice(0, 40)}`,
|
|
9843
|
-
`Reviewing: ${task.title.slice(0, 40)}`,
|
|
9844
|
-
`Testing: ${task.title.slice(0, 40)}`,
|
|
9845
|
-
`Debugging: ${task.title.slice(0, 40)}`,
|
|
9846
|
-
`Ship it`,
|
|
9847
|
-
`Almost done`,
|
|
9848
|
-
`Making progress`,
|
|
9849
|
-
];
|
|
9850
|
-
const msg = messages[Math.floor(Math.random() * messages.length)];
|
|
9846
|
+
// Emit ambient thought with actual task title - makes /live feel alive with real work
|
|
9847
|
+
// Shows visitors exactly what each agent is doing right now
|
|
9851
9848
|
eventBus.emit({
|
|
9852
9849
|
id: `ambient-${agentId}-${now}`,
|
|
9853
9850
|
type: 'canvas_push',
|
|
@@ -9857,10 +9854,10 @@ export async function createServer() {
|
|
|
9857
9854
|
expression: 'thought',
|
|
9858
9855
|
agentId,
|
|
9859
9856
|
agentColor: AGENT_IDENTITY_COLORS[agentId] ?? '#60a5fa',
|
|
9860
|
-
text:
|
|
9857
|
+
text: task.title.slice(0, 80),
|
|
9861
9858
|
state: 'working',
|
|
9862
9859
|
task: task.title,
|
|
9863
|
-
ttl:
|
|
9860
|
+
ttl: 12000,
|
|
9864
9861
|
},
|
|
9865
9862
|
});
|
|
9866
9863
|
},
|
|
@@ -10630,9 +10627,31 @@ export async function createServer() {
|
|
|
10630
10627
|
'Connection': 'keep-alive',
|
|
10631
10628
|
'X-Accel-Buffering': 'no',
|
|
10632
10629
|
});
|
|
10633
|
-
//
|
|
10630
|
+
// Derive agents from task board — show ALL agents, not just canvas-state emitters
|
|
10631
|
+
const allTasks = taskManager.listTasks({});
|
|
10632
|
+
const agentStates = {};
|
|
10633
|
+
for (const task of allTasks) {
|
|
10634
|
+
const assignee = task.assignee;
|
|
10635
|
+
if (!assignee || assignee === 'unassigned')
|
|
10636
|
+
continue;
|
|
10637
|
+
const agentId = assignee.toLowerCase();
|
|
10638
|
+
if (!agentStates[agentId]) {
|
|
10639
|
+
// Get canvas state if exists, otherwise default based on task status
|
|
10640
|
+
const canvasEntry = canvasStateMap.get(agentId);
|
|
10641
|
+
const isDone = task.status === 'done' || task.status === 'cancelled';
|
|
10642
|
+
const isBlocked = task.status === 'blocked';
|
|
10643
|
+
const isWorking = task.status === 'doing';
|
|
10644
|
+
agentStates[agentId] = {
|
|
10645
|
+
state: canvasEntry?.state || (isDone ? 'ambient' : isBlocked ? 'attention' : isWorking ? 'working' : 'floor'),
|
|
10646
|
+
currentTask: task.title,
|
|
10647
|
+
updatedAt: task.updatedAt || Date.now(),
|
|
10648
|
+
sourceTasks: [{ id: task.id, title: task.title, status: task.status }],
|
|
10649
|
+
};
|
|
10650
|
+
}
|
|
10651
|
+
}
|
|
10652
|
+
// Send current state as initial snapshot — include all agents from task board
|
|
10634
10653
|
const activeSlots = canvasSlots.getActive();
|
|
10635
|
-
reply.raw.write(`event: snapshot\ndata: ${JSON.stringify({ slots: activeSlots })}\n\n`);
|
|
10654
|
+
reply.raw.write(`event: snapshot\ndata: ${JSON.stringify({ slots: activeSlots, agents: agentStates })}\n\n`);
|
|
10636
10655
|
// Subscribe to new render events
|
|
10637
10656
|
const unsubscribe = subscribeCanvas((event, slot) => {
|
|
10638
10657
|
try {
|