@aiassesstech/jessie 0.2.17 → 0.5.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.
Files changed (60) hide show
  1. package/README.md +41 -0
  2. package/agent/AGENTS.md +30 -7
  3. package/agent/HEARTBEAT.md +34 -6
  4. package/agent/MISSION_CONTROL.md +2 -2
  5. package/agent/SOUL.md +12 -19
  6. package/agent/auto-resolver.md +43 -0
  7. package/agent/commanders-intent.md +29 -0
  8. package/agent/meeting-notes.md +71 -0
  9. package/agent/priority-map.md +40 -0
  10. package/agent/skills/executive-assistant.md +91 -0
  11. package/agent/tasks-completed.md +5 -0
  12. package/agent/tasks.md +30 -0
  13. package/agent/voice.md +54 -0
  14. package/dist/channel/channel-config.d.ts +21 -0
  15. package/dist/channel/channel-config.d.ts.map +1 -0
  16. package/dist/channel/channel-config.js +45 -0
  17. package/dist/channel/channel-config.js.map +1 -0
  18. package/dist/cli/setup.d.ts.map +1 -1
  19. package/dist/cli/setup.js +47 -11
  20. package/dist/cli/setup.js.map +1 -1
  21. package/dist/command/decision-store.d.ts +18 -1
  22. package/dist/command/decision-store.d.ts.map +1 -1
  23. package/dist/command/decision-store.js +107 -0
  24. package/dist/command/decision-store.js.map +1 -1
  25. package/dist/command/types.d.ts +59 -1
  26. package/dist/command/types.d.ts.map +1 -1
  27. package/dist/command/types.js +5 -1
  28. package/dist/command/types.js.map +1 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/plugin.d.ts.map +1 -1
  34. package/dist/plugin.js +185 -7
  35. package/dist/plugin.js.map +1 -1
  36. package/dist/tools/jessie-briefing.d.ts.map +1 -1
  37. package/dist/tools/jessie-briefing.js +1 -0
  38. package/dist/tools/jessie-briefing.js.map +1 -1
  39. package/dist/tools/jessie-correct.d.ts +54 -0
  40. package/dist/tools/jessie-correct.d.ts.map +1 -0
  41. package/dist/tools/jessie-correct.js +154 -0
  42. package/dist/tools/jessie-correct.js.map +1 -0
  43. package/dist/tools/jessie-meetings.d.ts +71 -0
  44. package/dist/tools/jessie-meetings.d.ts.map +1 -0
  45. package/dist/tools/jessie-meetings.js +196 -0
  46. package/dist/tools/jessie-meetings.js.map +1 -0
  47. package/dist/tools/jessie-policy.d.ts +42 -0
  48. package/dist/tools/jessie-policy.d.ts.map +1 -0
  49. package/dist/tools/jessie-policy.js +225 -0
  50. package/dist/tools/jessie-policy.js.map +1 -0
  51. package/dist/tools/jessie-tasks.d.ts +63 -0
  52. package/dist/tools/jessie-tasks.d.ts.map +1 -0
  53. package/dist/tools/jessie-tasks.js +229 -0
  54. package/dist/tools/jessie-tasks.js.map +1 -0
  55. package/dist/tools/jessie-trends.d.ts +49 -0
  56. package/dist/tools/jessie-trends.d.ts.map +1 -0
  57. package/dist/tools/jessie-trends.js +180 -0
  58. package/dist/tools/jessie-trends.js.map +1 -0
  59. package/openclaw.plugin.json +23 -6
  60. package/package.json +4 -3
@@ -0,0 +1,229 @@
1
+ /**
2
+ * jessie_tasks — Fleet Task Manager Tool
3
+ *
4
+ * Manages fleet-governance tasks in agent/tasks.md.
5
+ * Scope enforcement via keyword validation: when owner=greg,
6
+ * task content must contain fleet-governance keywords or
7
+ * the tool rejects with a structured guidance response.
8
+ */
9
+ import * as fs from 'node:fs';
10
+ import * as path from 'node:path';
11
+ const FLEET_GOVERNANCE_KEYWORDS = [
12
+ 'jessie', 'nole', 'grillo', 'noah', 'sam', 'mighty-mark', 'mark',
13
+ 'fleet', 'proposal', 'veto', 'approve', 'delegate', 'delegation',
14
+ 'assessment', 'governance', 'patent', 'infrastructure', 'deployment',
15
+ 'cron', 'agent', 'plugin',
16
+ 'review', 'decision', 'escalat', 'audit', 'compliance',
17
+ ];
18
+ function isFleetGovernanceTask(taskText) {
19
+ const lower = taskText.toLowerCase();
20
+ return FLEET_GOVERNANCE_KEYWORDS.some(kw => lower.includes(kw));
21
+ }
22
+ function readFileOrEmpty(filePath) {
23
+ try {
24
+ if (fs.existsSync(filePath))
25
+ return fs.readFileSync(filePath, 'utf-8');
26
+ }
27
+ catch { /* fail-open */ }
28
+ return '';
29
+ }
30
+ function writeFileSafe(filePath, content) {
31
+ fs.writeFileSync(filePath, content);
32
+ }
33
+ function nowCT() {
34
+ return new Date().toLocaleString('en-US', { timeZone: 'America/Chicago', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }).replace(',', '');
35
+ }
36
+ export function createTasksTool(getWorkspaceDir) {
37
+ return {
38
+ name: 'jessie_tasks',
39
+ description: 'Fleet-governance task manager. Reads/writes tasks.md. ' +
40
+ 'Actions: add (new task), complete (mark done + archive), defer (move to backlog), list (show current), prep (daily task prep workflow). ' +
41
+ 'Greg-owned tasks must be fleet-governance related — personal tasks are rejected.',
42
+ parameters: {
43
+ type: 'object',
44
+ properties: {
45
+ action: {
46
+ type: 'string',
47
+ enum: ['add', 'complete', 'defer', 'list', 'prep'],
48
+ description: 'Task action',
49
+ },
50
+ task: {
51
+ type: 'string',
52
+ description: 'Task description (for add/complete)',
53
+ },
54
+ owner: {
55
+ type: 'string',
56
+ enum: ['greg', 'jessie'],
57
+ description: 'Task owner (default: jessie)',
58
+ },
59
+ due: {
60
+ type: 'string',
61
+ description: 'Due date in YYYY-MM-DD format (optional)',
62
+ },
63
+ section: {
64
+ type: 'string',
65
+ enum: ['today', 'backlog', 'recurring'],
66
+ description: 'Task section (default: today)',
67
+ },
68
+ category: {
69
+ type: 'string',
70
+ description: 'Grouping header — e.g. "Proposals & decisions", "Delegations"',
71
+ },
72
+ },
73
+ required: ['action'],
74
+ },
75
+ async execute(_toolCallId, params) {
76
+ try {
77
+ const action = params.action;
78
+ const task = params.task;
79
+ const owner = params.owner || 'jessie';
80
+ const due = params.due;
81
+ const section = params.section || 'today';
82
+ const category = params.category;
83
+ const workspaceDir = getWorkspaceDir();
84
+ if (!workspaceDir) {
85
+ return { content: [{ type: 'text', text: 'Task files unavailable — workspace directory not resolved.' }], isError: true };
86
+ }
87
+ const tasksPath = path.join(workspaceDir, 'tasks.md');
88
+ const completedPath = path.join(workspaceDir, 'tasks-completed.md');
89
+ if (action === 'add') {
90
+ if (!task)
91
+ return { content: [{ type: 'text', text: 'task parameter required for add' }], isError: true };
92
+ if (owner === 'greg' && !isFleetGovernanceTask(task)) {
93
+ return {
94
+ content: [{ type: 'text', text: 'Task scope: fleet-governance only. This task appears personal — route to Greg directly or defer to the future EA skill. If this IS a fleet-governance task, include a fleet/governance keyword.' }],
95
+ isError: true,
96
+ };
97
+ }
98
+ let content = readFileOrEmpty(tasksPath);
99
+ const checkbox = `- [ ] ${task}${due ? ` — due ${due}` : ''}`;
100
+ if (section === 'backlog') {
101
+ const backlogIdx = content.indexOf('## Backlog with due date');
102
+ if (backlogIdx >= 0) {
103
+ const nextSection = content.indexOf('\n## ', backlogIdx + 1);
104
+ const insertPoint = nextSection >= 0 ? nextSection : content.length;
105
+ content = content.slice(0, insertPoint) + `- ${owner === 'greg' ? 'Greg' : 'Jessie'}: ${task}${due ? ` — due ${due}` : ''}\n` + content.slice(insertPoint);
106
+ }
107
+ }
108
+ else if (section === 'recurring') {
109
+ const recurIdx = content.indexOf('## Recurring');
110
+ if (recurIdx >= 0) {
111
+ const nextSection = content.indexOf('\n## ', recurIdx + 1);
112
+ const insertPoint = nextSection >= 0 ? nextSection : content.length;
113
+ content = content.slice(0, insertPoint) + `${checkbox}\n` + content.slice(insertPoint);
114
+ }
115
+ }
116
+ else {
117
+ const ownerHeader = owner === 'greg' ? '### Greg (Principal' : '### Jessie (Commander)';
118
+ const ownerIdx = content.indexOf(ownerHeader);
119
+ if (ownerIdx >= 0) {
120
+ if (category) {
121
+ const catHeader = `#### ${category}`;
122
+ const catIdx = content.indexOf(catHeader, ownerIdx);
123
+ if (catIdx >= 0) {
124
+ const nextLine = content.indexOf('\n', catIdx) + 1;
125
+ content = content.slice(0, nextLine) + `${checkbox}\n` + content.slice(nextLine);
126
+ }
127
+ else {
128
+ const nextOwner = content.indexOf('\n### ', ownerIdx + 1);
129
+ const nextTop = content.indexOf('\n## ', ownerIdx + 1);
130
+ const insertPoint = nextOwner >= 0 ? nextOwner : (nextTop >= 0 ? nextTop : content.length);
131
+ content = content.slice(0, insertPoint) + `\n${catHeader}\n${checkbox}\n` + content.slice(insertPoint);
132
+ }
133
+ }
134
+ else {
135
+ const nextOwner = content.indexOf('\n### ', ownerIdx + 1);
136
+ const nextTop = content.indexOf('\n## ', ownerIdx + 1);
137
+ const insertPoint = nextOwner >= 0 ? nextOwner : (nextTop >= 0 ? nextTop : content.length);
138
+ content = content.slice(0, insertPoint) + `${checkbox}\n` + content.slice(insertPoint);
139
+ }
140
+ }
141
+ }
142
+ content = content.replace(/^Last updated:.*$/m, `Last updated: ${nowCT()} CT`);
143
+ writeFileSafe(tasksPath, content);
144
+ return { content: [{ type: 'text', text: `Task added: "${task}" (${owner}, ${section})` }] };
145
+ }
146
+ if (action === 'complete') {
147
+ if (!task)
148
+ return { content: [{ type: 'text', text: 'task parameter required for complete' }], isError: true };
149
+ let content = readFileOrEmpty(tasksPath);
150
+ const unchecked = `- [ ] ${task}`;
151
+ if (!content.includes(task)) {
152
+ return { content: [{ type: 'text', text: `Task not found: "${task}"` }], isError: true };
153
+ }
154
+ const lineIdx = content.indexOf(unchecked);
155
+ if (lineIdx >= 0) {
156
+ content = content.slice(0, lineIdx) + content.slice(lineIdx + unchecked.length + 1);
157
+ }
158
+ else {
159
+ const taskLineMatch = content.match(new RegExp(`^.*${task.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}.*$`, 'm'));
160
+ if (taskLineMatch) {
161
+ content = content.replace(taskLineMatch[0] + '\n', '');
162
+ }
163
+ }
164
+ content = content.replace(/^Last updated:.*$/m, `Last updated: ${nowCT()} CT`);
165
+ writeFileSafe(tasksPath, content);
166
+ let completed = readFileOrEmpty(completedPath);
167
+ const today = new Date().toISOString().slice(0, 10);
168
+ completed = completed.replace('---\n', `---\n\n### ${today}\n- [x] ${task}\n`);
169
+ writeFileSafe(completedPath, completed);
170
+ return { content: [{ type: 'text', text: `Task completed and archived: "${task}"` }] };
171
+ }
172
+ if (action === 'defer') {
173
+ if (!task)
174
+ return { content: [{ type: 'text', text: 'task parameter required for defer' }], isError: true };
175
+ if (!due)
176
+ return { content: [{ type: 'text', text: 'due parameter required for defer (YYYY-MM-DD)' }], isError: true };
177
+ let content = readFileOrEmpty(tasksPath);
178
+ const unchecked = `- [ ] ${task}`;
179
+ if (content.includes(unchecked)) {
180
+ content = content.replace(unchecked + '\n', '');
181
+ }
182
+ const backlogIdx = content.indexOf('## Backlog with due date');
183
+ if (backlogIdx >= 0) {
184
+ const nextSection = content.indexOf('\n## ', backlogIdx + 1);
185
+ const insertPoint = nextSection >= 0 ? nextSection : content.length;
186
+ content = content.slice(0, insertPoint) + `- Jessie: ${task} — due ${due}\n` + content.slice(insertPoint);
187
+ }
188
+ content = content.replace(/^Last updated:.*$/m, `Last updated: ${nowCT()} CT`);
189
+ writeFileSafe(tasksPath, content);
190
+ return { content: [{ type: 'text', text: `Task deferred to backlog: "${task}" — due ${due}` }] };
191
+ }
192
+ if (action === 'list') {
193
+ const content = readFileOrEmpty(tasksPath);
194
+ if (!content.trim()) {
195
+ return { content: [{ type: 'text', text: 'No tasks file found. Run jessie_tasks action: "prep" to initialize.' }] };
196
+ }
197
+ return { content: [{ type: 'text', text: content }] };
198
+ }
199
+ if (action === 'prep') {
200
+ let content = readFileOrEmpty(tasksPath);
201
+ content = content.replace(/^Last updated:.*$/m, `Last updated: ${nowCT()} CT`);
202
+ writeFileSafe(tasksPath, content);
203
+ return {
204
+ content: [{ type: 'text', text: JSON.stringify({
205
+ action: 'prep',
206
+ instructions: [
207
+ 'Daily task prep complete. Timestamp updated.',
208
+ 'Next steps for the LLM:',
209
+ '1. Call jessie_policy action list_p0 for current priority context',
210
+ '2. Check decision store for pending proposals (add review tasks)',
211
+ '3. Check active delegations for overdue items (add follow-up tasks)',
212
+ '4. Report today\'s governance priorities to Greg',
213
+ ],
214
+ }, null, 2) }],
215
+ };
216
+ }
217
+ return { content: [{ type: 'text', text: `Unknown action: ${action}` }], isError: true };
218
+ }
219
+ catch (err) {
220
+ return {
221
+ content: [{ type: 'text', text: `jessie_tasks error: ${err instanceof Error ? err.message : String(err)}` }],
222
+ isError: true,
223
+ };
224
+ }
225
+ },
226
+ };
227
+ }
228
+ export { FLEET_GOVERNANCE_KEYWORDS, isFleetGovernanceTask };
229
+ //# sourceMappingURL=jessie-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jessie-tasks.js","sourceRoot":"","sources":["../../src/tools/jessie-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * jessie_trends — Commander Trends Tool
3
+ *
4
+ * Pattern recognition across time windows. Synthesizes decision store
5
+ * and delegation data to surface trends that inform the morning briefing
6
+ * and Commander decision-making.
7
+ *
8
+ * "Trust the trend, not the snapshot" — AGENTS.md Rule 6
9
+ */
10
+ import type { DecisionStore } from '../command/decision-store.js';
11
+ export type TrendsAction = 'summary' | 'veto_rate' | 'alert_frequency' | 'approval_rate' | 'delegation_completion' | 'agent_health';
12
+ export declare function createTrendsTool(store: DecisionStore): {
13
+ name: string;
14
+ description: string;
15
+ parameters: {
16
+ type: "object";
17
+ properties: {
18
+ action: {
19
+ type: string;
20
+ enum: string[];
21
+ description: string;
22
+ };
23
+ window: {
24
+ type: string;
25
+ enum: string[];
26
+ description: string;
27
+ };
28
+ agent: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ };
33
+ required: string[];
34
+ };
35
+ execute(_toolCallId: string, params: Record<string, unknown>): Promise<{
36
+ content: {
37
+ type: string;
38
+ text: string;
39
+ }[];
40
+ isError?: undefined;
41
+ } | {
42
+ content: {
43
+ type: string;
44
+ text: string;
45
+ }[];
46
+ isError: boolean;
47
+ }>;
48
+ };
49
+ //# sourceMappingURL=jessie-trends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jessie-trends.d.ts","sourceRoot":"","sources":["../../src/tools/jessie-trends.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAQlE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,GAAG,uBAAuB,GAAG,cAAc,CAAC;AAEpI,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;yBA6BtB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;EA2JrE"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * jessie_trends — Commander Trends Tool
3
+ *
4
+ * Pattern recognition across time windows. Synthesizes decision store
5
+ * and delegation data to surface trends that inform the morning briefing
6
+ * and Commander decision-making.
7
+ *
8
+ * "Trust the trend, not the snapshot" — AGENTS.md Rule 6
9
+ */
10
+ const WINDOW_MS = {
11
+ '24h': 24 * 60 * 60 * 1000,
12
+ '7d': 7 * 24 * 60 * 60 * 1000,
13
+ '30d': 30 * 24 * 60 * 60 * 1000,
14
+ };
15
+ export function createTrendsTool(store) {
16
+ return {
17
+ name: 'jessie_trends',
18
+ description: 'Pattern recognition across time windows. ' +
19
+ 'Actions: summary (dashboard overview), veto_rate (veto frequency + trend), ' +
20
+ 'approval_rate (approval vs rejection ratio), delegation_completion (completion rate + overdue), ' +
21
+ 'alert_frequency (alert count by agent), agent_health (per-agent composite). ' +
22
+ 'Windows: 24h, 7d, 30d.',
23
+ parameters: {
24
+ type: 'object',
25
+ properties: {
26
+ action: {
27
+ type: 'string',
28
+ enum: ['summary', 'veto_rate', 'alert_frequency', 'approval_rate', 'delegation_completion', 'agent_health'],
29
+ description: 'Trend analysis action',
30
+ },
31
+ window: {
32
+ type: 'string',
33
+ enum: ['24h', '7d', '30d'],
34
+ description: 'Time window (default: 7d)',
35
+ },
36
+ agent: {
37
+ type: 'string',
38
+ description: 'Filter by specific agent (optional)',
39
+ },
40
+ },
41
+ required: ['action'],
42
+ },
43
+ async execute(_toolCallId, params) {
44
+ try {
45
+ const action = params.action;
46
+ const windowKey = params.window || '7d';
47
+ const agentFilter = params.agent;
48
+ const windowMs = WINDOW_MS[windowKey] ?? WINDOW_MS['7d'];
49
+ const decisions = store.getDecisionsInWindow(windowMs);
50
+ const delegations = store.getDelegationsInWindow(windowMs);
51
+ let vetoes = decisions.vetoes;
52
+ let approvals = decisions.approvals;
53
+ let filteredDelegations = delegations;
54
+ if (agentFilter) {
55
+ const agent = agentFilter.toLowerCase();
56
+ vetoes = vetoes.filter(v => v.targetAgent.toLowerCase() === agent);
57
+ approvals = approvals.filter(a => a.targetAgent.toLowerCase() === agent);
58
+ filteredDelegations = filteredDelegations.filter(d => d.targetAgent.toLowerCase() === agent);
59
+ }
60
+ if (action === 'veto_rate') {
61
+ const totalDecisions = vetoes.length + approvals.length;
62
+ const vetoRate = totalDecisions > 0 ? (vetoes.length / totalDecisions * 100).toFixed(1) : '0.0';
63
+ const { trend } = store.getVetoTrend();
64
+ const topReasons = new Map();
65
+ for (const v of vetoes) {
66
+ const short = v.reasoning.split(/[.!?]/)[0].trim().slice(0, 80);
67
+ topReasons.set(short, (topReasons.get(short) ?? 0) + 1);
68
+ }
69
+ return { content: [{ type: 'text', text: JSON.stringify({
70
+ window: windowKey,
71
+ vetoCount: vetoes.length,
72
+ totalDecisions,
73
+ vetoRate: `${vetoRate}%`,
74
+ trend,
75
+ topReasons: Array.from(topReasons.entries())
76
+ .sort((a, b) => b[1] - a[1])
77
+ .slice(0, 5)
78
+ .map(([reason, count]) => ({ reason, count })),
79
+ }, null, 2) }] };
80
+ }
81
+ if (action === 'approval_rate') {
82
+ const totalDecisions = vetoes.length + approvals.length;
83
+ const approvalRate = totalDecisions > 0 ? (approvals.length / totalDecisions * 100).toFixed(1) : '0.0';
84
+ return { content: [{ type: 'text', text: JSON.stringify({
85
+ window: windowKey,
86
+ approvalCount: approvals.length,
87
+ vetoCount: vetoes.length,
88
+ totalDecisions,
89
+ approvalRate: `${approvalRate}%`,
90
+ }, null, 2) }] };
91
+ }
92
+ if (action === 'delegation_completion') {
93
+ const completed = filteredDelegations.filter(d => d.status === 'complete');
94
+ const overdue = filteredDelegations.filter(d => d.status !== 'complete' && d.lastUpdate);
95
+ const completionRate = filteredDelegations.length > 0
96
+ ? (completed.length / filteredDelegations.length * 100).toFixed(1)
97
+ : '0.0';
98
+ const completionTimes = completed
99
+ .filter(d => d.completedAt && d.timestamp)
100
+ .map(d => new Date(d.completedAt).getTime() - new Date(d.timestamp).getTime());
101
+ const avgCompletionMs = completionTimes.length > 0
102
+ ? completionTimes.reduce((a, b) => a + b, 0) / completionTimes.length
103
+ : 0;
104
+ const avgCompletionHours = (avgCompletionMs / (1000 * 60 * 60)).toFixed(1);
105
+ return { content: [{ type: 'text', text: JSON.stringify({
106
+ window: windowKey,
107
+ totalDelegations: filteredDelegations.length,
108
+ completedCount: completed.length,
109
+ completionRate: `${completionRate}%`,
110
+ avgCompletionHours,
111
+ overdueCount: overdue.length,
112
+ }, null, 2) }] };
113
+ }
114
+ if (action === 'alert_frequency') {
115
+ const vetosByAgent = new Map();
116
+ for (const v of decisions.vetoes) {
117
+ vetosByAgent.set(v.targetAgent, (vetosByAgent.get(v.targetAgent) ?? 0) + 1);
118
+ }
119
+ return { content: [{ type: 'text', text: JSON.stringify({
120
+ window: windowKey,
121
+ note: 'Alert frequency derived from decision store. Fleet-bus log access not available — showing veto frequency by agent as proxy.',
122
+ byAgent: Array.from(vetosByAgent.entries())
123
+ .sort((a, b) => b[1] - a[1])
124
+ .map(([agent, count]) => ({ agent, vetoCount: count })),
125
+ }, null, 2) }] };
126
+ }
127
+ if (action === 'agent_health') {
128
+ const agents = ['nole', 'grillo', 'noah', 'sam', 'mighty-mark'];
129
+ const targetAgent = agentFilter?.toLowerCase();
130
+ const agentList = targetAgent ? [targetAgent] : agents;
131
+ const health = agentList.map(agent => {
132
+ const agentVetoes = decisions.vetoes.filter(v => v.targetAgent.toLowerCase() === agent);
133
+ const agentApprovals = decisions.approvals.filter(a => a.targetAgent.toLowerCase() === agent);
134
+ const agentDelegations = delegations.filter(d => d.targetAgent.toLowerCase() === agent);
135
+ const completedDelegations = agentDelegations.filter(d => d.status === 'complete');
136
+ return {
137
+ agent,
138
+ vetoes: agentVetoes.length,
139
+ approvals: agentApprovals.length,
140
+ delegations: agentDelegations.length,
141
+ delegationsCompleted: completedDelegations.length,
142
+ delegationCompletionRate: agentDelegations.length > 0
143
+ ? `${(completedDelegations.length / agentDelegations.length * 100).toFixed(0)}%`
144
+ : 'N/A',
145
+ };
146
+ });
147
+ return { content: [{ type: 'text', text: JSON.stringify({ window: windowKey, agents: health }, null, 2) }] };
148
+ }
149
+ if (action === 'summary') {
150
+ const totalDecisions = vetoes.length + approvals.length;
151
+ const vetoRate = totalDecisions > 0 ? `${(vetoes.length / totalDecisions * 100).toFixed(1)}%` : 'N/A';
152
+ const { trend } = store.getVetoTrend();
153
+ const completed = filteredDelegations.filter(d => d.status === 'complete');
154
+ const completionRate = filteredDelegations.length > 0
155
+ ? `${(completed.length / filteredDelegations.length * 100).toFixed(1)}%`
156
+ : 'N/A';
157
+ return { content: [{ type: 'text', text: JSON.stringify({
158
+ window: windowKey,
159
+ overview: {
160
+ totalDecisions,
161
+ vetoRate,
162
+ vetoTrend: trend,
163
+ totalDelegations: filteredDelegations.length,
164
+ delegationCompletionRate: completionRate,
165
+ activeDelegations: filteredDelegations.filter(d => d.status !== 'complete').length,
166
+ },
167
+ }, null, 2) }] };
168
+ }
169
+ return { content: [{ type: 'text', text: `Unknown action: ${action}` }], isError: true };
170
+ }
171
+ catch (err) {
172
+ return {
173
+ content: [{ type: 'text', text: `jessie_trends error: ${err instanceof Error ? err.message : String(err)}` }],
174
+ isError: true,
175
+ };
176
+ }
177
+ },
178
+ };
179
+ }
180
+ //# sourceMappingURL=jessie-trends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jessie-trends.js","sourceRoot":"","sources":["../../src/tools/jessie-trends.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "id": "jessie",
3
3
  "name": "Jessie — Fleet Commander",
4
- "description": "Fleet Commander plugin — morning briefings, decision tracking (veto/approve), task delegation, fleet-wide status synthesis, fleet-bus communications, and searchable Commander memory.",
5
- "version": "0.2.0",
4
+ "description": "Fleet Commander plugin — morning briefings, decision tracking (veto/approve), task delegation, policy-driven triage, fleet-wide status synthesis, fleet-bus communications, searchable Commander memory, fleet task management, trend analysis, structured corrections, meeting-note ingestion, and configurable channel abstraction.",
5
+ "version": "0.5.1",
6
6
  "entry": "dist/plugin.js",
7
7
  "configSchema": {
8
8
  "type": "object",
@@ -13,10 +13,27 @@
13
13
  "description": "Directory for Jessie's decision data storage",
14
14
  "default": ".jessie-data"
15
15
  },
16
- "morningBriefingAutoTrigger": {
17
- "type": "boolean",
18
- "description": "Auto-trigger morning briefing on first daily interaction",
19
- "default": true
16
+ "channel": {
17
+ "type": "object",
18
+ "description": "Channel configuration for proactive delivery (briefings, heartbeats, escalations)",
19
+ "properties": {
20
+ "primary": {
21
+ "type": "object",
22
+ "properties": {
23
+ "type": { "type": "string", "enum": ["telegram", "slack", "discord", "signal", "googlechat", "custom"], "default": "telegram" },
24
+ "target": { "type": "string", "description": "Channel target (chat ID, channel name, etc.)" },
25
+ "label": { "type": "string", "description": "Human-readable label for this channel" }
26
+ }
27
+ },
28
+ "fallback": {
29
+ "type": "object",
30
+ "properties": {
31
+ "type": { "type": "string", "enum": ["telegram", "slack", "discord", "signal", "googlechat", "custom"] },
32
+ "target": { "type": "string" },
33
+ "label": { "type": "string" }
34
+ }
35
+ }
36
+ }
20
37
  }
21
38
  },
22
39
  "required": []
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aiassesstech/jessie",
3
- "version": "0.2.17",
4
- "description": "Jessie — Fleet Commander plugin for OpenClaw. Morning briefings, decision tracking, task delegation, fleet-bus communications.",
3
+ "version": "0.5.1",
4
+ "description": "Jessie — Fleet Commander plugin for OpenClaw. Morning briefings, decision tracking, task delegation, policy-driven triage, fleet-bus communications.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -28,7 +28,8 @@
28
28
  "test": "vitest run",
29
29
  "test:watch": "vitest",
30
30
  "test:coverage": "vitest run --coverage",
31
- "prepublishOnly": "npm run typecheck && npm run test && npm run build"
31
+ "check-version-sync": "node -e \"const p=require('./package.json'),o=require('./openclaw.plugin.json');if(p.version!==o.version){console.error('VERSION MISMATCH: package.json='+p.version+' openclaw.plugin.json='+o.version);process.exit(1)}\"",
32
+ "prepublishOnly": "npm run check-version-sync && npm run typecheck && npm run test && npm run build"
32
33
  },
33
34
  "keywords": [
34
35
  "jessie",