@rudderhq/server 0.2.0-canary.9 → 0.2.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/dist/bootstrap/register-api-routes.d.ts.map +1 -1
- package/dist/bootstrap/register-api-routes.js +2 -0
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +8 -1
- package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +2 -2
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +20 -5
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
- package/dist/home-paths.d.ts +2 -0
- package/dist/home-paths.d.ts.map +1 -1
- package/dist/home-paths.js +6 -1
- package/dist/home-paths.js.map +1 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -2
- package/dist/index.js.map +1 -1
- package/dist/langfuse-transcript.d.ts.map +1 -1
- package/dist/langfuse-transcript.js +16 -2
- package/dist/langfuse-transcript.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +54 -1
- package/dist/middleware/auth.js.map +1 -1
- package/dist/onboarding-assets/ceo/HEARTBEAT.md +8 -4
- package/dist/onboarding-assets/default/HEARTBEAT.md +7 -4
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +79 -4
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +47 -2
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +300 -92
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/costs.d.ts.map +1 -1
- package/dist/routes/costs.js +20 -0
- package/dist/routes/costs.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +236 -22
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/onboarding.d.ts +3 -0
- package/dist/routes/onboarding.d.ts.map +1 -0
- package/dist/routes/onboarding.js +545 -0
- package/dist/routes/onboarding.js.map +1 -0
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +22 -0
- package/dist/routes/orgs.js.map +1 -1
- package/dist/services/activity.d.ts.map +1 -1
- package/dist/services/activity.js +32 -1
- package/dist/services/activity.js.map +1 -1
- package/dist/services/agent-run-context.d.ts +1 -0
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +1 -0
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/agents.d.ts +13 -13
- package/dist/services/automations.d.ts +2 -2
- package/dist/services/calendar.d.ts +4 -4
- package/dist/services/chat-assistant.d.ts +11 -2
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.js +143 -8
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chats.d.ts +112 -13
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +218 -38
- package/dist/services/chats.js.map +1 -1
- package/dist/services/costs.d.ts +21 -0
- package/dist/services/costs.d.ts.map +1 -1
- package/dist/services/costs.js +102 -2
- package/dist/services/costs.js.map +1 -1
- package/dist/services/finance.d.ts +2 -2
- package/dist/services/goals.d.ts +12 -12
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +27 -16
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/issue-approvals.d.ts +16 -2
- package/dist/services/issue-approvals.d.ts.map +1 -1
- package/dist/services/issue-approvals.js +27 -4
- package/dist/services/issue-approvals.js.map +1 -1
- package/dist/services/issue-review-wakeup.d.ts +49 -1
- package/dist/services/issue-review-wakeup.d.ts.map +1 -1
- package/dist/services/issue-review-wakeup.js +39 -2
- package/dist/services/issue-review-wakeup.js.map +1 -1
- package/dist/services/issues.d.ts +2 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +126 -5
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.d.ts +1 -0
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
- package/dist/services/knowledge-portability/organization-skills.js +3 -2
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
- package/dist/services/messenger.d.ts +5 -0
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +154 -15
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/organization-workspace-browser.d.ts.map +1 -1
- package/dist/services/organization-workspace-browser.js +64 -9
- package/dist/services/organization-workspace-browser.js.map +1 -1
- package/dist/services/orgs.d.ts +1 -1
- package/dist/services/plugin-registry.d.ts +4 -4
- package/dist/services/projects.d.ts +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +571 -31
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/secrets.d.ts +5 -5
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +6 -0
- package/dist/services/workspace-backups.js.map +1 -1
- package/dist/services/workspace-runtime.d.ts.map +1 -1
- package/dist/services/workspace-runtime.js +2 -0
- package/dist/services/workspace-runtime.js.map +1 -1
- package/package.json +13 -13
- package/resources/bundled-skills/rudder/SKILL.md +72 -7
- package/resources/bundled-skills/rudder/references/cli-reference.md +34 -9
- package/resources/bundled-skills/rudder/references/organization-skills.md +12 -7
- package/resources/bundled-skills/rudder-create-agent/references/cli-reference.md +1 -0
- package/skills/rudder/SKILL.md +72 -7
- package/skills/rudder/references/cli-reference.md +34 -9
- package/skills/rudder/references/organization-skills.md +12 -7
- package/skills/rudder-create-agent/references/cli-reference.md +1 -0
- package/ui-dist/assets/{_basePickBy-aX2f6dVl.js → _basePickBy-EvWeCTRb.js} +1 -1
- package/ui-dist/assets/{_baseUniq-BYwL7heN.js → _baseUniq-C_DXAETg.js} +1 -1
- package/ui-dist/assets/{arc-BG9f5pwY.js → arc-BWTkVM-u.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-BFFQoJJ1.js → architectureDiagram-2XIMDMQ5-yyX54Dgl.js} +1 -1
- package/ui-dist/assets/{blockDiagram-WCTKOSBZ-Bvx1IB1z.js → blockDiagram-WCTKOSBZ-DleWvS8P.js} +1 -1
- package/ui-dist/assets/{c4Diagram-IC4MRINW-DJbCE4sh.js → c4Diagram-IC4MRINW-CltWqWC_.js} +1 -1
- package/ui-dist/assets/channel-Gdzxe2a1.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-BOVbLFsN.js → chunk-4BX2VUAB-CA6RvGN7.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-D5pKj6S9.js → chunk-55IACEB6-D_EpF39w.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-OY5xuJeR.js → chunk-FMBD7UC4-CYMkBnLy.js} +1 -1
- package/ui-dist/assets/{chunk-JSJVCQXG-C5X67KZg.js → chunk-JSJVCQXG-CIY2Cb1T.js} +1 -1
- package/ui-dist/assets/{chunk-KX2RTZJC-C-4PZ9Q_.js → chunk-KX2RTZJC-BUyGoIKj.js} +1 -1
- package/ui-dist/assets/{chunk-NQ4KR5QH-XysPlqPj.js → chunk-NQ4KR5QH-DkntSLtY.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-B5wEbFHo.js → chunk-QZHKN3VN-DeEs3yL0.js} +1 -1
- package/ui-dist/assets/{chunk-WL4C6EOR-BanwYFa2.js → chunk-WL4C6EOR-Va8TkdTb.js} +1 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-BN6WyuN3.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-BN6WyuN3.js +1 -0
- package/ui-dist/assets/clone-DL9OCUyP.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-Cd4q2swD.js → cose-bilkent-S5V4N54A-Bb6NLaVm.js} +1 -1
- package/ui-dist/assets/{dagre-KLK3FWXG-B_VyOhf3.js → dagre-KLK3FWXG-DpqLnZ3A.js} +1 -1
- package/ui-dist/assets/{diagram-E7M64L7V-BRoG4Mz6.js → diagram-E7M64L7V-D7J8NbEW.js} +1 -1
- package/ui-dist/assets/{diagram-IFDJBPK2-CRU_A9p9.js → diagram-IFDJBPK2-Ds2u81Zi.js} +1 -1
- package/ui-dist/assets/{diagram-P4PSJMXO-BYSQDbfb.js → diagram-P4PSJMXO-BwBplO7L.js} +1 -1
- package/ui-dist/assets/{erDiagram-INFDFZHY-v5j1kyWr.js → erDiagram-INFDFZHY-Ba-Ynr8U.js} +1 -1
- package/ui-dist/assets/{flowDiagram-PKNHOUZH-C06ZQgTj.js → flowDiagram-PKNHOUZH-FnOXpXb_.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-A5KZAMGK-Dw9p5nQ1.js → ganttDiagram-A5KZAMGK-B8-MpUjy.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-CrpXRIaP.js → gitGraphDiagram-K3NZZRJ6-DvyBGQTF.js} +1 -1
- package/ui-dist/assets/{graph-ClTUmULf.js → graph-BdpIVR-I.js} +1 -1
- package/ui-dist/assets/{index-DK13xhRv.js → index-3CPMGfu4.js} +1 -1
- package/ui-dist/assets/index-44A3IjSd.css +1 -0
- package/ui-dist/assets/{index-L6M3nVxh.js → index-B4seykMn.js} +1 -1
- package/ui-dist/assets/{index-Bpc2gRVo.js → index-B5Lq7qho.js} +1 -1
- package/ui-dist/assets/{index-DkDkjZ-D.js → index-BKWZYXO6.js} +1 -1
- package/ui-dist/assets/{index-DxzAgTWd.js → index-BO-P9C91.js} +1 -1
- package/ui-dist/assets/{index-BvGogi9q.js → index-BO9KiNr0.js} +1 -1
- package/ui-dist/assets/{index-Btwy7Cp-.js → index-Bd_GitJ7.js} +1 -1
- package/ui-dist/assets/{index-DNlWBtHa.js → index-BeyQP4jc.js} +1 -1
- package/ui-dist/assets/{index-4uxadHo5.js → index-Bp3rYm9R.js} +1 -1
- package/ui-dist/assets/{index-DWFMs9uk.js → index-CBAKsDOH.js} +1 -1
- package/ui-dist/assets/{index-T81awgzh.js → index-CWPEuLky.js} +1 -1
- package/ui-dist/assets/{index-DAhPD1Ss.js → index-Ce0xbQ5p.js} +1 -1
- package/ui-dist/assets/{index-_x9smX4T.js → index-ChyWxMPa.js} +1 -1
- package/ui-dist/assets/{index-CIr7H9OI.js → index-CkEo4bIl.js} +1 -1
- package/ui-dist/assets/{index-sLGLHxIu.js → index-CvzsgQH3.js} +1 -1
- package/ui-dist/assets/{index-D-6z8wxx.js → index-DF0X3XZi.js} +1 -1
- package/ui-dist/assets/{index-BVfM9ax8.js → index-DNFqhIup.js} +1 -1
- package/ui-dist/assets/index-Dfi8PbGx.js +1484 -0
- package/ui-dist/assets/{index-C_BTFRTX.js → index-Dys_qAzR.js} +1 -1
- package/ui-dist/assets/{index-Cr7n11UG.js → index-DzKALBsQ.js} +1 -1
- package/ui-dist/assets/{index-CqYInp-c.js → index-Qe9bMaYk.js} +1 -1
- package/ui-dist/assets/{index-CQWmziMF.js → index-baeevrWz.js} +1 -1
- package/ui-dist/assets/{index-BYC_xlrx.js → index-bs5pLhnN.js} +1 -1
- package/ui-dist/assets/{infoDiagram-LFFYTUFH-BA3VxOIU.js → infoDiagram-LFFYTUFH-51Iz4iFI.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-DGrizi0S.js → ishikawaDiagram-PHBUUO56-XMkPw0tW.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-4ABVD52K-6ey34a7e.js → journeyDiagram-4ABVD52K-DAX0bTCG.js} +1 -1
- package/ui-dist/assets/{kanban-definition-K7BYSVSG-CwNnmsam.js → kanban-definition-K7BYSVSG-DndcgBkd.js} +1 -1
- package/ui-dist/assets/{layout-buNxvllr.js → layout-DE8DhR5g.js} +1 -1
- package/ui-dist/assets/{linear-BPWhxaRl.js → linear-B6lAW9Wb.js} +1 -1
- package/ui-dist/assets/{mermaid.core-Cajx0s-z.js → mermaid.core-BG--kYhA.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-YRQLILUH-Bf5InEp-.js → mindmap-definition-YRQLILUH-DkjV0oE3.js} +1 -1
- package/ui-dist/assets/{pieDiagram-SKSYHLDU-CZFz7NWC.js → pieDiagram-SKSYHLDU-D03TjqYu.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-337W2JSQ-XBmKVoc9.js → quadrantDiagram-337W2JSQ-C0oqv-xU.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-BkgdDv0H.js → requirementDiagram-Z7DCOOCP-okIS8feM.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-CASFR28i.js → sankeyDiagram-WA2Y5GQK-WOnxUdkO.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-BzY7LMRv.js → sequenceDiagram-2WXFIKYE-RVCXfMRR.js} +1 -1
- package/ui-dist/assets/{stateDiagram-RAJIS63D-C9UMSk36.js → stateDiagram-RAJIS63D-CZFHvVtT.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DgYYudAJ.js +1 -0
- package/ui-dist/assets/{timeline-definition-YZTLITO2-D6m4R4xe.js → timeline-definition-YZTLITO2-S0uy5mlJ.js} +1 -1
- package/ui-dist/assets/{treemap-KZPCXAKY-7V9mnT8T.js → treemap-KZPCXAKY-Bhyg_yHs.js} +1 -1
- package/ui-dist/assets/{vennDiagram-LZ73GAT5-Ci-sfAyq.js → vennDiagram-LZ73GAT5-EnVupOQz.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-JWTSCODW-BayXhRSu.js → xychartDiagram-JWTSCODW-BYpdJxGK.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-ClX7n84B.js +0 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-DvWbsnVz.js +0 -1
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-DvWbsnVz.js +0 -1
- package/ui-dist/assets/clone-Dla3A8ZA.js +0 -1
- package/ui-dist/assets/index-CSANx6ee.css +0 -1
- package/ui-dist/assets/index-DCa9-Sy-.js +0 -1439
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DWVhbAdj.js +0 -1
package/dist/middleware/auth.js
CHANGED
|
@@ -9,12 +9,13 @@ function hashToken(token) {
|
|
|
9
9
|
}
|
|
10
10
|
export function actorMiddleware(db, opts) {
|
|
11
11
|
const boardAuth = boardAuthService(db);
|
|
12
|
-
return async (req,
|
|
12
|
+
return async (req, res, next) => {
|
|
13
13
|
req.actor =
|
|
14
14
|
opts.deploymentMode === "local_trusted"
|
|
15
15
|
? { type: "board", userId: "local-board", isInstanceAdmin: true, source: "local_implicit" }
|
|
16
16
|
: { type: "none", source: "none" };
|
|
17
17
|
const runIdHeader = req.header("x-rudder-run-id");
|
|
18
|
+
const agentContextHeader = req.header("x-rudder-agent-id")?.trim() || undefined;
|
|
18
19
|
const authHeader = req.header("authorization");
|
|
19
20
|
if (!authHeader?.toLowerCase().startsWith("bearer ")) {
|
|
20
21
|
if (opts.deploymentMode === "authenticated" && opts.resolveSession) {
|
|
@@ -46,17 +47,23 @@ export function actorMiddleware(db, opts) {
|
|
|
46
47
|
runId: runIdHeader ?? undefined,
|
|
47
48
|
source: "session",
|
|
48
49
|
};
|
|
50
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
51
|
+
return;
|
|
49
52
|
next();
|
|
50
53
|
return;
|
|
51
54
|
}
|
|
52
55
|
}
|
|
53
56
|
if (runIdHeader)
|
|
54
57
|
req.actor.runId = runIdHeader;
|
|
58
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
59
|
+
return;
|
|
55
60
|
next();
|
|
56
61
|
return;
|
|
57
62
|
}
|
|
58
63
|
const token = authHeader.slice("bearer ".length).trim();
|
|
59
64
|
if (!token) {
|
|
65
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
66
|
+
return;
|
|
60
67
|
next();
|
|
61
68
|
return;
|
|
62
69
|
}
|
|
@@ -74,6 +81,8 @@ export function actorMiddleware(db, opts) {
|
|
|
74
81
|
runId: runIdHeader || undefined,
|
|
75
82
|
source: "board_key",
|
|
76
83
|
};
|
|
84
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
85
|
+
return;
|
|
77
86
|
next();
|
|
78
87
|
return;
|
|
79
88
|
}
|
|
@@ -87,6 +96,8 @@ export function actorMiddleware(db, opts) {
|
|
|
87
96
|
if (!key) {
|
|
88
97
|
const claims = verifyLocalAgentJwt(token);
|
|
89
98
|
if (!claims) {
|
|
99
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
100
|
+
return;
|
|
90
101
|
next();
|
|
91
102
|
return;
|
|
92
103
|
}
|
|
@@ -96,10 +107,14 @@ export function actorMiddleware(db, opts) {
|
|
|
96
107
|
.where(eq(agents.id, claims.sub))
|
|
97
108
|
.then((rows) => rows[0] ?? null);
|
|
98
109
|
if (!agentRecord || agentRecord.orgId !== claims.org_id) {
|
|
110
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
111
|
+
return;
|
|
99
112
|
next();
|
|
100
113
|
return;
|
|
101
114
|
}
|
|
102
115
|
if (agentRecord.status === "terminated" || agentRecord.status === "pending_approval") {
|
|
116
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
117
|
+
return;
|
|
103
118
|
next();
|
|
104
119
|
return;
|
|
105
120
|
}
|
|
@@ -111,6 +126,8 @@ export function actorMiddleware(db, opts) {
|
|
|
111
126
|
runId: runIdHeader || claims.run_id || undefined,
|
|
112
127
|
source: "agent_jwt",
|
|
113
128
|
};
|
|
129
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
130
|
+
return;
|
|
114
131
|
next();
|
|
115
132
|
return;
|
|
116
133
|
}
|
|
@@ -124,6 +141,8 @@ export function actorMiddleware(db, opts) {
|
|
|
124
141
|
.where(eq(agents.id, key.agentId))
|
|
125
142
|
.then((rows) => rows[0] ?? null);
|
|
126
143
|
if (!agentRecord || agentRecord.status === "terminated" || agentRecord.status === "pending_approval") {
|
|
144
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
145
|
+
return;
|
|
127
146
|
next();
|
|
128
147
|
return;
|
|
129
148
|
}
|
|
@@ -135,9 +154,43 @@ export function actorMiddleware(db, opts) {
|
|
|
135
154
|
runId: runIdHeader || undefined,
|
|
136
155
|
source: "agent_key",
|
|
137
156
|
};
|
|
157
|
+
if (rejectAgentContextMismatch(req, res, agentContextHeader))
|
|
158
|
+
return;
|
|
138
159
|
next();
|
|
139
160
|
};
|
|
140
161
|
}
|
|
162
|
+
function rejectAgentContextMismatch(req, res, expectedAgentId) {
|
|
163
|
+
if (!expectedAgentId || !isMutatingRequest(req))
|
|
164
|
+
return false;
|
|
165
|
+
if (req.actor.type !== "agent") {
|
|
166
|
+
res.status(401).json({
|
|
167
|
+
error: "Agent authentication required for agent-scoped CLI request",
|
|
168
|
+
code: "agent_auth_required",
|
|
169
|
+
details: {
|
|
170
|
+
expectedAgentId,
|
|
171
|
+
actorType: req.actor.type,
|
|
172
|
+
actorSource: req.actor.source,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
if (req.actor.agentId !== expectedAgentId) {
|
|
178
|
+
res.status(403).json({
|
|
179
|
+
error: "Agent authentication does not match the CLI agent context",
|
|
180
|
+
code: "agent_context_mismatch",
|
|
181
|
+
details: {
|
|
182
|
+
expectedAgentId,
|
|
183
|
+
authenticatedAgentId: req.actor.agentId ?? null,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
function isMutatingRequest(req) {
|
|
191
|
+
const method = req.method.toUpperCase();
|
|
192
|
+
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS";
|
|
193
|
+
}
|
|
141
194
|
export function requireBoard(req) {
|
|
142
195
|
return req.actor.type === "board";
|
|
143
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAOD,MAAM,UAAU,eAAe,CAAC,EAAM,EAAE,IAA4B;IAClE,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,KAAK,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,20 +23,23 @@ If `RUDDER_APPROVAL_ID` is set:
|
|
|
23
23
|
- Review the approval and its linked issues with `rudder approval get "$RUDDER_APPROVAL_ID" --json` and `rudder approval issues "$RUDDER_APPROVAL_ID" --json`.
|
|
24
24
|
- Close resolved issues or comment on what remains open.
|
|
25
25
|
|
|
26
|
-
## 4. Get
|
|
26
|
+
## 4. Get Inbox Work
|
|
27
27
|
|
|
28
28
|
- `rudder agent inbox --json`
|
|
29
|
-
-
|
|
29
|
+
- Inbox rows can be `relationship: "assignee"` or `relationship: "reviewer"`.
|
|
30
|
+
- Prioritize reviewer `in_review` or `blocked` rows first, then assignee `in_progress`, then assignee `todo`. Skip assignee-only `blocked` work unless you can unblock it.
|
|
30
31
|
- If there is already an active run on an `in_progress` task, just move on to the next thing.
|
|
31
|
-
- If `RUDDER_TASK_ID` is set and assigned to you, prioritize that task.
|
|
32
|
+
- If `RUDDER_TASK_ID` is set and assigned to you or names you as reviewer, prioritize that task.
|
|
32
33
|
|
|
33
34
|
## 5. Checkout and Work
|
|
34
35
|
|
|
35
36
|
- Always checkout before working: `rudder issue checkout "<issue-id-or-identifier>" --json`.
|
|
36
37
|
- Never retry a 409 -- that task belongs to someone else.
|
|
37
38
|
- Use `rudder issue context "<issue-id-or-identifier>" --json` to load compact context.
|
|
38
|
-
- Do the work. Use `rudder issue comment`, `rudder issue done`, or `rudder issue block` to communicate outcome.
|
|
39
|
+
- Do the work. Use `rudder issue comment`, `rudder issue done`, or `rudder issue block` to communicate outcome. If a reviewed issue is blocked, write the blocker clearly enough for reviewer triage.
|
|
39
40
|
- If `RUDDER_WAKE_REASON=issue_passive_followup`, treat the wake as close-out governance, not a fresh assignment: inspect state and leave a progress comment, completion, blocker, or explicit handoff.
|
|
41
|
+
- If you are the reviewer, including for a `blocked` issue, record one structured decision with `rudder issue review --decision approve|request_changes|needs_followup|blocked --comment ...`. Use `blocked` only to confirm a human/external blocker, and name the next human action in the comment.
|
|
42
|
+
- If `RUDDER_WAKE_REASON=issue_review_closeout_missing`, treat the wake as reviewer close-out governance and record one structured review decision.
|
|
40
43
|
|
|
41
44
|
## 6. Delegation
|
|
42
45
|
|
|
@@ -55,6 +58,7 @@ If `RUDDER_APPROVAL_ID` is set:
|
|
|
55
58
|
## 8. Exit
|
|
56
59
|
|
|
57
60
|
- Comment on any in_progress work before exiting.
|
|
61
|
+
- Reviewer work is not closed by a free-form accept/reject comment; use `rudder issue review`.
|
|
58
62
|
- A successful `todo` or `in_progress` issue run without a close-out signal can trigger a same-agent passive follow-up.
|
|
59
63
|
- If no assignments and no valid mention-handoff, exit cleanly.
|
|
60
64
|
|
|
@@ -18,19 +18,22 @@ Run this checklist on every heartbeat.
|
|
|
18
18
|
|
|
19
19
|
If approval context is set, review linked issues and close/comment.
|
|
20
20
|
|
|
21
|
-
## 4. Get
|
|
21
|
+
## 4. Get Inbox Work
|
|
22
22
|
|
|
23
|
-
- Check for
|
|
24
|
-
- Prioritize
|
|
23
|
+
- Check `rudder agent inbox --json` for both assignee and reviewer rows.
|
|
24
|
+
- Prioritize reviewer `in_review` or `blocked` rows first, then assignee `in_progress`, then assignee `todo`.
|
|
25
25
|
|
|
26
26
|
## 5. Checkout and Work
|
|
27
27
|
|
|
28
28
|
- Always checkout before working.
|
|
29
29
|
- Do the work. Update status and comment when done.
|
|
30
|
-
- If `RUDDER_WAKE_REASON=issue_passive_followup`, inspect current issue state first, then leave a close-out signal: progress comment, done, blocked with reason, or explicit handoff.
|
|
30
|
+
- If `RUDDER_WAKE_REASON=issue_passive_followup`, inspect current issue state first, then leave a close-out signal: progress comment, done, blocked with reason, or explicit handoff. If a reviewed issue is blocked, write the blocker clearly enough for reviewer triage.
|
|
31
|
+
- If you are the reviewer, including for a `blocked` issue, record a structured review decision with `rudder issue review --decision approve|request_changes|needs_followup|blocked --comment ...`. Use `blocked` only to confirm a human/external blocker, and name the next human action in the comment.
|
|
32
|
+
- If `RUDDER_WAKE_REASON=issue_review_closeout_missing`, inspect current state and record exactly one structured review decision.
|
|
31
33
|
|
|
32
34
|
## 6. Exit
|
|
33
35
|
|
|
34
36
|
- Comment on in_progress work before exiting.
|
|
37
|
+
- Reviewer work is not closed by a free-form accept/reject comment; use `rudder issue review`.
|
|
35
38
|
- A successful `todo` or `in_progress` issue run without a close-out signal can trigger a same-agent passive follow-up.
|
|
36
39
|
- Exit cleanly if no assignments.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAyCvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAmF1D,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,8CA8iF3D"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -5,7 +5,7 @@ import { generateKeyPairSync, randomUUID } from "node:crypto";
|
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { agents as agentsTable, organizations, heartbeatRuns } from "@rudderhq/db";
|
|
7
7
|
import { and, desc, eq, inArray, not, sql } from "drizzle-orm";
|
|
8
|
-
import { agentSkillSyncSchema, createAgentKeySchema, createAgentHireSchema, createAgentSchema, deriveAgentUrlKey, isUuidLike, organizationSkillCreateSchema, resetAgentSessionSchema, testAgentRuntimeEnvironmentSchema, upsertAgentInstructionsFileSchema, updateAgentInstructionsBundleSchema, updateAgentPermissionsSchema, updateAgentInstructionsPathSchema, wakeAgentSchema, updateAgentSchema, } from "@rudderhq/shared";
|
|
8
|
+
import { agentSkillSyncSchema, agentSkillEnableSchema, createAgentKeySchema, createAgentHireSchema, createAgentSchema, deriveAgentUrlKey, isUuidLike, organizationSkillCreateSchema, resetAgentSessionSchema, testAgentRuntimeEnvironmentSchema, upsertAgentInstructionsFileSchema, updateAgentInstructionsBundleSchema, updateAgentPermissionsSchema, updateAgentInstructionsPathSchema, wakeAgentSchema, updateAgentSchema, } from "@rudderhq/shared";
|
|
9
9
|
import { validate } from "../middleware/validate.js";
|
|
10
10
|
import { agentService, agentInstructionsService, accessService, approvalService, organizationSkillService, budgetService, heartbeatService, issueApprovalService, issueService, logActivity, secretService, syncInstructionsBundleConfigFromFilePath, workspaceOperationService, } from "../services/index.js";
|
|
11
11
|
import { assetService } from "../services/assets.js";
|
|
@@ -761,6 +761,44 @@ export function agentRoutes(db, storage) {
|
|
|
761
761
|
});
|
|
762
762
|
res.json(snapshot);
|
|
763
763
|
});
|
|
764
|
+
router.post("/agents/:id/skills/enable", validate(agentSkillEnableSchema), async (req, res) => {
|
|
765
|
+
const id = req.params.id;
|
|
766
|
+
const agent = await svc.getById(id);
|
|
767
|
+
if (!agent) {
|
|
768
|
+
res.status(404).json({ error: "Agent not found" });
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
await assertCanUpdateAgent(req, agent);
|
|
772
|
+
const requestedSkills = Array.from(new Set(req.body.skills
|
|
773
|
+
.map((value) => value.trim())
|
|
774
|
+
.filter(Boolean)));
|
|
775
|
+
const { config: runtimeConfig } = await secretsSvc.resolveAdapterConfigForRuntime(agent.orgId, agent.agentRuntimeConfig);
|
|
776
|
+
const currentDesiredSkills = await organizationSkills.getEnabledSkillKeysForAgent(agent.orgId, agent);
|
|
777
|
+
const { desiredSkills } = await resolveDesiredSkillAssignmentForAgent(agent, runtimeConfig, [...currentDesiredSkills, ...requestedSkills]);
|
|
778
|
+
const actor = getActorInfo(req);
|
|
779
|
+
await organizationSkills.addEnabledSkillKeysForAgent(agent.orgId, agent.id, desiredSkills);
|
|
780
|
+
const snapshot = await buildAgentSkillSnapshot(agent, runtimeConfig);
|
|
781
|
+
await logActivity(db, {
|
|
782
|
+
orgId: agent.orgId,
|
|
783
|
+
actorType: actor.actorType,
|
|
784
|
+
actorId: actor.actorId,
|
|
785
|
+
action: "agent.skills_enabled",
|
|
786
|
+
entityType: "agent",
|
|
787
|
+
entityId: agent.id,
|
|
788
|
+
agentId: actor.agentId,
|
|
789
|
+
runId: actor.runId,
|
|
790
|
+
details: {
|
|
791
|
+
agentRuntimeType: agent.agentRuntimeType,
|
|
792
|
+
requestedSkills,
|
|
793
|
+
desiredSkills: snapshot.desiredSkills,
|
|
794
|
+
mode: snapshot.mode,
|
|
795
|
+
supported: snapshot.supported,
|
|
796
|
+
entryCount: snapshot.entries.length,
|
|
797
|
+
warningCount: snapshot.warnings.length,
|
|
798
|
+
},
|
|
799
|
+
});
|
|
800
|
+
res.json(snapshot);
|
|
801
|
+
});
|
|
764
802
|
router.get("/orgs/:orgId/agents", async (req, res) => {
|
|
765
803
|
const orgId = req.params.orgId;
|
|
766
804
|
assertCompanyAccess(req, orgId);
|
|
@@ -889,14 +927,35 @@ export function agentRoutes(db, storage) {
|
|
|
889
927
|
return;
|
|
890
928
|
}
|
|
891
929
|
const issuesSvc = issueService(db);
|
|
892
|
-
const
|
|
930
|
+
const assigneeRows = await issuesSvc.list(req.actor.orgId, {
|
|
893
931
|
assigneeAgentId: req.actor.agentId,
|
|
894
932
|
status: "todo,in_progress,blocked",
|
|
895
933
|
});
|
|
896
|
-
|
|
934
|
+
const reviewerRows = await issuesSvc.list(req.actor.orgId, {
|
|
935
|
+
reviewerAgentId: req.actor.agentId,
|
|
936
|
+
status: "in_review,blocked",
|
|
937
|
+
excludeReviewerConfirmedBlockedHandoff: true,
|
|
938
|
+
});
|
|
939
|
+
const rowsByIssueId = new Map();
|
|
940
|
+
for (const issue of assigneeRows) {
|
|
941
|
+
rowsByIssueId.set(issue.id, { issue, relationship: "assignee" });
|
|
942
|
+
}
|
|
943
|
+
for (const issue of reviewerRows) {
|
|
944
|
+
rowsByIssueId.set(issue.id, { issue, relationship: "reviewer" });
|
|
945
|
+
}
|
|
946
|
+
const rows = Array.from(rowsByIssueId.values()).sort((a, b) => {
|
|
947
|
+
const priorityRank = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
948
|
+
const aPriority = priorityRank[a.issue.priority] ?? 9;
|
|
949
|
+
const bPriority = priorityRank[b.issue.priority] ?? 9;
|
|
950
|
+
if (aPriority !== bPriority)
|
|
951
|
+
return aPriority - bPriority;
|
|
952
|
+
return new Date(a.issue.updatedAt).getTime() - new Date(b.issue.updatedAt).getTime();
|
|
953
|
+
});
|
|
954
|
+
res.json(rows.map(({ issue, relationship }) => ({
|
|
897
955
|
id: issue.id,
|
|
898
956
|
identifier: issue.identifier,
|
|
899
957
|
title: issue.title,
|
|
958
|
+
relationship,
|
|
900
959
|
status: issue.status,
|
|
901
960
|
priority: issue.priority,
|
|
902
961
|
projectId: issue.projectId,
|
|
@@ -1118,10 +1177,26 @@ export function agentRoutes(db, storage) {
|
|
|
1118
1177
|
updatedAt: new Date(),
|
|
1119
1178
|
});
|
|
1120
1179
|
if (sourceIssueIds.length > 0) {
|
|
1121
|
-
await issueApprovalsSvc.linkManyForApproval(approval.id, sourceIssueIds, {
|
|
1180
|
+
const links = await issueApprovalsSvc.linkManyForApproval(approval.id, sourceIssueIds, {
|
|
1122
1181
|
agentId: actor.actorType === "agent" ? actor.actorId : null,
|
|
1123
1182
|
userId: actor.actorType === "user" ? actor.actorId : null,
|
|
1124
1183
|
});
|
|
1184
|
+
for (const link of links) {
|
|
1185
|
+
await logActivity(db, {
|
|
1186
|
+
orgId,
|
|
1187
|
+
actorType: actor.actorType,
|
|
1188
|
+
actorId: actor.actorId,
|
|
1189
|
+
agentId: actor.agentId,
|
|
1190
|
+
runId: actor.runId,
|
|
1191
|
+
action: "issue.approval_linked",
|
|
1192
|
+
entityType: "issue",
|
|
1193
|
+
entityId: link.issueId,
|
|
1194
|
+
details: {
|
|
1195
|
+
approvalId: approval.id,
|
|
1196
|
+
linkCreatedAt: link.createdAt.toISOString(),
|
|
1197
|
+
},
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1125
1200
|
}
|
|
1126
1201
|
}
|
|
1127
1202
|
await logActivity(db, {
|