@rudderhq/shared 0.3.6-canary.9 → 0.4.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 (81) hide show
  1. package/dist/agent-run.d.ts +6 -0
  2. package/dist/agent-run.d.ts.map +1 -0
  3. package/dist/agent-run.js +96 -0
  4. package/dist/agent-run.js.map +1 -0
  5. package/dist/agent-run.test.d.ts +2 -0
  6. package/dist/agent-run.test.d.ts.map +1 -0
  7. package/dist/agent-run.test.js +196 -0
  8. package/dist/agent-run.test.js.map +1 -0
  9. package/dist/api.d.ts +1 -0
  10. package/dist/api.d.ts.map +1 -1
  11. package/dist/api.js +1 -0
  12. package/dist/api.js.map +1 -1
  13. package/dist/config-schema.d.ts +47 -37
  14. package/dist/config-schema.d.ts.map +1 -1
  15. package/dist/config-schema.js +1 -0
  16. package/dist/config-schema.js.map +1 -1
  17. package/dist/constants.d.ts +17 -9
  18. package/dist/constants.d.ts.map +1 -1
  19. package/dist/constants.js +30 -10
  20. package/dist/constants.js.map +1 -1
  21. package/dist/index.d.ts +4 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/project-mentions.d.ts.map +1 -1
  26. package/dist/project-mentions.js +11 -5
  27. package/dist/project-mentions.js.map +1 -1
  28. package/dist/project-mentions.test.js +12 -12
  29. package/dist/project-mentions.test.js.map +1 -1
  30. package/dist/types/agent-integration.d.ts +13 -0
  31. package/dist/types/agent-integration.d.ts.map +1 -1
  32. package/dist/types/chat.d.ts +59 -1
  33. package/dist/types/chat.d.ts.map +1 -1
  34. package/dist/types/heartbeat.d.ts +24 -1
  35. package/dist/types/heartbeat.d.ts.map +1 -1
  36. package/dist/types/index.d.ts +3 -3
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/instance.d.ts +1 -0
  39. package/dist/types/instance.d.ts.map +1 -1
  40. package/dist/types/messenger.d.ts +1 -0
  41. package/dist/types/messenger.d.ts.map +1 -1
  42. package/dist/types/plugin.d.ts +8 -8
  43. package/dist/types/workspace-backup.d.ts +6 -0
  44. package/dist/types/workspace-backup.d.ts.map +1 -1
  45. package/dist/validators/adapter-skills.d.ts +2 -2
  46. package/dist/validators/agent-integration.d.ts +2 -2
  47. package/dist/validators/agent.d.ts +12 -4
  48. package/dist/validators/agent.d.ts.map +1 -1
  49. package/dist/validators/agent.js +8 -0
  50. package/dist/validators/agent.js.map +1 -1
  51. package/dist/validators/automation.d.ts +17 -9
  52. package/dist/validators/automation.d.ts.map +1 -1
  53. package/dist/validators/automation.js +8 -0
  54. package/dist/validators/automation.js.map +1 -1
  55. package/dist/validators/calendar.d.ts +20 -20
  56. package/dist/validators/chat.d.ts +226 -46
  57. package/dist/validators/chat.d.ts.map +1 -1
  58. package/dist/validators/chat.js +32 -0
  59. package/dist/validators/chat.js.map +1 -1
  60. package/dist/validators/cost.d.ts +8 -8
  61. package/dist/validators/finance.d.ts +12 -12
  62. package/dist/validators/index.d.ts +1 -1
  63. package/dist/validators/index.d.ts.map +1 -1
  64. package/dist/validators/index.js +1 -1
  65. package/dist/validators/index.js.map +1 -1
  66. package/dist/validators/instance.d.ts +5 -2
  67. package/dist/validators/instance.d.ts.map +1 -1
  68. package/dist/validators/instance.js +1 -0
  69. package/dist/validators/instance.js.map +1 -1
  70. package/dist/validators/issue.d.ts +8 -0
  71. package/dist/validators/issue.d.ts.map +1 -1
  72. package/dist/validators/issue.js +8 -0
  73. package/dist/validators/issue.js.map +1 -1
  74. package/dist/validators/organization-portability.d.ts +76 -76
  75. package/dist/validators/organization-skill.d.ts +74 -74
  76. package/dist/validators/plugin.d.ts +67 -67
  77. package/dist/validators/plugin.js +12 -12
  78. package/dist/validators/plugin.js.map +1 -1
  79. package/dist/validators/secret.d.ts +14 -14
  80. package/dist/validators/work-product.d.ts +4 -4
  81. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import type { AgentRunScene } from "./constants.js";
2
+ import type { AgentRun, HeartbeatRun } from "./types/heartbeat.js";
3
+ export declare function toAgentRun(run: HeartbeatRun): AgentRun;
4
+ export declare function toAgentRuns(runs: HeartbeatRun[]): AgentRun[];
5
+ export declare function resolveAgentRunScene(run: HeartbeatRun): AgentRunScene;
6
+ //# sourceMappingURL=agent-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../src/agent-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA+DnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,QAAQ,CAoBtD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAErE"}
@@ -0,0 +1,96 @@
1
+ function asRecord(value) {
2
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
3
+ }
4
+ function stringValue(value) {
5
+ return typeof value === "string" && value.trim().length > 0 ? value : null;
6
+ }
7
+ function isAgentRunScene(value) {
8
+ return value === "issue"
9
+ || value === "chat"
10
+ || value === "automation"
11
+ || value === "review"
12
+ || value === "heartbeat";
13
+ }
14
+ function isAgentRunTargetType(value) {
15
+ return value === "issue"
16
+ || value === "chat_conversation"
17
+ || value === "chat_message"
18
+ || value === "automation_run"
19
+ || value === "wakeup_request"
20
+ || value === "manual";
21
+ }
22
+ function resolveScene(run, context) {
23
+ if (isAgentRunScene(context.scene))
24
+ return context.scene;
25
+ if (isAgentRunScene(context.rudderScene))
26
+ return context.rudderScene;
27
+ if (run.invocationSource === "chat" || run.chatConversationId || stringValue(context.conversationId))
28
+ return "chat";
29
+ if (run.invocationSource === "review")
30
+ return "review";
31
+ if (run.invocationSource === "timer")
32
+ return "heartbeat";
33
+ if (stringValue(context.automationRunId))
34
+ return "automation";
35
+ if (stringValue(context.issueId))
36
+ return "issue";
37
+ if (run.invocationSource === "automation")
38
+ return "automation";
39
+ return "heartbeat";
40
+ }
41
+ function resolveTargetType(run, context) {
42
+ if (isAgentRunTargetType(context.targetType))
43
+ return context.targetType;
44
+ if (run.chatConversationId || stringValue(context.conversationId))
45
+ return "chat_conversation";
46
+ if (stringValue(context.automationRunId))
47
+ return "automation_run";
48
+ if (stringValue(context.issueId))
49
+ return "issue";
50
+ if (run.wakeupRequestId || stringValue(context.wakeupRequestId))
51
+ return "wakeup_request";
52
+ return "wakeup_request";
53
+ }
54
+ function resolveTargetId(run, context, targetType) {
55
+ const explicit = stringValue(context.targetId);
56
+ if (explicit)
57
+ return explicit;
58
+ if (targetType === "chat_conversation")
59
+ return run.chatConversationId ?? stringValue(context.conversationId);
60
+ if (targetType === "chat_message")
61
+ return stringValue(context.messageId) ?? stringValue(context.assistantMessageId) ?? stringValue(context.userMessageId);
62
+ if (targetType === "automation_run")
63
+ return stringValue(context.automationRunId);
64
+ if (targetType === "issue")
65
+ return stringValue(context.issueId);
66
+ if (targetType === "wakeup_request")
67
+ return run.wakeupRequestId ?? stringValue(context.wakeupRequestId);
68
+ return null;
69
+ }
70
+ export function toAgentRun(run) {
71
+ const context = asRecord(run.contextSnapshot);
72
+ const targetType = resolveTargetType(run, context);
73
+ const conversationId = run.chatConversationId ?? stringValue(context.conversationId);
74
+ const messageId = stringValue(context.messageId)
75
+ ?? stringValue(context.assistantMessageId)
76
+ ?? stringValue(context.userMessageId);
77
+ return {
78
+ ...run,
79
+ scene: resolveScene(run, context),
80
+ triggerKind: stringValue(context.triggerKind) ?? run.triggerDetail ?? run.invocationSource,
81
+ targetType,
82
+ targetId: resolveTargetId(run, context, targetType),
83
+ conversationId,
84
+ messageId,
85
+ automationRunId: stringValue(context.automationRunId),
86
+ automationId: stringValue(context.automationId),
87
+ wakeupRequestId: run.wakeupRequestId ?? stringValue(context.wakeupRequestId),
88
+ };
89
+ }
90
+ export function toAgentRuns(runs) {
91
+ return runs.map(toAgentRun);
92
+ }
93
+ export function resolveAgentRunScene(run) {
94
+ return toAgentRun(run).scene;
95
+ }
96
+ //# sourceMappingURL=agent-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../src/agent-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-run.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.test.d.ts","sourceRoot":"","sources":["../src/agent-run.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { toAgentRun } from "./index.js";
3
+ function heartbeatRun(overrides) {
4
+ return {
5
+ id: "run-1",
6
+ orgId: "org-1",
7
+ agentId: "agent-1",
8
+ invocationSource: "on_demand",
9
+ triggerDetail: null,
10
+ status: "running",
11
+ startedAt: null,
12
+ finishedAt: null,
13
+ error: null,
14
+ wakeupRequestId: null,
15
+ exitCode: null,
16
+ signal: null,
17
+ usageJson: null,
18
+ resultJson: null,
19
+ sessionIdBefore: null,
20
+ sessionIdAfter: null,
21
+ logStore: null,
22
+ logRef: null,
23
+ logBytes: null,
24
+ logSha256: null,
25
+ logCompressed: false,
26
+ stdoutExcerpt: null,
27
+ stderrExcerpt: null,
28
+ errorCode: null,
29
+ externalRunId: null,
30
+ chatConversationId: null,
31
+ processPid: null,
32
+ processStartedAt: null,
33
+ retryOfRunId: null,
34
+ processLossRetryCount: 0,
35
+ contextSnapshot: null,
36
+ createdAt: new Date("2026-06-20T00:00:00.000Z"),
37
+ updatedAt: new Date("2026-06-20T00:00:00.000Z"),
38
+ ...overrides,
39
+ };
40
+ }
41
+ describe("toAgentRun", () => {
42
+ it("normalizes chat run scene and target from legacy heartbeat fields", () => {
43
+ const run = toAgentRun(heartbeatRun({
44
+ id: "chat-run",
45
+ invocationSource: "chat",
46
+ triggerDetail: "chat_assistant_reply_stream",
47
+ chatConversationId: "conversation-1",
48
+ contextSnapshot: {
49
+ assistantMessageId: "assistant-message-1",
50
+ },
51
+ }));
52
+ expect(run.scene).toBe("chat");
53
+ expect(run.triggerKind).toBe("chat_assistant_reply_stream");
54
+ expect(run.targetType).toBe("chat_conversation");
55
+ expect(run.targetId).toBe("conversation-1");
56
+ expect(run.conversationId).toBe("conversation-1");
57
+ expect(run.messageId).toBe("assistant-message-1");
58
+ });
59
+ it("honors explicit automation target metadata while preserving linked chat facts", () => {
60
+ const run = toAgentRun(heartbeatRun({
61
+ id: "automation-chat-run",
62
+ invocationSource: "chat",
63
+ triggerDetail: "chat_assistant_reply_stream",
64
+ chatConversationId: "conversation-1",
65
+ contextSnapshot: {
66
+ scene: "chat",
67
+ targetType: "automation_run",
68
+ targetId: "automation-run-1",
69
+ automationRunId: "automation-run-1",
70
+ automationId: "automation-1",
71
+ conversationId: "conversation-1",
72
+ userMessageId: "user-message-1",
73
+ assistantMessageId: "assistant-message-1",
74
+ },
75
+ }));
76
+ expect(run.scene).toBe("chat");
77
+ expect(run.targetType).toBe("automation_run");
78
+ expect(run.targetId).toBe("automation-run-1");
79
+ expect(run.automationRunId).toBe("automation-run-1");
80
+ expect(run.automationId).toBe("automation-1");
81
+ expect(run.conversationId).toBe("conversation-1");
82
+ expect(run.messageId).toBe("assistant-message-1");
83
+ });
84
+ it("falls back to issue target metadata for issue-backed runs", () => {
85
+ const run = toAgentRun(heartbeatRun({
86
+ invocationSource: "assignment",
87
+ triggerDetail: "manual",
88
+ contextSnapshot: {
89
+ issueId: "issue-1",
90
+ },
91
+ }));
92
+ expect(run.scene).toBe("issue");
93
+ expect(run.triggerKind).toBe("manual");
94
+ expect(run.targetType).toBe("issue");
95
+ expect(run.targetId).toBe("issue-1");
96
+ });
97
+ it("treats issue-comment automation wakes as issue scene runs", () => {
98
+ const run = toAgentRun(heartbeatRun({
99
+ invocationSource: "automation",
100
+ triggerDetail: "system",
101
+ contextSnapshot: {
102
+ issueId: "issue-1",
103
+ commentId: "comment-1",
104
+ wakeReason: "issue_commented",
105
+ wakeSource: "issue.comment",
106
+ },
107
+ }));
108
+ expect(run.scene).toBe("issue");
109
+ expect(run.triggerKind).toBe("system");
110
+ expect(run.targetType).toBe("issue");
111
+ expect(run.targetId).toBe("issue-1");
112
+ });
113
+ it("keeps automation run identity as automation scene even when linked to an issue", () => {
114
+ const run = toAgentRun(heartbeatRun({
115
+ invocationSource: "automation",
116
+ triggerDetail: "system",
117
+ contextSnapshot: {
118
+ automationRunId: "automation-run-1",
119
+ automationId: "automation-1",
120
+ issueId: "issue-1",
121
+ },
122
+ }));
123
+ expect(run.scene).toBe("automation");
124
+ expect(run.targetType).toBe("automation_run");
125
+ expect(run.targetId).toBe("automation-run-1");
126
+ expect(run.automationRunId).toBe("automation-run-1");
127
+ });
128
+ it("lets an explicit issue scene override automation run linkage", () => {
129
+ const run = toAgentRun(heartbeatRun({
130
+ invocationSource: "automation",
131
+ triggerDetail: "system",
132
+ contextSnapshot: {
133
+ scene: "issue",
134
+ automationRunId: "automation-run-1",
135
+ issueId: "issue-1",
136
+ },
137
+ }));
138
+ expect(run.scene).toBe("issue");
139
+ expect(run.targetType).toBe("automation_run");
140
+ expect(run.targetId).toBe("automation-run-1");
141
+ });
142
+ it("honors persisted runtime rudderScene metadata", () => {
143
+ const run = toAgentRun(heartbeatRun({
144
+ invocationSource: "automation",
145
+ triggerDetail: "system",
146
+ contextSnapshot: {
147
+ rudderScene: "issue",
148
+ automationRunId: "automation-run-1",
149
+ issueId: "issue-1",
150
+ },
151
+ }));
152
+ expect(run.scene).toBe("issue");
153
+ expect(run.targetType).toBe("automation_run");
154
+ expect(run.targetId).toBe("automation-run-1");
155
+ });
156
+ it("treats review wakeups as review scene runs even when issue-backed", () => {
157
+ const run = toAgentRun(heartbeatRun({
158
+ invocationSource: "review",
159
+ triggerDetail: "system",
160
+ contextSnapshot: {
161
+ issueId: "issue-1",
162
+ wakeReason: "issue_review_closeout_missing",
163
+ },
164
+ }));
165
+ expect(run.scene).toBe("review");
166
+ expect(run.targetType).toBe("issue");
167
+ expect(run.targetId).toBe("issue-1");
168
+ });
169
+ it("normalizes timer invocations to the heartbeat scene", () => {
170
+ const run = toAgentRun(heartbeatRun({
171
+ invocationSource: "timer",
172
+ triggerDetail: "system",
173
+ contextSnapshot: {
174
+ wakeReason: "heartbeat_timer",
175
+ },
176
+ }));
177
+ expect(run.scene).toBe("heartbeat");
178
+ expect(run.triggerKind).toBe("system");
179
+ expect(run.targetType).toBe("wakeup_request");
180
+ expect(run.targetId).toBeNull();
181
+ });
182
+ it("treats on-demand manual invocations without another target as heartbeat scene runs", () => {
183
+ const run = toAgentRun(heartbeatRun({
184
+ invocationSource: "on_demand",
185
+ triggerDetail: "manual",
186
+ contextSnapshot: {
187
+ triggeredBy: "board",
188
+ },
189
+ }));
190
+ expect(run.scene).toBe("heartbeat");
191
+ expect(run.triggerKind).toBe("manual");
192
+ expect(run.targetType).toBe("wakeup_request");
193
+ expect(run.targetId).toBeNull();
194
+ });
195
+ });
196
+ //# sourceMappingURL=agent-run.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.test.js","sourceRoot":"","sources":["../src/agent-run.test.ts"],"names":[],"mappings":"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"}
package/dist/api.d.ts CHANGED
@@ -13,6 +13,7 @@ export declare const API: {
13
13
  readonly secrets: "/api/secrets";
14
14
  readonly costs: "/api/costs";
15
15
  readonly activity: "/api/activity";
16
+ readonly agentRuns: "/api/agent-runs";
16
17
  readonly dashboard: "/api/dashboard";
17
18
  readonly sidebarBadges: "/api/sidebar-badges";
18
19
  readonly invites: "/api/invites";
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;CAoBN,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBN,CAAC"}
package/dist/api.js CHANGED
@@ -13,6 +13,7 @@ export const API = {
13
13
  secrets: `${API_PREFIX}/secrets`,
14
14
  costs: `${API_PREFIX}/costs`,
15
15
  activity: `${API_PREFIX}/activity`,
16
+ agentRuns: `${API_PREFIX}/agent-runs`,
16
17
  dashboard: `${API_PREFIX}/dashboard`,
17
18
  sidebarBadges: `${API_PREFIX}/sidebar-badges`,
18
19
  invites: `${API_PREFIX}/invites`,
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAEjC,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,aAAa,EAAE,GAAG,UAAU,OAAO;IACnC,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,aAAa,EAAE,GAAG,UAAU,iBAAiB;IAC7C,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,YAAY,EAAE,GAAG,UAAU,gBAAgB;IAC3C,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,KAAK,EAAE,GAAG,UAAU,QAAQ;CACpB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAEjC,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,aAAa,EAAE,GAAG,UAAU,OAAO;IACnC,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,MAAM,EAAE,GAAG,UAAU,SAAS;IAC9B,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,KAAK,EAAE,GAAG,UAAU,QAAQ;IAC5B,QAAQ,EAAE,GAAG,UAAU,WAAW;IAClC,SAAS,EAAE,GAAG,UAAU,aAAa;IACrC,SAAS,EAAE,GAAG,UAAU,YAAY;IACpC,aAAa,EAAE,GAAG,UAAU,iBAAiB;IAC7C,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,YAAY,EAAE,GAAG,UAAU,gBAAgB;IAC3C,OAAO,EAAE,GAAG,UAAU,UAAU;IAChC,KAAK,EAAE,GAAG,UAAU,QAAQ;CACpB,CAAC"}