reflectt-node 0.1.8 → 0.1.11
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/defaults/TEAM-ROLES.yaml +317 -5
- package/dist/agent-config.d.ts +51 -0
- package/dist/agent-config.d.ts.map +1 -0
- package/dist/agent-config.js +129 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/agent-config.test.d.ts +2 -0
- package/dist/agent-config.test.d.ts.map +1 -0
- package/dist/agent-config.test.js +91 -0
- package/dist/agent-config.test.js.map +1 -0
- package/dist/agent-memories.d.ts +58 -0
- package/dist/agent-memories.d.ts.map +1 -0
- package/dist/agent-memories.js +168 -0
- package/dist/agent-memories.js.map +1 -0
- package/dist/agent-memories.test.d.ts +2 -0
- package/dist/agent-memories.test.d.ts.map +1 -0
- package/dist/agent-memories.test.js +327 -0
- package/dist/agent-memories.test.js.map +1 -0
- package/dist/agent-messaging.d.ts +50 -0
- package/dist/agent-messaging.d.ts.map +1 -0
- package/dist/agent-messaging.js +103 -0
- package/dist/agent-messaging.js.map +1 -0
- package/dist/agent-messaging.test.d.ts +2 -0
- package/dist/agent-messaging.test.d.ts.map +1 -0
- package/dist/agent-messaging.test.js +105 -0
- package/dist/agent-messaging.test.js.map +1 -0
- package/dist/agent-runs.d.ts +158 -0
- package/dist/agent-runs.d.ts.map +1 -0
- package/dist/agent-runs.js +514 -0
- package/dist/agent-runs.js.map +1 -0
- package/dist/agent-runs.test.d.ts +2 -0
- package/dist/agent-runs.test.d.ts.map +1 -0
- package/dist/agent-runs.test.js +386 -0
- package/dist/agent-runs.test.js.map +1 -0
- package/dist/approval-queue.test.d.ts +2 -0
- package/dist/approval-queue.test.d.ts.map +1 -0
- package/dist/approval-queue.test.js +118 -0
- package/dist/approval-queue.test.js.map +1 -0
- package/dist/artifact-store.d.ts +55 -0
- package/dist/artifact-store.d.ts.map +1 -0
- package/dist/artifact-store.js +128 -0
- package/dist/artifact-store.js.map +1 -0
- package/dist/artifact-store.test.d.ts +2 -0
- package/dist/artifact-store.test.d.ts.map +1 -0
- package/dist/artifact-store.test.js +119 -0
- package/dist/artifact-store.test.js.map +1 -0
- package/dist/boardHealthWorker.d.ts +28 -0
- package/dist/boardHealthWorker.d.ts.map +1 -1
- package/dist/boardHealthWorker.js +33 -1
- package/dist/boardHealthWorker.js.map +1 -1
- package/dist/canvas-input.test.d.ts +2 -0
- package/dist/canvas-input.test.d.ts.map +1 -0
- package/dist/canvas-input.test.js +96 -0
- package/dist/canvas-input.test.js.map +1 -0
- package/dist/canvas-render.test.d.ts +2 -0
- package/dist/canvas-render.test.d.ts.map +1 -0
- package/dist/canvas-render.test.js +95 -0
- package/dist/canvas-render.test.js.map +1 -0
- package/dist/capabilities/browser.d.ts +75 -0
- package/dist/capabilities/browser.d.ts.map +1 -0
- package/dist/capabilities/browser.js +172 -0
- package/dist/capabilities/browser.js.map +1 -0
- package/dist/channels.d.ts +1 -1
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +2 -0
- package/dist/cloud.d.ts.map +1 -1
- package/dist/cloud.js +21 -1
- package/dist/cloud.js.map +1 -1
- package/dist/cost-enforcement.d.ts +38 -0
- package/dist/cost-enforcement.d.ts.map +1 -0
- package/dist/cost-enforcement.js +84 -0
- package/dist/cost-enforcement.js.map +1 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +131 -0
- package/dist/db.js.map +1 -1
- package/dist/e2e-loop-proof.test.d.ts +2 -0
- package/dist/e2e-loop-proof.test.d.ts.map +1 -0
- package/dist/e2e-loop-proof.test.js +104 -0
- package/dist/e2e-loop-proof.test.js.map +1 -0
- package/dist/email-sms-send.test.d.ts +2 -0
- package/dist/email-sms-send.test.d.ts.map +1 -0
- package/dist/email-sms-send.test.js +96 -0
- package/dist/email-sms-send.test.js.map +1 -0
- package/dist/events.d.ts +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +5 -10
- package/dist/fingerprint.js.map +1 -1
- package/dist/github-webhook-chat.d.ts +75 -0
- package/dist/github-webhook-chat.d.ts.map +1 -0
- package/dist/github-webhook-chat.js +108 -0
- package/dist/github-webhook-chat.js.map +1 -0
- package/dist/handoff-state.test.d.ts +2 -0
- package/dist/handoff-state.test.d.ts.map +1 -0
- package/dist/handoff-state.test.js +102 -0
- package/dist/handoff-state.test.js.map +1 -0
- package/dist/health.d.ts +9 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +18 -0
- package/dist/health.js.map +1 -1
- package/dist/host-error-correlation.d.ts +65 -0
- package/dist/host-error-correlation.d.ts.map +1 -0
- package/dist/host-error-correlation.js +123 -0
- package/dist/host-error-correlation.js.map +1 -0
- package/dist/index.js +39 -10
- package/dist/index.js.map +1 -1
- package/dist/notificationDedupeGuard.d.ts +4 -0
- package/dist/notificationDedupeGuard.d.ts.map +1 -1
- package/dist/notificationDedupeGuard.js +8 -4
- package/dist/notificationDedupeGuard.js.map +1 -1
- package/dist/presence.d.ts +37 -5
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +127 -16
- package/dist/presence.js.map +1 -1
- package/dist/review-sla.d.ts +9 -0
- package/dist/review-sla.d.ts.map +1 -0
- package/dist/review-sla.js +51 -0
- package/dist/review-sla.js.map +1 -0
- package/dist/routing-enforcement.test.d.ts +2 -0
- package/dist/routing-enforcement.test.d.ts.map +1 -0
- package/dist/routing-enforcement.test.js +86 -0
- package/dist/routing-enforcement.test.js.map +1 -0
- package/dist/run-retention.test.d.ts +2 -0
- package/dist/run-retention.test.d.ts.map +1 -0
- package/dist/run-retention.test.js +57 -0
- package/dist/run-retention.test.js.map +1 -0
- package/dist/run-stream.test.d.ts +2 -0
- package/dist/run-stream.test.d.ts.map +1 -0
- package/dist/run-stream.test.js +70 -0
- package/dist/run-stream.test.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1229 -75
- package/dist/server.js.map +1 -1
- package/dist/tasks.d.ts.map +1 -1
- package/dist/tasks.js +45 -0
- package/dist/tasks.js.map +1 -1
- package/dist/todoHoardingGuard.d.ts +17 -0
- package/dist/todoHoardingGuard.d.ts.map +1 -1
- package/dist/todoHoardingGuard.js +25 -2
- package/dist/todoHoardingGuard.js.map +1 -1
- package/dist/webhook-storage.d.ts +50 -0
- package/dist/webhook-storage.d.ts.map +1 -0
- package/dist/webhook-storage.js +102 -0
- package/dist/webhook-storage.js.map +1 -0
- package/dist/webhook-storage.test.d.ts +2 -0
- package/dist/webhook-storage.test.d.ts.map +1 -0
- package/dist/webhook-storage.test.js +86 -0
- package/dist/webhook-storage.test.js.map +1 -0
- package/dist/workflow-templates.d.ts +44 -0
- package/dist/workflow-templates.d.ts.map +1 -0
- package/dist/workflow-templates.js +154 -0
- package/dist/workflow-templates.js.map +1 -0
- package/dist/workflow-templates.test.d.ts +2 -0
- package/dist/workflow-templates.test.d.ts.map +1 -0
- package/dist/workflow-templates.test.js +76 -0
- package/dist/workflow-templates.test.js.map +1 -0
- package/package.json +3 -1
- package/public/dashboard.js +11 -0
- package/public/design-tokens-platform.md +118 -0
- package/public/design-tokens.css +195 -0
- package/public/docs.md +127 -2
package/dist/fingerprint.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Contract: process/TASK-2k0iha2hp-payload-contract.md | Reviewer: @sage
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from 'node:crypto';
|
|
8
|
-
|
|
8
|
+
// execSync removed — use buildInfo instead of shelling out (PR #836 pattern)
|
|
9
9
|
const STARTED_AT = Date.now();
|
|
10
10
|
const WINDOW_MS = 5 * 60 * 1000; // 5 minutes
|
|
11
11
|
// ── Internal state ───────────────────────────────────────────────────────────
|
|
@@ -106,16 +106,11 @@ export function getDeployTransition(hostId, deploy) {
|
|
|
106
106
|
return null;
|
|
107
107
|
}
|
|
108
108
|
export function getDeployInfo() {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
commit = execSync('git rev-parse --short HEAD', { encoding: 'utf8' }).trim();
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// not a git repo or git unavailable — use fallback
|
|
115
|
-
}
|
|
109
|
+
// Use baked buildInfo instead of shelling out to git (fixes ambient-repo bug, same as PR #836)
|
|
110
|
+
const { buildInfo } = require('./buildInfo.js');
|
|
116
111
|
return {
|
|
117
|
-
commit,
|
|
118
|
-
version: process.env.npm_package_version
|
|
112
|
+
commit: buildInfo.shortSha || 'unknown',
|
|
113
|
+
version: buildInfo.version || process.env.npm_package_version || '0.0.0',
|
|
119
114
|
deployed_at: STARTED_AT,
|
|
120
115
|
};
|
|
121
116
|
}
|
package/dist/fingerprint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,4BAA4B;AAE5B;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
interface ReflecttAttribution {
|
|
2
|
+
agent: string | null;
|
|
3
|
+
githubUser: string | null;
|
|
4
|
+
remapped: boolean;
|
|
5
|
+
source: string;
|
|
6
|
+
}
|
|
7
|
+
interface GitHubEvent extends Record<string, unknown> {
|
|
8
|
+
_reflectt_attribution?: ReflecttAttribution;
|
|
9
|
+
action?: string;
|
|
10
|
+
sender?: {
|
|
11
|
+
login?: string;
|
|
12
|
+
};
|
|
13
|
+
repository?: {
|
|
14
|
+
full_name?: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
};
|
|
17
|
+
pull_request?: {
|
|
18
|
+
number?: number;
|
|
19
|
+
title?: string;
|
|
20
|
+
html_url?: string;
|
|
21
|
+
user?: {
|
|
22
|
+
login?: string;
|
|
23
|
+
};
|
|
24
|
+
merged?: boolean;
|
|
25
|
+
body?: string;
|
|
26
|
+
};
|
|
27
|
+
issue?: {
|
|
28
|
+
number?: number;
|
|
29
|
+
title?: string;
|
|
30
|
+
html_url?: string;
|
|
31
|
+
user?: {
|
|
32
|
+
login?: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
comment?: {
|
|
36
|
+
body?: string;
|
|
37
|
+
html_url?: string;
|
|
38
|
+
user?: {
|
|
39
|
+
login?: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
review?: {
|
|
43
|
+
state?: string;
|
|
44
|
+
body?: string;
|
|
45
|
+
html_url?: string;
|
|
46
|
+
user?: {
|
|
47
|
+
login?: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
ref?: string;
|
|
51
|
+
head_commit?: {
|
|
52
|
+
message?: string;
|
|
53
|
+
author?: {
|
|
54
|
+
username?: string;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
check_run?: {
|
|
58
|
+
name?: string;
|
|
59
|
+
conclusion?: string;
|
|
60
|
+
html_url?: string;
|
|
61
|
+
};
|
|
62
|
+
workflow_run?: {
|
|
63
|
+
name?: string;
|
|
64
|
+
conclusion?: string;
|
|
65
|
+
html_url?: string;
|
|
66
|
+
head_branch?: string;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Format a GitHub webhook event into a chat message.
|
|
71
|
+
* Returns null if the event should not be posted to chat.
|
|
72
|
+
*/
|
|
73
|
+
export declare function formatGitHubEvent(eventType: string, payload: GitHubEvent): string | null;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=github-webhook-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-webhook-chat.d.ts","sourceRoot":"","sources":["../src/github-webhook-chat.ts"],"names":[],"mappings":"AAeA,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,WAAY,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,qBAAqB,CAAC,EAAE,mBAAmB,CAAA;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,UAAU,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QACzB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC1B,CAAA;IACD,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC1B,CAAA;IACD,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,IAAI,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC1B,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC/B,CAAA;IACD,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,YAAY,CAAC,EAAE;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;CACF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CA0FxF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* GitHub Webhook → Chat Bridge
|
|
5
|
+
*
|
|
6
|
+
* Formats incoming GitHub webhook events as chat messages with
|
|
7
|
+
* agent-remapped mentions and posts them to the 'github' channel.
|
|
8
|
+
* Replaces Discord's native GitHub integration to ensure @mentions
|
|
9
|
+
* resolve to agent names instead of shared GitHub usernames.
|
|
10
|
+
*/
|
|
11
|
+
import { remapGitHubMentions } from './github-webhook-attribution.js';
|
|
12
|
+
/**
|
|
13
|
+
* Format a GitHub webhook event into a chat message.
|
|
14
|
+
* Returns null if the event should not be posted to chat.
|
|
15
|
+
*/
|
|
16
|
+
export function formatGitHubEvent(eventType, payload) {
|
|
17
|
+
const repo = payload.repository?.name || payload.repository?.full_name || 'unknown';
|
|
18
|
+
const rawSender = payload.sender?.login || 'unknown';
|
|
19
|
+
// Prefer branch-resolved agent name from enriched payload attribution.
|
|
20
|
+
// Falls back to remapped GitHub username (e.g. @itskaidev → @kai).
|
|
21
|
+
// This ensures PR events from `link/feature-x` mention @link, not @kai.
|
|
22
|
+
const resolvedAgent = payload._reflectt_attribution?.agent;
|
|
23
|
+
const sender = resolvedAgent ?? remapGitHubMentions(rawSender) ?? rawSender;
|
|
24
|
+
let message = null;
|
|
25
|
+
switch (eventType) {
|
|
26
|
+
case 'pull_request': {
|
|
27
|
+
const pr = payload.pull_request;
|
|
28
|
+
if (!pr)
|
|
29
|
+
break;
|
|
30
|
+
const action = payload.action;
|
|
31
|
+
if (action === 'opened') {
|
|
32
|
+
message = `@${sender} 📝 **PR opened** #${pr.number}: [${pr.title}](${pr.html_url})\nRepo: \`${repo}\``;
|
|
33
|
+
}
|
|
34
|
+
else if (action === 'closed' && pr.merged) {
|
|
35
|
+
message = `@${sender} ✅ **PR merged** #${pr.number}: [${pr.title}](${pr.html_url})\nRepo: \`${repo}\``;
|
|
36
|
+
}
|
|
37
|
+
else if (action === 'closed') {
|
|
38
|
+
message = `@${sender} ❌ **PR closed** #${pr.number}: [${pr.title}](${pr.html_url})\nRepo: \`${repo}\``;
|
|
39
|
+
}
|
|
40
|
+
else if (action === 'review_requested') {
|
|
41
|
+
message = `@${sender} 👀 **Review requested** on #${pr.number}: [${pr.title}](${pr.html_url})\nRepo: \`${repo}\``;
|
|
42
|
+
}
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case 'pull_request_review': {
|
|
46
|
+
const review = payload.review;
|
|
47
|
+
const pr = payload.pull_request;
|
|
48
|
+
if (!review || !pr)
|
|
49
|
+
break;
|
|
50
|
+
const state = review.state === 'approved' ? '✅ approved' :
|
|
51
|
+
review.state === 'changes_requested' ? '🔄 changes requested' :
|
|
52
|
+
'💬 commented';
|
|
53
|
+
message = `@${sender} ${state} on #${pr.number}: [${pr.title}](${pr.html_url})\nRepo: \`${repo}\``;
|
|
54
|
+
if (review.body)
|
|
55
|
+
message += `\n> ${review.body.slice(0, 200)}`;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'issue_comment':
|
|
59
|
+
case 'pull_request_review_comment': {
|
|
60
|
+
const comment = payload.comment;
|
|
61
|
+
const issue = payload.issue || payload.pull_request;
|
|
62
|
+
if (!comment || !issue)
|
|
63
|
+
break;
|
|
64
|
+
const type = payload.pull_request ? 'PR' : 'Issue';
|
|
65
|
+
message = `@${sender} 💬 **Comment** on ${type} #${issue.number}: [${issue.title}](${issue.html_url})\nRepo: \`${repo}\``;
|
|
66
|
+
if (comment.body)
|
|
67
|
+
message += `\n> ${comment.body.slice(0, 200)}`;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case 'issues': {
|
|
71
|
+
const issue = payload.issue;
|
|
72
|
+
if (!issue || payload.action !== 'opened')
|
|
73
|
+
break;
|
|
74
|
+
message = `@${sender} 🐛 **Issue opened** #${issue.number}: [${issue.title}](${issue.html_url})\nRepo: \`${repo}\``;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case 'push': {
|
|
78
|
+
const commit = payload.head_commit;
|
|
79
|
+
if (!commit)
|
|
80
|
+
break;
|
|
81
|
+
const branch = payload.ref?.replace('refs/heads/', '') || 'unknown';
|
|
82
|
+
message = `@${sender} 📦 **Push** to \`${branch}\` on \`${repo}\`\n> ${commit.message?.split('\n')[0]?.slice(0, 100) || 'no message'}`;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case 'workflow_run': {
|
|
86
|
+
const run = payload.workflow_run;
|
|
87
|
+
if (!run || payload.action !== 'completed')
|
|
88
|
+
break;
|
|
89
|
+
const icon = run.conclusion === 'success' ? '✅' : run.conclusion === 'failure' ? '❌' : '⚠️';
|
|
90
|
+
message = `${icon} **${run.name}** ${run.conclusion} on \`${run.head_branch}\`\nRepo: \`${repo}\` [View](${run.html_url})`;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'check_run': {
|
|
94
|
+
const check = payload.check_run;
|
|
95
|
+
if (!check || payload.action !== 'completed' || check.conclusion === 'success')
|
|
96
|
+
break;
|
|
97
|
+
// Only post failed checks
|
|
98
|
+
message = `❌ **Check failed**: ${check.name} — ${check.conclusion}\nRepo: \`${repo}\` [View](${check.html_url})`;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
default:
|
|
102
|
+
// Don't post unknown event types
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
// Remap GitHub mentions to agent names
|
|
106
|
+
return message ? remapGitHubMentions(message) : null;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=github-webhook-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-webhook-chat.js","sourceRoot":"","sources":["../src/github-webhook-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-state.test.d.ts","sourceRoot":"","sources":["../src/handoff-state.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
/**
|
|
5
|
+
* Tests for handoff state validation schema.
|
|
6
|
+
* The actual server integration is tested via the PATCH /tasks/:id flow,
|
|
7
|
+
* but we test the schema shape here to catch regressions early.
|
|
8
|
+
*/
|
|
9
|
+
const VALID_DECISIONS = ['approved', 'rejected', 'needs_changes', 'escalated'];
|
|
10
|
+
function validateHandoffState(input) {
|
|
11
|
+
if (!input || typeof input !== 'object')
|
|
12
|
+
return { valid: false, error: 'must be an object' };
|
|
13
|
+
const obj = input;
|
|
14
|
+
if (typeof obj.reviewed_by !== 'string' || !obj.reviewed_by.trim()) {
|
|
15
|
+
return { valid: false, error: 'reviewed_by is required (non-empty string)' };
|
|
16
|
+
}
|
|
17
|
+
if (!VALID_DECISIONS.includes(obj.decision)) {
|
|
18
|
+
return { valid: false, error: `decision must be one of: ${VALID_DECISIONS.join(', ')}` };
|
|
19
|
+
}
|
|
20
|
+
if (obj.next_owner !== undefined && (typeof obj.next_owner !== 'string' || !obj.next_owner.trim())) {
|
|
21
|
+
return { valid: false, error: 'next_owner must be a non-empty string if provided' };
|
|
22
|
+
}
|
|
23
|
+
// Max 3 fields (COO rule)
|
|
24
|
+
const knownKeys = new Set(['reviewed_by', 'decision', 'next_owner']);
|
|
25
|
+
const extraKeys = Object.keys(obj).filter(k => !knownKeys.has(k));
|
|
26
|
+
if (extraKeys.length > 0) {
|
|
27
|
+
return { valid: false, error: `Unknown fields: ${extraKeys.join(', ')}. Max 3 columns per COO rule.` };
|
|
28
|
+
}
|
|
29
|
+
return { valid: true };
|
|
30
|
+
}
|
|
31
|
+
describe('handoff state validation', () => {
|
|
32
|
+
it('accepts valid handoff with all 3 fields', () => {
|
|
33
|
+
const result = validateHandoffState({
|
|
34
|
+
reviewed_by: 'sage',
|
|
35
|
+
decision: 'approved',
|
|
36
|
+
next_owner: 'link',
|
|
37
|
+
});
|
|
38
|
+
assert.equal(result.valid, true);
|
|
39
|
+
});
|
|
40
|
+
it('accepts valid handoff without next_owner', () => {
|
|
41
|
+
const result = validateHandoffState({
|
|
42
|
+
reviewed_by: 'kai',
|
|
43
|
+
decision: 'rejected',
|
|
44
|
+
});
|
|
45
|
+
assert.equal(result.valid, true);
|
|
46
|
+
});
|
|
47
|
+
it('rejects missing reviewed_by', () => {
|
|
48
|
+
const result = validateHandoffState({
|
|
49
|
+
decision: 'approved',
|
|
50
|
+
});
|
|
51
|
+
assert.equal(result.valid, false);
|
|
52
|
+
assert.ok(result.error?.includes('reviewed_by'));
|
|
53
|
+
});
|
|
54
|
+
it('rejects missing decision', () => {
|
|
55
|
+
const result = validateHandoffState({
|
|
56
|
+
reviewed_by: 'sage',
|
|
57
|
+
});
|
|
58
|
+
assert.equal(result.valid, false);
|
|
59
|
+
assert.ok(result.error?.includes('decision'));
|
|
60
|
+
});
|
|
61
|
+
it('rejects invalid decision value', () => {
|
|
62
|
+
const result = validateHandoffState({
|
|
63
|
+
reviewed_by: 'sage',
|
|
64
|
+
decision: 'maybe',
|
|
65
|
+
});
|
|
66
|
+
assert.equal(result.valid, false);
|
|
67
|
+
assert.ok(result.error?.includes('decision'));
|
|
68
|
+
});
|
|
69
|
+
it('rejects extra fields (COO 3-column rule)', () => {
|
|
70
|
+
const result = validateHandoffState({
|
|
71
|
+
reviewed_by: 'sage',
|
|
72
|
+
decision: 'approved',
|
|
73
|
+
next_owner: 'link',
|
|
74
|
+
extra_field: 'not allowed',
|
|
75
|
+
});
|
|
76
|
+
assert.equal(result.valid, false);
|
|
77
|
+
assert.ok(result.error?.includes('extra_field'));
|
|
78
|
+
});
|
|
79
|
+
it('accepts all valid decision types', () => {
|
|
80
|
+
for (const decision of VALID_DECISIONS) {
|
|
81
|
+
const result = validateHandoffState({
|
|
82
|
+
reviewed_by: 'sage',
|
|
83
|
+
decision,
|
|
84
|
+
});
|
|
85
|
+
assert.equal(result.valid, true, `Expected ${decision} to be valid`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
it('rejects null input', () => {
|
|
89
|
+
assert.equal(validateHandoffState(null).valid, false);
|
|
90
|
+
});
|
|
91
|
+
it('rejects non-object input', () => {
|
|
92
|
+
assert.equal(validateHandoffState('string').valid, false);
|
|
93
|
+
});
|
|
94
|
+
it('rejects empty reviewed_by', () => {
|
|
95
|
+
const result = validateHandoffState({
|
|
96
|
+
reviewed_by: ' ',
|
|
97
|
+
decision: 'approved',
|
|
98
|
+
});
|
|
99
|
+
assert.equal(result.valid, false);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=handoff-state.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-state.test.js","sourceRoot":"","sources":["../src/handoff-state.test.ts"],"names":[],"mappings":"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"}
|
package/dist/health.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface StaleDoingTask {
|
|
|
20
20
|
}
|
|
21
21
|
export interface TeamHealthMetrics {
|
|
22
22
|
timestamp: number;
|
|
23
|
+
scope: TeamHealthScope;
|
|
23
24
|
agents: AgentHealthStatus[];
|
|
24
25
|
blockers: BlockerAlert[];
|
|
25
26
|
overlaps: OverlapAlert[];
|
|
@@ -32,12 +33,20 @@ export interface TeamHealthMetrics {
|
|
|
32
33
|
tasks: StaleDoingTask[];
|
|
33
34
|
};
|
|
34
35
|
}
|
|
36
|
+
export interface TeamHealthScope {
|
|
37
|
+
kind: 'host-local';
|
|
38
|
+
hostName: string;
|
|
39
|
+
label: string;
|
|
40
|
+
message: string;
|
|
41
|
+
orgHealthUrl: string | null;
|
|
42
|
+
}
|
|
35
43
|
export type ActiveLane = 'doing' | 'blocked' | 'validating' | 'queue-clear' | 'offline';
|
|
36
44
|
/**
|
|
37
45
|
* Compute per-agent active lane from task board + presence data.
|
|
38
46
|
* Priority: doing > blocked > validating > offline > queue-clear
|
|
39
47
|
*/
|
|
40
48
|
export declare function computeActiveLane(agentName: string, tasks: Pick<Task, 'assignee' | 'status'>[], presenceStatus?: string, lastSeenMs?: number, offlineThresholdMs?: number, now?: number): ActiveLane;
|
|
49
|
+
export declare function getTeamHealthScope(): TeamHealthScope;
|
|
41
50
|
export interface AgentHealthSummaryRow {
|
|
42
51
|
agent: string;
|
|
43
52
|
last_seen: number;
|
package/dist/health.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"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"}
|
package/dist/health.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - Collaboration compliance (protocol v1)
|
|
11
11
|
*/
|
|
12
12
|
import { appendFile, mkdir, readFile } from 'node:fs/promises';
|
|
13
|
+
import { hostname } from 'node:os';
|
|
13
14
|
import { dirname, resolve } from 'node:path';
|
|
14
15
|
import { presenceManager } from './presence.js';
|
|
15
16
|
import { chatManager } from './chat.js';
|
|
@@ -19,6 +20,7 @@ import { resolveIdleNudgeLane } from './watchdog/idleNudgeLane.js';
|
|
|
19
20
|
import { getDb } from './db.js';
|
|
20
21
|
import { policyManager } from './policy.js';
|
|
21
22
|
import { recordSystemLoopTick } from './system-loop-state.js';
|
|
23
|
+
import { isCloudConfigured } from './cloud.js';
|
|
22
24
|
/**
|
|
23
25
|
* Validate a task timestamp is within reasonable bounds.
|
|
24
26
|
* Rejects: 0, negative, NaN, future timestamps (>1h ahead), impossibly old (>1 year).
|
|
@@ -74,6 +76,21 @@ export function computeActiveLane(agentName, tasks, presenceStatus, lastSeenMs,
|
|
|
74
76
|
return 'offline';
|
|
75
77
|
return 'queue-clear';
|
|
76
78
|
}
|
|
79
|
+
export function getTeamHealthScope() {
|
|
80
|
+
const hostName = process.env.REFLECTT_HOST_NAME || hostname();
|
|
81
|
+
const cloudConfigured = isCloudConfigured();
|
|
82
|
+
const cloudBaseUrl = (process.env.REFLECTT_CLOUD_URL || 'https://app.reflectt.ai').replace(/\/+$/, '');
|
|
83
|
+
const orgHealthUrl = cloudConfigured ? `${cloudBaseUrl}/org-health` : null;
|
|
84
|
+
return {
|
|
85
|
+
kind: 'host-local',
|
|
86
|
+
hostName,
|
|
87
|
+
label: `Host-local health (${hostName})`,
|
|
88
|
+
message: orgHealthUrl
|
|
89
|
+
? `This /health/team snapshot is host-local for ${hostName}. Use Reflectt Cloud org-health for cross-host truth.`
|
|
90
|
+
: `This /health/team snapshot is host-local for ${hostName}. Cross-host org-health lives in Reflectt Cloud when configured.`,
|
|
91
|
+
orgHealthUrl,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
77
94
|
class TeamHealthMonitor {
|
|
78
95
|
blockerKeywords = [
|
|
79
96
|
'blocked',
|
|
@@ -165,6 +182,7 @@ class TeamHealthMonitor {
|
|
|
165
182
|
.map(a => a.agent);
|
|
166
183
|
return {
|
|
167
184
|
timestamp: now,
|
|
185
|
+
scope: getTeamHealthScope(),
|
|
168
186
|
agents,
|
|
169
187
|
blockers,
|
|
170
188
|
overlaps,
|