botmux 2.43.0 → 2.45.0

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 (192) hide show
  1. package/README.en.md +1 -2
  2. package/README.md +1 -2
  3. package/dist/bot-registry.d.ts +11 -0
  4. package/dist/bot-registry.d.ts.map +1 -1
  5. package/dist/bot-registry.js +1 -0
  6. package/dist/bot-registry.js.map +1 -1
  7. package/dist/cli/bots-list-output.d.ts +8 -0
  8. package/dist/cli/bots-list-output.d.ts.map +1 -1
  9. package/dist/cli/bots-list-output.js +9 -0
  10. package/dist/cli/bots-list-output.js.map +1 -1
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +6 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/core/command-handler.d.ts.map +1 -1
  15. package/dist/core/command-handler.js +169 -51
  16. package/dist/core/command-handler.js.map +1 -1
  17. package/dist/core/dashboard-ipc-server.d.ts +2 -0
  18. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  19. package/dist/core/dashboard-ipc-server.js +61 -2
  20. package/dist/core/dashboard-ipc-server.js.map +1 -1
  21. package/dist/core/role-resolver.d.ts +17 -1
  22. package/dist/core/role-resolver.d.ts.map +1 -1
  23. package/dist/core/role-resolver.js +64 -10
  24. package/dist/core/role-resolver.js.map +1 -1
  25. package/dist/core/session-manager.d.ts.map +1 -1
  26. package/dist/core/session-manager.js +14 -9
  27. package/dist/core/session-manager.js.map +1 -1
  28. package/dist/core/trigger-session.d.ts +9 -0
  29. package/dist/core/trigger-session.d.ts.map +1 -0
  30. package/dist/core/trigger-session.js +158 -0
  31. package/dist/core/trigger-session.js.map +1 -0
  32. package/dist/core/worker-pool.d.ts +22 -0
  33. package/dist/core/worker-pool.d.ts.map +1 -1
  34. package/dist/core/worker-pool.js +54 -2
  35. package/dist/core/worker-pool.js.map +1 -1
  36. package/dist/daemon.d.ts.map +1 -1
  37. package/dist/daemon.js +73 -44
  38. package/dist/daemon.js.map +1 -1
  39. package/dist/dashboard/connector-api.d.ts +3 -0
  40. package/dist/dashboard/connector-api.d.ts.map +1 -0
  41. package/dist/dashboard/connector-api.js +351 -0
  42. package/dist/dashboard/connector-api.js.map +1 -0
  43. package/dist/dashboard/federated-group-core.d.ts +54 -0
  44. package/dist/dashboard/federated-group-core.d.ts.map +1 -0
  45. package/dist/dashboard/federated-group-core.js +165 -0
  46. package/dist/dashboard/federated-group-core.js.map +1 -0
  47. package/dist/dashboard/federation-api.d.ts +42 -0
  48. package/dist/dashboard/federation-api.d.ts.map +1 -0
  49. package/dist/dashboard/federation-api.js +408 -0
  50. package/dist/dashboard/federation-api.js.map +1 -0
  51. package/dist/dashboard/federation-spoke-api.d.ts +76 -0
  52. package/dist/dashboard/federation-spoke-api.d.ts.map +1 -0
  53. package/dist/dashboard/federation-spoke-api.js +618 -0
  54. package/dist/dashboard/federation-spoke-api.js.map +1 -0
  55. package/dist/dashboard/team-group.d.ts +18 -0
  56. package/dist/dashboard/team-group.d.ts.map +1 -0
  57. package/dist/dashboard/team-group.js +7 -0
  58. package/dist/dashboard/team-group.js.map +1 -0
  59. package/dist/dashboard/trigger-api.d.ts +13 -0
  60. package/dist/dashboard/trigger-api.d.ts.map +1 -0
  61. package/dist/dashboard/trigger-api.js +77 -0
  62. package/dist/dashboard/trigger-api.js.map +1 -0
  63. package/dist/dashboard/web/app.js +8 -0
  64. package/dist/dashboard/web/app.js.map +1 -1
  65. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  66. package/dist/dashboard/web/bot-defaults.js +13 -0
  67. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  68. package/dist/dashboard/web/connectors.d.ts +2 -0
  69. package/dist/dashboard/web/connectors.d.ts.map +1 -0
  70. package/dist/dashboard/web/connectors.js +187 -0
  71. package/dist/dashboard/web/connectors.js.map +1 -0
  72. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  73. package/dist/dashboard/web/i18n.js +4 -0
  74. package/dist/dashboard/web/i18n.js.map +1 -1
  75. package/dist/dashboard/web/team-federation.d.ts +3 -0
  76. package/dist/dashboard/web/team-federation.d.ts.map +1 -0
  77. package/dist/dashboard/web/team-federation.js +472 -0
  78. package/dist/dashboard/web/team-federation.js.map +1 -0
  79. package/dist/dashboard/webhook-routes.d.ts +19 -0
  80. package/dist/dashboard/webhook-routes.d.ts.map +1 -0
  81. package/dist/dashboard/webhook-routes.js +321 -0
  82. package/dist/dashboard/webhook-routes.js.map +1 -0
  83. package/dist/dashboard-web/app.js +512 -384
  84. package/dist/dashboard-web/index.html +2 -0
  85. package/dist/dashboard.js +153 -1
  86. package/dist/dashboard.js.map +1 -1
  87. package/dist/i18n/en.d.ts.map +1 -1
  88. package/dist/i18n/en.js +31 -9
  89. package/dist/i18n/en.js.map +1 -1
  90. package/dist/i18n/zh.d.ts.map +1 -1
  91. package/dist/i18n/zh.js +31 -9
  92. package/dist/i18n/zh.js.map +1 -1
  93. package/dist/im/lark/card-builder.d.ts +25 -2
  94. package/dist/im/lark/card-builder.d.ts.map +1 -1
  95. package/dist/im/lark/card-builder.js +141 -43
  96. package/dist/im/lark/card-builder.js.map +1 -1
  97. package/dist/im/lark/card-handler.d.ts.map +1 -1
  98. package/dist/im/lark/card-handler.js +20 -4
  99. package/dist/im/lark/card-handler.js.map +1 -1
  100. package/dist/im/lark/client.d.ts +41 -0
  101. package/dist/im/lark/client.d.ts.map +1 -1
  102. package/dist/im/lark/client.js +174 -48
  103. package/dist/im/lark/client.js.map +1 -1
  104. package/dist/services/bot-owner-store.d.ts +28 -0
  105. package/dist/services/bot-owner-store.d.ts.map +1 -0
  106. package/dist/services/bot-owner-store.js +82 -0
  107. package/dist/services/bot-owner-store.js.map +1 -0
  108. package/dist/services/bot-profile-store.d.ts +16 -0
  109. package/dist/services/bot-profile-store.d.ts.map +1 -0
  110. package/dist/services/bot-profile-store.js +98 -0
  111. package/dist/services/bot-profile-store.js.map +1 -0
  112. package/dist/services/card-prefs-store.d.ts +2 -1
  113. package/dist/services/card-prefs-store.d.ts.map +1 -1
  114. package/dist/services/card-prefs-store.js +13 -4
  115. package/dist/services/card-prefs-store.js.map +1 -1
  116. package/dist/services/connector-store.d.ts +58 -0
  117. package/dist/services/connector-store.d.ts.map +1 -0
  118. package/dist/services/connector-store.js +79 -0
  119. package/dist/services/connector-store.js.map +1 -0
  120. package/dist/services/deployment-identity.d.ts +22 -0
  121. package/dist/services/deployment-identity.d.ts.map +1 -0
  122. package/dist/services/deployment-identity.js +67 -0
  123. package/dist/services/deployment-identity.js.map +1 -0
  124. package/dist/services/federation-membership-store.d.ts +23 -0
  125. package/dist/services/federation-membership-store.d.ts.map +1 -0
  126. package/dist/services/federation-membership-store.js +66 -0
  127. package/dist/services/federation-membership-store.js.map +1 -0
  128. package/dist/services/federation-roster.d.ts +54 -0
  129. package/dist/services/federation-roster.d.ts.map +1 -0
  130. package/dist/services/federation-roster.js +51 -0
  131. package/dist/services/federation-roster.js.map +1 -0
  132. package/dist/services/federation-store.d.ts +76 -0
  133. package/dist/services/federation-store.d.ts.map +1 -0
  134. package/dist/services/federation-store.js +133 -0
  135. package/dist/services/federation-store.js.map +1 -0
  136. package/dist/services/group-creator.d.ts +6 -0
  137. package/dist/services/group-creator.d.ts.map +1 -1
  138. package/dist/services/group-creator.js +10 -1
  139. package/dist/services/group-creator.js.map +1 -1
  140. package/dist/services/groups-store.d.ts +11 -0
  141. package/dist/services/groups-store.d.ts.map +1 -1
  142. package/dist/services/groups-store.js +42 -0
  143. package/dist/services/groups-store.js.map +1 -1
  144. package/dist/services/invite-store.d.ts +28 -0
  145. package/dist/services/invite-store.d.ts.map +1 -0
  146. package/dist/services/invite-store.js +85 -0
  147. package/dist/services/invite-store.js.map +1 -0
  148. package/dist/services/pairing-store.d.ts +47 -0
  149. package/dist/services/pairing-store.d.ts.map +1 -0
  150. package/dist/services/pairing-store.js +132 -0
  151. package/dist/services/pairing-store.js.map +1 -0
  152. package/dist/services/team-roster.d.ts +38 -0
  153. package/dist/services/team-roster.d.ts.map +1 -0
  154. package/dist/services/team-roster.js +82 -0
  155. package/dist/services/team-roster.js.map +1 -0
  156. package/dist/services/team-store.d.ts +54 -0
  157. package/dist/services/team-store.d.ts.map +1 -0
  158. package/dist/services/team-store.js +156 -0
  159. package/dist/services/team-store.js.map +1 -0
  160. package/dist/services/trigger-log-store.d.ts +46 -0
  161. package/dist/services/trigger-log-store.d.ts.map +1 -0
  162. package/dist/services/trigger-log-store.js +132 -0
  163. package/dist/services/trigger-log-store.js.map +1 -0
  164. package/dist/services/trigger-types.d.ts +57 -0
  165. package/dist/services/trigger-types.d.ts.map +1 -0
  166. package/dist/services/trigger-types.js +28 -0
  167. package/dist/services/trigger-types.js.map +1 -0
  168. package/dist/services/webhook-key.d.ts +16 -0
  169. package/dist/services/webhook-key.d.ts.map +1 -0
  170. package/dist/services/webhook-key.js +123 -0
  171. package/dist/services/webhook-key.js.map +1 -0
  172. package/dist/services/webhook-lifecycle-extractors.d.ts +15 -0
  173. package/dist/services/webhook-lifecycle-extractors.d.ts.map +1 -0
  174. package/dist/services/webhook-lifecycle-extractors.js +59 -0
  175. package/dist/services/webhook-lifecycle-extractors.js.map +1 -0
  176. package/dist/services/webhook-lifecycle-store.d.ts +45 -0
  177. package/dist/services/webhook-lifecycle-store.d.ts.map +1 -0
  178. package/dist/services/webhook-lifecycle-store.js +159 -0
  179. package/dist/services/webhook-lifecycle-store.js.map +1 -0
  180. package/dist/setup/verify-permissions.d.ts.map +1 -1
  181. package/dist/setup/verify-permissions.js +4 -0
  182. package/dist/setup/verify-permissions.js.map +1 -1
  183. package/dist/skills/definitions.d.ts.map +1 -1
  184. package/dist/skills/definitions.js +64 -10
  185. package/dist/skills/definitions.js.map +1 -1
  186. package/dist/workflows/events/payloads.d.ts +2 -2
  187. package/dist/workflows/events/schema.d.ts +8 -8
  188. package/dist/workflows/trigger-from-envelope.d.ts +13 -0
  189. package/dist/workflows/trigger-from-envelope.d.ts.map +1 -0
  190. package/dist/workflows/trigger-from-envelope.js +67 -0
  191. package/dist/workflows/trigger-from-envelope.js.map +1 -0
  192. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ function pathSegments(path) {
2
+ const trimmed = path.trim();
3
+ if (!trimmed)
4
+ return null;
5
+ const withoutRoot = trimmed.startsWith('$.') ? trimmed.slice(2)
6
+ : trimmed === '$' ? ''
7
+ : trimmed.startsWith('.') ? trimmed.slice(1)
8
+ : trimmed;
9
+ if (!withoutRoot)
10
+ return [];
11
+ const parts = withoutRoot.split('.');
12
+ if (parts.some(p => !p || !/^[A-Za-z0-9_-]+$/.test(p)))
13
+ return null;
14
+ return parts;
15
+ }
16
+ export function getJsonPathValue(input, path) {
17
+ const parts = pathSegments(path);
18
+ if (!parts)
19
+ return undefined;
20
+ let cur = input;
21
+ for (const p of parts) {
22
+ if (!cur || typeof cur !== 'object' || Array.isArray(cur))
23
+ return undefined;
24
+ cur = cur[p];
25
+ }
26
+ return cur;
27
+ }
28
+ function stringValue(v) {
29
+ if (typeof v === 'string')
30
+ return v.trim() || undefined;
31
+ if (typeof v === 'number' || typeof v === 'boolean')
32
+ return String(v);
33
+ return undefined;
34
+ }
35
+ function normalizeStatus(raw, map) {
36
+ const lower = raw.trim().toLowerCase();
37
+ const mapped = map?.[raw] ?? map?.[lower] ?? lower;
38
+ const normalized = String(mapped).trim().toLowerCase();
39
+ if (['resolved', 'recovered', 'closed', 'ok'].includes(normalized))
40
+ return 'resolved';
41
+ if (['firing', 'active', 'triggered', 'open', 'alerting'].includes(normalized))
42
+ return 'firing';
43
+ return undefined;
44
+ }
45
+ export function extractWebhookLifecycle(payload, extractors) {
46
+ if (!extractors)
47
+ return { ok: false, error: 'lifecycle_extractors_required' };
48
+ const dedupKey = stringValue(getJsonPathValue(payload, extractors.dedupKey));
49
+ if (!dedupKey)
50
+ return { ok: false, error: 'dedup_key_not_found' };
51
+ const rawStatus = stringValue(getJsonPathValue(payload, extractors.status));
52
+ if (!rawStatus)
53
+ return { ok: false, error: 'status_not_found' };
54
+ const status = normalizeStatus(rawStatus, extractors.statusMap);
55
+ if (!status)
56
+ return { ok: false, error: 'status_not_supported' };
57
+ return { ok: true, lifecycle: { dedupKey, status } };
58
+ }
59
+ //# sourceMappingURL=webhook-lifecycle-extractors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-lifecycle-extractors.js","sourceRoot":"","sources":["../../src/services/webhook-lifecycle-extractors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export type WebhookLifecycleStatus = 'creating' | 'active' | 'resolved';
2
+ export interface WebhookLifecycleRecord {
3
+ lifecycleId: string;
4
+ connectorId: string;
5
+ dedupKey: string;
6
+ status: WebhookLifecycleStatus;
7
+ chatId?: string;
8
+ creatorLarkAppId?: string;
9
+ pendingResolved?: boolean;
10
+ creatingExpiresAt?: string;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ resolvedAt?: string;
14
+ }
15
+ export type BeginLifecycleFiringResult = {
16
+ action: 'create';
17
+ record: WebhookLifecycleRecord;
18
+ } | {
19
+ action: 'reuse';
20
+ record: WebhookLifecycleRecord;
21
+ } | {
22
+ action: 'creating';
23
+ record: WebhookLifecycleRecord;
24
+ };
25
+ export interface WebhookLifecycleStoreFile {
26
+ version: 1;
27
+ records: WebhookLifecycleRecord[];
28
+ }
29
+ export declare function listWebhookLifecycleRecords(opts?: {
30
+ connectorId?: string;
31
+ status?: WebhookLifecycleStatus;
32
+ }, dataDir?: string): WebhookLifecycleRecord[];
33
+ export declare function beginWebhookLifecycleFiring(connectorId: string, dedupKey: string, dataDir?: string): Promise<BeginLifecycleFiringResult>;
34
+ export declare function activateWebhookLifecycleGroup(connectorId: string, dedupKey: string, lifecycleId: string, chatId: string, opts?: {
35
+ creatorLarkAppId?: string;
36
+ }, dataDir?: string): Promise<{
37
+ status: 'active' | 'pending_resolved' | 'stale';
38
+ record?: WebhookLifecycleRecord;
39
+ }>;
40
+ export declare function failWebhookLifecycleGroup(connectorId: string, dedupKey: string, lifecycleId: string, dataDir?: string): Promise<void>;
41
+ export declare function resolveWebhookLifecycleGroup(connectorId: string, dedupKey: string, dataDir?: string): Promise<{
42
+ action: 'close' | 'pending' | 'noop';
43
+ record?: WebhookLifecycleRecord;
44
+ }>;
45
+ //# sourceMappingURL=webhook-lifecycle-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-lifecycle-store.d.ts","sourceRoot":"","sources":["../../src/services/webhook-lifecycle-store.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAiED,wBAAgB,2BAA2B,CACzC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAO,EACpE,OAAO,GAAE,MAA+B,GACvC,sBAAsB,EAAE,CAI1B;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC,0BAA0B,CAAC,CA2BrC;AAED,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,EACxC,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,GAAG,kBAAkB,GAAG,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAiC/F;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAgBpF"}
@@ -0,0 +1,159 @@
1
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { dirname, join } from 'node:path';
4
+ import { config } from '../config.js';
5
+ import { withFileLock } from '../utils/file-lock.js';
6
+ function storePath(dataDir = config.session.dataDir) {
7
+ return join(dataDir, 'webhook-lifecycle.json');
8
+ }
9
+ function emptyStore() {
10
+ return { version: 1, records: [] };
11
+ }
12
+ function normalizeStore(raw) {
13
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
14
+ return emptyStore();
15
+ const r = raw;
16
+ return {
17
+ version: 1,
18
+ records: Array.isArray(r.records)
19
+ ? r.records.filter((x) => !!x
20
+ && typeof x === 'object'
21
+ && typeof x.connectorId === 'string'
22
+ && typeof x.dedupKey === 'string'
23
+ && typeof x.lifecycleId === 'string')
24
+ : [],
25
+ };
26
+ }
27
+ function readStore(dataDir = config.session.dataDir) {
28
+ const fp = storePath(dataDir);
29
+ if (!existsSync(fp))
30
+ return emptyStore();
31
+ try {
32
+ return normalizeStore(JSON.parse(readFileSync(fp, 'utf-8')));
33
+ }
34
+ catch {
35
+ return emptyStore();
36
+ }
37
+ }
38
+ function writeStore(dataDir, store) {
39
+ const fp = storePath(dataDir);
40
+ mkdirSync(dirname(fp), { recursive: true });
41
+ const tmp = `${fp}.${process.pid}.${randomUUID()}.tmp`;
42
+ writeFileSync(tmp, JSON.stringify(normalizeStore(store), null, 2) + '\n', {
43
+ encoding: 'utf-8',
44
+ mode: 0o600,
45
+ });
46
+ renameSync(tmp, fp);
47
+ }
48
+ function keyOf(connectorId, dedupKey) {
49
+ return `${connectorId}\0${dedupKey}`;
50
+ }
51
+ function findIndex(store, connectorId, dedupKey) {
52
+ const key = keyOf(connectorId, dedupKey);
53
+ return store.records.findIndex(r => keyOf(r.connectorId, r.dedupKey) === key);
54
+ }
55
+ const CREATING_TTL_MS = 10 * 60 * 1000;
56
+ function creatingExpired(record, nowMs) {
57
+ const raw = record.creatingExpiresAt ?? record.createdAt;
58
+ const ms = Date.parse(raw);
59
+ const expiresAt = record.creatingExpiresAt ? ms : ms + CREATING_TTL_MS;
60
+ return Number.isFinite(expiresAt) && expiresAt <= nowMs;
61
+ }
62
+ export function listWebhookLifecycleRecords(opts = {}, dataDir = config.session.dataDir) {
63
+ return readStore(dataDir).records.filter(r => (!opts.connectorId || r.connectorId === opts.connectorId)
64
+ && (!opts.status || r.status === opts.status));
65
+ }
66
+ export async function beginWebhookLifecycleFiring(connectorId, dedupKey, dataDir = config.session.dataDir) {
67
+ const fp = storePath(dataDir);
68
+ return withFileLock(fp, async () => {
69
+ const nowMs = Date.now();
70
+ const store = readStore(dataDir);
71
+ const idx = findIndex(store, connectorId, dedupKey);
72
+ const existing = idx >= 0 ? store.records[idx] : undefined;
73
+ if (existing?.status === 'active' && existing.chatId)
74
+ return { action: 'reuse', record: existing };
75
+ if (existing?.status === 'creating' && !creatingExpired(existing, nowMs)) {
76
+ return { action: 'creating', record: existing };
77
+ }
78
+ const now = new Date(nowMs).toISOString();
79
+ const record = {
80
+ lifecycleId: randomUUID(),
81
+ connectorId,
82
+ dedupKey,
83
+ status: 'creating',
84
+ creatingExpiresAt: new Date(nowMs + CREATING_TTL_MS).toISOString(),
85
+ createdAt: now,
86
+ updatedAt: now,
87
+ };
88
+ if (idx >= 0)
89
+ store.records[idx] = record;
90
+ else
91
+ store.records.push(record);
92
+ writeStore(dataDir, store);
93
+ return { action: 'create', record };
94
+ });
95
+ }
96
+ export async function activateWebhookLifecycleGroup(connectorId, dedupKey, lifecycleId, chatId, opts = {}, dataDir = config.session.dataDir) {
97
+ const fp = storePath(dataDir);
98
+ return withFileLock(fp, async () => {
99
+ const store = readStore(dataDir);
100
+ const idx = findIndex(store, connectorId, dedupKey);
101
+ const existing = idx >= 0 ? store.records[idx] : undefined;
102
+ if (!existing || existing.lifecycleId !== lifecycleId || existing.status !== 'creating') {
103
+ return { status: 'stale' };
104
+ }
105
+ const now = new Date().toISOString();
106
+ const next = existing.pendingResolved
107
+ ? {
108
+ ...existing,
109
+ status: 'resolved',
110
+ chatId,
111
+ creatorLarkAppId: opts.creatorLarkAppId,
112
+ creatingExpiresAt: undefined,
113
+ pendingResolved: false,
114
+ updatedAt: now,
115
+ resolvedAt: now,
116
+ }
117
+ : {
118
+ ...existing,
119
+ status: 'active',
120
+ chatId,
121
+ creatorLarkAppId: opts.creatorLarkAppId,
122
+ creatingExpiresAt: undefined,
123
+ updatedAt: now,
124
+ };
125
+ store.records[idx] = next;
126
+ writeStore(dataDir, store);
127
+ return { status: next.status === 'resolved' ? 'pending_resolved' : 'active', record: next };
128
+ });
129
+ }
130
+ export async function failWebhookLifecycleGroup(connectorId, dedupKey, lifecycleId, dataDir = config.session.dataDir) {
131
+ const fp = storePath(dataDir);
132
+ await withFileLock(fp, async () => {
133
+ const store = readStore(dataDir);
134
+ const idx = findIndex(store, connectorId, dedupKey);
135
+ const existing = idx >= 0 ? store.records[idx] : undefined;
136
+ if (existing?.lifecycleId === lifecycleId && existing.status === 'creating') {
137
+ store.records.splice(idx, 1);
138
+ writeStore(dataDir, store);
139
+ }
140
+ });
141
+ }
142
+ export async function resolveWebhookLifecycleGroup(connectorId, dedupKey, dataDir = config.session.dataDir) {
143
+ const fp = storePath(dataDir);
144
+ return withFileLock(fp, async () => {
145
+ const store = readStore(dataDir);
146
+ const idx = findIndex(store, connectorId, dedupKey);
147
+ const existing = idx >= 0 ? store.records[idx] : undefined;
148
+ if (!existing || existing.status === 'resolved')
149
+ return { action: 'noop' };
150
+ const now = new Date().toISOString();
151
+ const next = existing.status === 'creating'
152
+ ? { ...existing, pendingResolved: true, updatedAt: now }
153
+ : { ...existing, status: 'resolved', updatedAt: now, resolvedAt: now };
154
+ store.records[idx] = next;
155
+ writeStore(dataDir, store);
156
+ return { action: existing.status === 'creating' ? 'pending' : 'close', record: next };
157
+ });
158
+ }
159
+ //# sourceMappingURL=webhook-lifecycle-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-lifecycle-store.js","sourceRoot":"","sources":["../../src/services/webhook-lifecycle-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify-permissions.d.ts","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,EAqBjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGnF;AAID,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrD,OAAO,CAAC,oBAAoB,CAAC,CA0D/B;AAID,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV;;;;OAIG;IACH,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EACF,WAAW,GACX,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpE,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,aAAa,EAAE,CAa3F"}
1
+ {"version":3,"file":"verify-permissions.d.ts","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAa,EAyBjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGpF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,CAGnF;AAID,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,EACvB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrD,OAAO,CAAC,oBAAoB,CAAC,CA0D/B;AAID,MAAM,MAAM,gBAAgB,GACxB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV;;;;OAIG;IACH,KAAK,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAgB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EACF,WAAW,GACX,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACpE,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,aAAa,EAAE,CAa3F"}
@@ -42,6 +42,10 @@ export const BOTMUX_REQUIRED_SCOPES = [
42
42
  // 任一即可(OR),但实际可申请的只有 im:chat.members:read,故只校验它。缺它时
43
43
  // isInChat 抛 Access denied 被吞,bot 静默掉出 roster,/group fail-closed 建不了群。
44
44
  { name: 'im:chat.members:read', desc: '群成员读取(/group 建群解析、判断 bot 是否在群)', critical: true },
45
+ // 拉群把人/机器人加进群(chatMembers.create)需要写权限;缺它时建群能成、加成员
46
+ // 报 code 99991672 Access denied → 跨部署拉群「机器人进了但人没进」。非 critical:
47
+ // 核心收发消息不依赖它,只 /group 与跨部署 federation 拉群需要,缺失只 WARN。
48
+ { name: 'im:chat.members:write_only', desc: '群成员写入(/group、跨部署拉群把人和机器人加进群)', critical: false },
45
49
  { name: 'contact:user.base:readonly', desc: '用户基本信息', critical: true },
46
50
  // event-dispatcher.checkRequiredScopes 历史上一直对这一项 DM 管理员("多 bot
47
51
  // 协作收不到事件"),等价于 critical 处理;保留 critical 标记是为了让启动
@@ -1 +1 @@
1
- {"version":3,"file":"verify-permissions.js","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-permissions.js","sourceRoot":"","sources":["../../src/setup/verify-permissions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAk0BD,eAAO,MAAM,SAAS,wjJAiErB,CAAC;AAEF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAOpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAEvC,CAAC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAw3BD,eAAO,MAAM,SAAS,wjJAiErB,CAAC;AAEF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAQpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAEvC,CAAC"}
@@ -402,10 +402,10 @@ botmux send --top-level --chat-id oc_xxxxxxxxxxxx "📦 自动推送内容..."
402
402
  `;
403
403
  const BOTS_SKILL = `---
404
404
  name: botmux-bots
405
- description: 列出当前飞书群聊中的机器人及其 open_id。在需要 @mention 其他机器人协作时使用。
405
+ description: 列出当前飞书群里可协作的机器人(协作花名册:含能力标签、是否有团队角色、以及你能否可靠 @ 到它)。在需要点名其他机器人协作、或交棒给队友前查看时使用。
406
406
  ---
407
407
 
408
- # botmux-bots — 查询可用机器人
408
+ # botmux-bots — 群内协作花名册
409
409
 
410
410
  ## 用法
411
411
 
@@ -413,27 +413,80 @@ description: 列出当前飞书群聊中的机器人及其 open_id。在需要 @
413
413
  botmux bots list
414
414
  \`\`\`
415
415
 
416
- ## 输出
416
+ ## 输出(JSON)
417
+
418
+ 每个机器人一行,关键字段:
419
+ - \`name\` / \`openId\` / \`isSelf\`
420
+ - \`larkAppId\`:本机托管的机器人才有(可用作 workflow 的 bot id)
421
+ - \`capability\`:团队能力标签(它擅长什么)——挑选交棒/协作对象的依据
422
+ - \`hasTeamRole\`:是否配置了团队级角色
423
+ - \`mentionable\`:**你能不能可靠地 @ 到它**(关键)
424
+ - \`mentionSource\`:\`cross-ref\` | \`observed\` | \`self\` | \`fallback\`
417
425
 
418
- JSON 格式:
419
426
  \`\`\`json
420
427
  {
421
428
  "sessionId": "...",
422
429
  "chatId": "...",
423
430
  "bots": [
424
- { "name": "Claude", "openId": "ou_xxx", "isSelf": true },
425
- { "name": "Aiden", "openId": "ou_yyy", "isSelf": false }
431
+ { "name": "后端Bot", "openId": "ou_yyy", "isSelf": false, "larkAppId": "cli_b",
432
+ "capability": "服务端排查,擅长日志", "hasTeamRole": true,
433
+ "mentionable": true, "mentionSource": "cross-ref" }
426
434
  ],
427
- "total": 2
435
+ "total": 1
428
436
  }
429
437
  \`\`\`
430
438
 
431
- ## 配合 botmux send 使用
439
+ ## 关键规则
440
+
441
+ 1. **只 @ \`mentionable=true\` 的机器人**。\`mentionable=false\` 表示"知道它在群里,但当前点不准"(飞书 open_id 按 app 隔离)——这种先让它 / 用户在群里 \`/introduce\` 一次,再点名。
442
+ 2. 按 \`capability\` 挑合适的队友,而不是乱点。
443
+ 3. 配合 botmux send:\`botmux send --mention "ou_yyy:后端Bot" "请帮忙处理"\`
444
+
445
+ ## 要把任务交棒给别的机器人?
446
+
447
+ 见 **botmux-handoff** 技能(结构化交接)。
448
+ `;
449
+ const HANDOFF_SKILL = `---
450
+ name: botmux-handoff
451
+ description: 把当前任务交棒给团队里另一个机器人时使用(多机器人协作接力)。当你做完自己负责的部分、需要另一个机器人接手下一步,或用户说"交给X""让X接着做""@某bot继续""下一步谁谁来"时触发。先用 botmux-bots 查花名册挑对象,再用结构化交接发给对方。
452
+ ---
453
+
454
+ # botmux-handoff — 机器人接力交棒
455
+
456
+ 多机器人协作里,一个机器人干完自己那段后把任务交给另一个机器人接手。**随意闲聊可以不拘格式**,但正式交棒要带最小结构,否则接手方拿不到足够上下文、交接质量不可控。
457
+
458
+ ## 步骤
459
+
460
+ 1. 用 \`botmux bots list\`(见 botmux-bots 技能)查群内协作花名册:
461
+ - 按 \`capability\` 挑**合适**的接手机器人;
462
+ - 确认它 \`mentionable: true\`(若为 false,先让它/用户 \`/introduce\` 一次再点名)。
463
+ 2. 用 \`botmux send --mention\` 发一条**结构化交接**给它。
464
+
465
+ ## 交接必须包含 5 要素
466
+
467
+ - **交给谁**:@ 目标机器人
468
+ - **当前结论**:你已经做完/查清了什么
469
+ - **相关上下文**:链接、关键消息、文件路径、数据
470
+ - **期望下一步**:希望它具体做什么
471
+ - **完成标准**:怎样算这一步做完
472
+
473
+ ## 示例
432
474
 
433
475
  \`\`\`bash
434
- # 查到 Aiden open_id 后
435
- botmux send --mention "ou_yyy:Aiden" "请 @Aiden 帮忙处理"
476
+ botmux send --mention "ou_yyy:后端Bot" <<'EOF'
477
+ @后端Bot 交接:
478
+ - 当前结论:定位到支付回调超时,错误集中在 09:00–09:10,日志 https://...
479
+ - 上下文:服务 pay-gateway,最近一次变更 PR #1234
480
+ - 期望下一步:判断是否回滚 #1234,并给出修复方案
481
+ - 完成标准:给出根因结论 + 可执行的修复/回滚决定
482
+ EOF
436
483
  \`\`\`
484
+
485
+ ## 注意
486
+
487
+ - 跨部署的外部机器人若 \`mentionable: false\`,**先 \`/introduce\` 一次**再交棒(飞书 open_id 按 app 隔离)。
488
+ - 人主导的协作可以不走这套结构;本技能针对**机器人自主接力**。
489
+ - 交棒后简短告知用户"已交给 @X 接手",保持可见。
437
490
  `;
438
491
  const WORKFLOW_CREATE_SKILL = `---
439
492
  name: botmux-workflow-create
@@ -906,6 +959,7 @@ export const BUILTIN_SKILLS = [
906
959
  { name: 'botmux-quoted', content: QUOTED_SKILL },
907
960
  { name: 'botmux-send', content: SEND_SKILL },
908
961
  { name: 'botmux-bots', content: BOTS_SKILL },
962
+ { name: 'botmux-handoff', content: HANDOFF_SKILL },
909
963
  { name: 'botmux-workflow-create', content: WORKFLOW_CREATE_SKILL },
910
964
  ];
911
965
  /** Skills that earlier botmux versions installed but no longer ship. The
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FtB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+LlB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Y7B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiExB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE;IAClD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;IAChD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACnE,CAAC;AAEF;;qCAEqC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,wBAAwB;CACzB,CAAC"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FtB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+LlB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ClB,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCrB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Y7B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiExB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE;IAClD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;IAChD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE;IAClD,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACnE,CAAC;AAEF;;qCAEqC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,wBAAwB;CACzB,CAAC"}
@@ -1005,15 +1005,15 @@ export declare const ReconcileResultPayload: z.ZodObject<{
1005
1005
  decision: z.ZodEnum<["replayed", "completedByIdempotentSubmit", "manual", "freshRetry"]>;
1006
1006
  evidence: z.ZodRecord<z.ZodString, z.ZodUnknown>;
1007
1007
  }, "strip", z.ZodTypeAny, {
1008
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
1008
1009
  activityId: string;
1009
1010
  idempotencyKey: string;
1010
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
1011
1011
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
1012
1012
  evidence: Record<string, unknown>;
1013
1013
  }, {
1014
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
1014
1015
  activityId: string;
1015
1016
  idempotencyKey: string;
1016
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
1017
1017
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
1018
1018
  evidence: Record<string, unknown>;
1019
1019
  }>;
@@ -2875,15 +2875,15 @@ export declare const ReconcileResultEventSchema: z.ZodObject<{
2875
2875
  decision: z.ZodEnum<["replayed", "completedByIdempotentSubmit", "manual", "freshRetry"]>;
2876
2876
  evidence: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2877
2877
  }, "strip", z.ZodTypeAny, {
2878
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2878
2879
  activityId: string;
2879
2880
  idempotencyKey: string;
2880
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2881
2881
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
2882
2882
  evidence: Record<string, unknown>;
2883
2883
  }, {
2884
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2884
2885
  activityId: string;
2885
2886
  idempotencyKey: string;
2886
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2887
2887
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
2888
2888
  evidence: Record<string, unknown>;
2889
2889
  }>, z.ZodObject<{
@@ -2911,9 +2911,9 @@ export declare const ReconcileResultEventSchema: z.ZodObject<{
2911
2911
  schemaVersion: 1;
2912
2912
  eventId: string;
2913
2913
  payload: {
2914
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2914
2915
  activityId: string;
2915
2916
  idempotencyKey: string;
2916
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2917
2917
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
2918
2918
  evidence: Record<string, unknown>;
2919
2919
  } | {
@@ -2930,9 +2930,9 @@ export declare const ReconcileResultEventSchema: z.ZodObject<{
2930
2930
  schemaVersion: 1;
2931
2931
  eventId: string;
2932
2932
  payload: {
2933
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2933
2934
  activityId: string;
2934
2935
  idempotencyKey: string;
2935
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
2936
2936
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
2937
2937
  evidence: Record<string, unknown>;
2938
2938
  } | {
@@ -5778,15 +5778,15 @@ export declare const EventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
5778
5778
  decision: z.ZodEnum<["replayed", "completedByIdempotentSubmit", "manual", "freshRetry"]>;
5779
5779
  evidence: z.ZodRecord<z.ZodString, z.ZodUnknown>;
5780
5780
  }, "strip", z.ZodTypeAny, {
5781
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5781
5782
  activityId: string;
5782
5783
  idempotencyKey: string;
5783
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5784
5784
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
5785
5785
  evidence: Record<string, unknown>;
5786
5786
  }, {
5787
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5787
5788
  activityId: string;
5788
5789
  idempotencyKey: string;
5789
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5790
5790
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
5791
5791
  evidence: Record<string, unknown>;
5792
5792
  }>, z.ZodObject<{
@@ -5814,9 +5814,9 @@ export declare const EventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
5814
5814
  schemaVersion: 1;
5815
5815
  eventId: string;
5816
5816
  payload: {
5817
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5817
5818
  activityId: string;
5818
5819
  idempotencyKey: string;
5819
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5820
5820
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
5821
5821
  evidence: Record<string, unknown>;
5822
5822
  } | {
@@ -5833,9 +5833,9 @@ export declare const EventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
5833
5833
  schemaVersion: 1;
5834
5834
  eventId: string;
5835
5835
  payload: {
5836
+ capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5836
5837
  activityId: string;
5837
5838
  idempotencyKey: string;
5838
- capability: "none" | "readOnlyLookup" | "idempotentSubmit";
5839
5839
  decision: "manual" | "replayed" | "completedByIdempotentSubmit" | "freshRetry";
5840
5840
  evidence: Record<string, unknown>;
5841
5841
  } | {
@@ -0,0 +1,13 @@
1
+ import type { TriggerRequest, TriggerResponse } from '../services/trigger-types.js';
2
+ import type { TriggerInput, TriggerResult } from './trigger-run.js';
3
+ export interface EnvelopeWorkflowDeps {
4
+ larkAppId: string;
5
+ /** The daemon-wired triggerWorkflowRun closure (all heavy deps already bound). */
6
+ runWorkflow: (input: TriggerInput) => Promise<TriggerResult>;
7
+ /** Test seam. */
8
+ makeTriggerId?: () => string;
9
+ }
10
+ /** The well-known param name a webhook-triggerable workflow must declare (type string). */
11
+ export declare const EVENT_PARAM_NAME = "event";
12
+ export declare function triggerWorkflowFromEnvelope(req: TriggerRequest, deps: EnvelopeWorkflowDeps): Promise<TriggerResponse>;
13
+ //# sourceMappingURL=trigger-from-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-from-envelope.d.ts","sourceRoot":"","sources":["../../src/workflows/trigger-from-envelope.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,iBAAiB;IACjB,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC;CAC9B;AAED,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,eAAe,CAAC,CAuD1B"}