@generacy-ai/generacy 0.5.0 → 0.7.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 (105) hide show
  1. package/dist/cli/commands/cockpit/clarification-answer-marker.d.ts +8 -0
  2. package/dist/cli/commands/cockpit/clarification-answer-marker.d.ts.map +1 -0
  3. package/dist/cli/commands/cockpit/clarification-answer-marker.js +76 -0
  4. package/dist/cli/commands/cockpit/clarification-answer-marker.js.map +1 -0
  5. package/dist/cli/commands/cockpit/clarification-comment-finder.d.ts +0 -10
  6. package/dist/cli/commands/cockpit/clarification-comment-finder.d.ts.map +1 -1
  7. package/dist/cli/commands/cockpit/clarification-comment-finder.js +57 -4
  8. package/dist/cli/commands/cockpit/clarification-comment-finder.js.map +1 -1
  9. package/dist/cli/commands/cockpit/clarify-relay.d.ts +38 -0
  10. package/dist/cli/commands/cockpit/clarify-relay.d.ts.map +1 -0
  11. package/dist/cli/commands/cockpit/clarify-relay.js +120 -0
  12. package/dist/cli/commands/cockpit/clarify-relay.js.map +1 -0
  13. package/dist/cli/commands/cockpit/doorbell/aggregate-on-demand.d.ts +43 -0
  14. package/dist/cli/commands/cockpit/doorbell/aggregate-on-demand.d.ts.map +1 -0
  15. package/dist/cli/commands/cockpit/doorbell/aggregate-on-demand.js +72 -0
  16. package/dist/cli/commands/cockpit/doorbell/aggregate-on-demand.js.map +1 -0
  17. package/dist/cli/commands/cockpit/doorbell/channel-discovery.d.ts +103 -0
  18. package/dist/cli/commands/cockpit/doorbell/channel-discovery.d.ts.map +1 -0
  19. package/dist/cli/commands/cockpit/doorbell/channel-discovery.js +168 -0
  20. package/dist/cli/commands/cockpit/doorbell/channel-discovery.js.map +1 -0
  21. package/dist/cli/commands/cockpit/doorbell/smee-source.d.ts +73 -0
  22. package/dist/cli/commands/cockpit/doorbell/smee-source.d.ts.map +1 -0
  23. package/dist/cli/commands/cockpit/doorbell/smee-source.js +405 -0
  24. package/dist/cli/commands/cockpit/doorbell/smee-source.js.map +1 -0
  25. package/dist/cli/commands/cockpit/doorbell/source-selector.d.ts +61 -0
  26. package/dist/cli/commands/cockpit/doorbell/source-selector.d.ts.map +1 -0
  27. package/dist/cli/commands/cockpit/doorbell/source-selector.js +208 -0
  28. package/dist/cli/commands/cockpit/doorbell/source-selector.js.map +1 -0
  29. package/dist/cli/commands/cockpit/doorbell/sse-parser.d.ts +15 -0
  30. package/dist/cli/commands/cockpit/doorbell/sse-parser.d.ts.map +1 -0
  31. package/dist/cli/commands/cockpit/doorbell/sse-parser.js +43 -0
  32. package/dist/cli/commands/cockpit/doorbell/sse-parser.js.map +1 -0
  33. package/dist/cli/commands/cockpit/doorbell/startup-retry.d.ts +55 -0
  34. package/dist/cli/commands/cockpit/doorbell/startup-retry.d.ts.map +1 -0
  35. package/dist/cli/commands/cockpit/doorbell/startup-retry.js +159 -0
  36. package/dist/cli/commands/cockpit/doorbell/startup-retry.js.map +1 -0
  37. package/dist/cli/commands/cockpit/doorbell/subscribe.d.ts +19 -0
  38. package/dist/cli/commands/cockpit/doorbell/subscribe.d.ts.map +1 -0
  39. package/dist/cli/commands/cockpit/doorbell/subscribe.js +54 -0
  40. package/dist/cli/commands/cockpit/doorbell/subscribe.js.map +1 -0
  41. package/dist/cli/commands/cockpit/doorbell/webhook-target-resolver.d.ts +20 -0
  42. package/dist/cli/commands/cockpit/doorbell/webhook-target-resolver.d.ts.map +1 -0
  43. package/dist/cli/commands/cockpit/doorbell/webhook-target-resolver.js +51 -0
  44. package/dist/cli/commands/cockpit/doorbell/webhook-target-resolver.js.map +1 -0
  45. package/dist/cli/commands/cockpit/doorbell/webhook-to-event.d.ts +28 -0
  46. package/dist/cli/commands/cockpit/doorbell/webhook-to-event.d.ts.map +1 -0
  47. package/dist/cli/commands/cockpit/doorbell/webhook-to-event.js +162 -0
  48. package/dist/cli/commands/cockpit/doorbell/webhook-to-event.js.map +1 -0
  49. package/dist/cli/commands/cockpit/doorbell.d.ts +58 -0
  50. package/dist/cli/commands/cockpit/doorbell.d.ts.map +1 -0
  51. package/dist/cli/commands/cockpit/doorbell.js +519 -0
  52. package/dist/cli/commands/cockpit/doorbell.js.map +1 -0
  53. package/dist/cli/commands/cockpit/index.d.ts +1 -0
  54. package/dist/cli/commands/cockpit/index.d.ts.map +1 -1
  55. package/dist/cli/commands/cockpit/index.js +3 -0
  56. package/dist/cli/commands/cockpit/index.js.map +1 -1
  57. package/dist/cli/commands/cockpit/mcp/event-bus-registry.d.ts +3 -2
  58. package/dist/cli/commands/cockpit/mcp/event-bus-registry.d.ts.map +1 -1
  59. package/dist/cli/commands/cockpit/mcp/event-bus-registry.js +41 -12
  60. package/dist/cli/commands/cockpit/mcp/event-bus-registry.js.map +1 -1
  61. package/dist/cli/commands/cockpit/mcp/event-bus.d.ts +6 -0
  62. package/dist/cli/commands/cockpit/mcp/event-bus.d.ts.map +1 -1
  63. package/dist/cli/commands/cockpit/mcp/event-bus.js +7 -1
  64. package/dist/cli/commands/cockpit/mcp/event-bus.js.map +1 -1
  65. package/dist/cli/commands/cockpit/mcp/schemas.d.ts +48 -0
  66. package/dist/cli/commands/cockpit/mcp/schemas.d.ts.map +1 -1
  67. package/dist/cli/commands/cockpit/mcp/schemas.js +28 -0
  68. package/dist/cli/commands/cockpit/mcp/schemas.js.map +1 -1
  69. package/dist/cli/commands/cockpit/mcp/server.d.ts.map +1 -1
  70. package/dist/cli/commands/cockpit/mcp/server.js +6 -1
  71. package/dist/cli/commands/cockpit/mcp/server.js.map +1 -1
  72. package/dist/cli/commands/cockpit/mcp/tools/cockpit_relay_clarify_answers.d.ts +45 -0
  73. package/dist/cli/commands/cockpit/mcp/tools/cockpit_relay_clarify_answers.d.ts.map +1 -0
  74. package/dist/cli/commands/cockpit/mcp/tools/cockpit_relay_clarify_answers.js +45 -0
  75. package/dist/cli/commands/cockpit/mcp/tools/cockpit_relay_clarify_answers.js.map +1 -0
  76. package/dist/cli/commands/cockpit/resume.d.ts +12 -6
  77. package/dist/cli/commands/cockpit/resume.d.ts.map +1 -1
  78. package/dist/cli/commands/cockpit/resume.js +27 -11
  79. package/dist/cli/commands/cockpit/resume.js.map +1 -1
  80. package/dist/cli/commands/cockpit/watch/diff.d.ts +1 -0
  81. package/dist/cli/commands/cockpit/watch/diff.d.ts.map +1 -1
  82. package/dist/cli/commands/cockpit/watch/diff.js.map +1 -1
  83. package/dist/cli/commands/cockpit/watch/emit.d.ts +3 -0
  84. package/dist/cli/commands/cockpit/watch/emit.d.ts.map +1 -1
  85. package/dist/cli/commands/cockpit/watch/emit.js +1 -0
  86. package/dist/cli/commands/cockpit/watch/emit.js.map +1 -1
  87. package/dist/cli/commands/cockpit/watch/poll-loop.d.ts +2 -0
  88. package/dist/cli/commands/cockpit/watch/poll-loop.d.ts.map +1 -1
  89. package/dist/cli/commands/cockpit/watch/poll-loop.js +38 -6
  90. package/dist/cli/commands/cockpit/watch/poll-loop.js.map +1 -1
  91. package/dist/cli/commands/cockpit/watch/pr-state.d.ts +15 -1
  92. package/dist/cli/commands/cockpit/watch/pr-state.d.ts.map +1 -1
  93. package/dist/cli/commands/cockpit/watch/pr-state.js +38 -0
  94. package/dist/cli/commands/cockpit/watch/pr-state.js.map +1 -1
  95. package/dist/cli/commands/cockpit/watch/snapshot.d.ts +6 -1
  96. package/dist/cli/commands/cockpit/watch/snapshot.d.ts.map +1 -1
  97. package/dist/cli/commands/cockpit/watch/snapshot.js +3 -1
  98. package/dist/cli/commands/cockpit/watch/snapshot.js.map +1 -1
  99. package/dist/cli/commands/cockpit/watch/stream-event.d.ts +3 -0
  100. package/dist/cli/commands/cockpit/watch/stream-event.d.ts.map +1 -1
  101. package/dist/cli/commands/cockpit/watch.d.ts +2 -1
  102. package/dist/cli/commands/cockpit/watch.d.ts.map +1 -1
  103. package/dist/cli/commands/cockpit/watch.js +25 -13
  104. package/dist/cli/commands/cockpit/watch.js.map +1 -1
  105. package/package.json +6 -5
@@ -0,0 +1,54 @@
1
+ const WAIT_MS = 60_000;
2
+ const COALESCE_WINDOW_MS = 0;
3
+ const MAX_BATCH_SIZE = 100;
4
+ export function lineForEvent(event) {
5
+ return `${JSON.stringify(event)}\n`;
6
+ }
7
+ export function subscribeAndEmit(bus, options) {
8
+ let stopped = false;
9
+ let resolveStop = null;
10
+ const stopSignal = new Promise((resolve) => {
11
+ resolveStop = resolve;
12
+ });
13
+ const loop = async () => {
14
+ let sinceCursor = 0;
15
+ while (!stopped) {
16
+ const waitPromise = bus.waitFor({
17
+ sinceCursor,
18
+ maxWaitMs: WAIT_MS,
19
+ coalesceWindowMs: COALESCE_WINDOW_MS,
20
+ maxBatchSize: MAX_BATCH_SIZE,
21
+ });
22
+ const result = await Promise.race([
23
+ waitPromise.then((r) => ({ kind: 'entries', r })),
24
+ stopSignal.then(() => ({ kind: 'stopped' })),
25
+ ]);
26
+ if (result.kind === 'stopped')
27
+ return;
28
+ if (stopped)
29
+ return;
30
+ for (const entry of result.r.entries) {
31
+ if (stopped)
32
+ return;
33
+ const line = lineForEvent(entry.event);
34
+ await new Promise((resolve) => {
35
+ options.stdout.write(line, () => resolve());
36
+ });
37
+ sinceCursor = entry.cursor;
38
+ options.onEmit?.(entry.event);
39
+ }
40
+ }
41
+ };
42
+ void loop();
43
+ return () => {
44
+ if (stopped)
45
+ return;
46
+ stopped = true;
47
+ if (resolveStop != null) {
48
+ const r = resolveStop;
49
+ resolveStop = null;
50
+ r();
51
+ }
52
+ };
53
+ }
54
+ //# sourceMappingURL=subscribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/doorbell/subscribe.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAAiB,EACjB,OAA6B;IAE7B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAAwB,IAAI,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC/C,WAAW,GAAG,OAAO,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;gBAC9B,WAAW;gBACX,SAAS,EAAE,OAAO;gBAClB,gBAAgB,EAAE,kBAAkB;gBACpC,YAAY,EAAE,cAAc;aAC7B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAkB,EAAE,CAAC,CAAC;aACtD,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,OAAO;oBAAE,OAAO;gBACpB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;gBACH,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,IAAI,EAAE,CAAC;IAEZ,OAAO,GAAG,EAAE;QACV,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,WAAW,CAAC;YACtB,WAAW,GAAG,IAAI,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `resolveWebhookTargets` — resolves the epic ref set into a primary-first,
3
+ * deduped `Array<{owner, repo}>` for the doorbell's webhook-config discovery
4
+ * stage. Never throws: any `resolveEpic` failure folds into `[]` + one warn.
5
+ *
6
+ * Contract: `specs/988-summary-cockpit-auto-doorbell/contracts/webhook-target-resolver.md`.
7
+ */
8
+ import { type GhWrapper } from '@generacy-ai/cockpit';
9
+ export interface ResolveWebhookTargetsInput {
10
+ epicRef: string;
11
+ gh: GhWrapper;
12
+ logger?: {
13
+ warn: (msg: string) => void;
14
+ };
15
+ }
16
+ export declare function resolveWebhookTargets(input: ResolveWebhookTargetsInput): Promise<Array<{
17
+ owner: string;
18
+ repo: string;
19
+ }>>;
20
+ //# sourceMappingURL=webhook-target-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-target-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/doorbell/webhook-target-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1C;AAuBD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA2BjD"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * `resolveWebhookTargets` — resolves the epic ref set into a primary-first,
3
+ * deduped `Array<{owner, repo}>` for the doorbell's webhook-config discovery
4
+ * stage. Never throws: any `resolveEpic` failure folds into `[]` + one warn.
5
+ *
6
+ * Contract: `specs/988-summary-cockpit-auto-doorbell/contracts/webhook-target-resolver.md`.
7
+ */
8
+ import { resolveEpic } from '@generacy-ai/cockpit';
9
+ function splitRepo(value, logger) {
10
+ const parts = value.split('/');
11
+ if (parts.length !== 2) {
12
+ logger?.warn(`cockpit doorbell: webhook-target: skipping malformed repo "${value}"`);
13
+ return null;
14
+ }
15
+ const [owner, repo] = parts;
16
+ if (owner == null || owner === '' || repo == null || repo === '') {
17
+ logger?.warn(`cockpit doorbell: webhook-target: skipping malformed repo "${value}"`);
18
+ return null;
19
+ }
20
+ return { owner, repo };
21
+ }
22
+ export async function resolveWebhookTargets(input) {
23
+ let resolved;
24
+ try {
25
+ const options = {
26
+ epicRef: input.epicRef,
27
+ gh: input.gh,
28
+ };
29
+ if (input.logger != null)
30
+ options.logger = input.logger;
31
+ resolved = await resolveEpic(options);
32
+ }
33
+ catch (err) {
34
+ const message = err instanceof Error ? err.message : String(err);
35
+ input.logger?.warn(`cockpit doorbell: webhook-target resolution failed: ${message}`);
36
+ return [];
37
+ }
38
+ const primary = resolved.epic.repo;
39
+ const ordered = [
40
+ primary,
41
+ ...resolved.repos.filter((r) => r !== primary),
42
+ ];
43
+ const out = [];
44
+ for (const value of ordered) {
45
+ const split = splitRepo(value, input.logger);
46
+ if (split != null)
47
+ out.push(split);
48
+ }
49
+ return out;
50
+ }
51
+ //# sourceMappingURL=webhook-target-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-target-resolver.js","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/doorbell/webhook-target-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAQnE,SAAS,SAAS,CAChB,KAAa,EACb,MAAwC;IAExC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI,CACV,8DAA8D,KAAK,GAAG,CACvE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC5B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjE,MAAM,EAAE,IAAI,CACV,8DAA8D,KAAK,GAAG,CACvE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAiC;IAEjC,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,MAAM,OAAO,GAAsC;YACjD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,EAAE,EAAE,KAAK,CAAC,EAAE;SACb,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACxD,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,KAAK,CAAC,MAAM,EAAE,IAAI,CAChB,uDAAuD,OAAO,EAAE,CACjE,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC,MAAM,OAAO,GAAG;QACd,OAAO;QACP,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;KAC/C,CAAC;IACF,MAAM,GAAG,GAA2C,EAAE,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `webhookToStreamEvent` — pure Q1=A mapping. Takes a normalized
3
+ * `{ githubEvent, action, body }` triple, the epic's ref-set filter, and
4
+ * returns one `CockpitStreamEvent` per matched ref (or null when the payload
5
+ * is out of scope).
6
+ *
7
+ * Contract: `specs/978-summary-generacy-cockpit/contracts/webhook-to-event-mapping.md`.
8
+ *
9
+ * Reuses `CockpitEventSchema` from `../watch/emit.ts` — does NOT extend the
10
+ * enum. `from`/`to` are best-effort null (see contract § "Emitted shape").
11
+ */
12
+ import type { CockpitEventValidated } from '../watch/emit.js';
13
+ export interface RefSetView {
14
+ epicRef: string;
15
+ epicNumber: number;
16
+ epicRepo: string;
17
+ issues: Set<string>;
18
+ prs: Set<string>;
19
+ watchedRepos: Set<string>;
20
+ }
21
+ /**
22
+ * Q1=A mapping. Returns exactly one `CockpitEventValidated` for `issues.*` and
23
+ * `pull_request.*` matches, or one per matched PR for `check_run.completed` /
24
+ * `check_suite.completed`. Callers that want single-event semantics should
25
+ * take the first element.
26
+ */
27
+ export declare function webhookToStreamEvent(githubEvent: string, action: string, body: Record<string, unknown>, refSet: RefSetView, now: () => string): CockpitEventValidated | CockpitEventValidated[] | null;
28
+ //# sourceMappingURL=webhook-to-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-to-event.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/doorbell/webhook-to-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAG9D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B;AAmHD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,MAAM,GAChB,qBAAqB,GAAG,qBAAqB,EAAE,GAAG,IAAI,CAyExD"}
@@ -0,0 +1,162 @@
1
+ import { classifyIssue } from '../shared/classify-issue.js';
2
+ function refKey(owner, repo, num) {
3
+ return `${owner}/${repo}#${num}`;
4
+ }
5
+ function repoKey(owner, repo) {
6
+ return `${owner}/${repo}`;
7
+ }
8
+ function extractRepo(body) {
9
+ const repoObj = body['repository'];
10
+ if (repoObj == null || typeof repoObj !== 'object')
11
+ return null;
12
+ const r = repoObj;
13
+ const name = r['name'];
14
+ const ownerObj = r['owner'];
15
+ if (typeof name !== 'string' || ownerObj == null || typeof ownerObj !== 'object') {
16
+ return null;
17
+ }
18
+ const login = ownerObj['login'];
19
+ if (typeof login !== 'string')
20
+ return null;
21
+ return { owner: login, repo: name };
22
+ }
23
+ function extractIssue(body) {
24
+ const issueObj = body['issue'];
25
+ if (issueObj == null || typeof issueObj !== 'object')
26
+ return null;
27
+ const i = issueObj;
28
+ const num = i['number'];
29
+ if (typeof num !== 'number')
30
+ return null;
31
+ const rawLabels = i['labels'];
32
+ const labels = [];
33
+ if (Array.isArray(rawLabels)) {
34
+ for (const l of rawLabels) {
35
+ if (l != null && typeof l === 'object') {
36
+ const lname = l['name'];
37
+ if (typeof lname === 'string')
38
+ labels.push(lname);
39
+ }
40
+ }
41
+ }
42
+ return { number: num, labels };
43
+ }
44
+ function extractPrNumber(body) {
45
+ const prObj = body['pull_request'];
46
+ if (prObj == null || typeof prObj !== 'object')
47
+ return null;
48
+ const num = prObj['number'];
49
+ return typeof num === 'number' ? num : null;
50
+ }
51
+ function extractPrMerged(body) {
52
+ const prObj = body['pull_request'];
53
+ if (prObj == null || typeof prObj !== 'object')
54
+ return null;
55
+ const merged = prObj['merged'];
56
+ return typeof merged === 'boolean' ? merged : null;
57
+ }
58
+ function extractLabelName(body) {
59
+ const labelObj = body['label'];
60
+ if (labelObj == null || typeof labelObj !== 'object')
61
+ return null;
62
+ const name = labelObj['name'];
63
+ return typeof name === 'string' ? name : null;
64
+ }
65
+ function extractCheckPrs(body, container) {
66
+ const holder = body[container];
67
+ if (holder == null || typeof holder !== 'object')
68
+ return [];
69
+ const prs = holder['pull_requests'];
70
+ if (!Array.isArray(prs))
71
+ return [];
72
+ const out = [];
73
+ for (const p of prs) {
74
+ if (p != null && typeof p === 'object') {
75
+ const num = p['number'];
76
+ if (typeof num === 'number')
77
+ out.push(num);
78
+ }
79
+ }
80
+ return out;
81
+ }
82
+ function buildEvent(event, owner, repo, kind, number, sourceLabelArg, labels, now) {
83
+ const classified = classifyIssue(labels);
84
+ const classifiedSource = classified.sourceLabel !== '' ? classified.sourceLabel : null;
85
+ return {
86
+ type: 'issue-transition',
87
+ ts: now(),
88
+ repo: `${owner}/${repo}`,
89
+ kind,
90
+ number,
91
+ from: null,
92
+ to: classified.state,
93
+ sourceLabel: classifiedSource ?? sourceLabelArg,
94
+ url: `https://github.com/${owner}/${repo}/${kind === 'pr' ? 'pull' : 'issues'}/${number}`,
95
+ event,
96
+ labels,
97
+ };
98
+ }
99
+ /**
100
+ * Q1=A mapping. Returns exactly one `CockpitEventValidated` for `issues.*` and
101
+ * `pull_request.*` matches, or one per matched PR for `check_run.completed` /
102
+ * `check_suite.completed`. Callers that want single-event semantics should
103
+ * take the first element.
104
+ */
105
+ export function webhookToStreamEvent(githubEvent, action, body, refSet, now) {
106
+ const repoInfo = extractRepo(body);
107
+ if (repoInfo == null)
108
+ return null;
109
+ const { owner, repo } = repoInfo;
110
+ if (!refSet.watchedRepos.has(repoKey(owner, repo)))
111
+ return null;
112
+ if (githubEvent === 'issues') {
113
+ const issue = extractIssue(body);
114
+ if (issue == null)
115
+ return null;
116
+ if (!refSet.issues.has(refKey(owner, repo, issue.number)))
117
+ return null;
118
+ if (action === 'labeled' || action === 'unlabeled') {
119
+ const labelName = extractLabelName(body);
120
+ if (labelName == null)
121
+ return null;
122
+ return buildEvent('label-change', owner, repo, 'issue', issue.number, labelName, issue.labels, now);
123
+ }
124
+ if (action === 'closed') {
125
+ return buildEvent('issue-closed', owner, repo, 'issue', issue.number, null, issue.labels, now);
126
+ }
127
+ return null;
128
+ }
129
+ if (githubEvent === 'pull_request') {
130
+ const prNum = extractPrNumber(body);
131
+ if (prNum == null)
132
+ return null;
133
+ if (!refSet.prs.has(refKey(owner, repo, prNum)))
134
+ return null;
135
+ if (action === 'closed') {
136
+ const merged = extractPrMerged(body);
137
+ const evName = merged === true ? 'pr-merged' : 'pr-closed';
138
+ return buildEvent(evName, owner, repo, 'pr', prNum, null, [], now);
139
+ }
140
+ return null;
141
+ }
142
+ if ((githubEvent === 'check_run' || githubEvent === 'check_suite') &&
143
+ action === 'completed') {
144
+ const container = githubEvent;
145
+ const prs = extractCheckPrs(body, container);
146
+ const out = [];
147
+ const seen = new Set();
148
+ for (const prNum of prs) {
149
+ if (seen.has(prNum))
150
+ continue;
151
+ seen.add(prNum);
152
+ if (!refSet.prs.has(refKey(owner, repo, prNum)))
153
+ continue;
154
+ out.push(buildEvent('pr-checks', owner, repo, 'pr', prNum, null, [], now));
155
+ }
156
+ if (out.length === 0)
157
+ return null;
158
+ return out;
159
+ }
160
+ return null;
161
+ }
162
+ //# sourceMappingURL=webhook-to-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-to-event.js","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/doorbell/webhook-to-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Command } from 'commander';
2
+ import { type CommandRunner, type GhWrapper, type RateLimitScheduler } from '@generacy-ai/cockpit';
3
+ import { type AcquireOptions, type Acquired } from './mcp/event-bus-registry.js';
4
+ import { discoverChannelUrl } from './doorbell/channel-discovery.js';
5
+ import { SourceSelector } from './doorbell/source-selector.js';
6
+ import { SmeeDoorbellSource } from './doorbell/smee-source.js';
7
+ export interface DoorbellOptions {
8
+ tracking?: boolean;
9
+ new?: string;
10
+ exitOnEpicComplete?: boolean;
11
+ }
12
+ export interface DoorbellDeps {
13
+ runner?: CommandRunner;
14
+ gh?: GhWrapper;
15
+ rateLimitScheduler?: RateLimitScheduler;
16
+ logger?: {
17
+ warn: (msg: string) => void;
18
+ info?: (msg: string) => void;
19
+ };
20
+ acquireBus?: (options: AcquireOptions) => Promise<Acquired>;
21
+ abortSignal?: AbortSignal;
22
+ stdout?: {
23
+ write(chunk: string, cb?: () => void): boolean | void;
24
+ };
25
+ exit?: (code: number) => void;
26
+ /** Test seam: override channel discovery. */
27
+ discoverChannel?: typeof discoverChannelUrl;
28
+ /** Test seam: override the smee source constructor. */
29
+ smeeSourceFactory?: (opts: ConstructorParameters<typeof SmeeDoorbellSource>[0]) => SmeeDoorbellSource;
30
+ /** Test seam: override the source selector constructor. */
31
+ sourceSelectorFactory?: (opts: ConstructorParameters<typeof SourceSelector>[0]) => SourceSelector;
32
+ /** Test seam: env passed to `discoverChannelUrl`. Defaults to `process.env`. */
33
+ env?: NodeJS.ProcessEnv;
34
+ /** Test seam: filesystem passed to `discoverChannelUrl`. */
35
+ fs?: Parameters<typeof discoverChannelUrl>[0]['fs'];
36
+ /** Test seam: channel-file path override. */
37
+ channelFilePath?: string;
38
+ }
39
+ export type Form = {
40
+ kind: 'form-1';
41
+ ref: string;
42
+ } | {
43
+ kind: 'form-2';
44
+ ref: string;
45
+ } | {
46
+ kind: 'form-3';
47
+ title: string;
48
+ };
49
+ export type Rejection = {
50
+ kind: 'missing-positional';
51
+ } | {
52
+ kind: 'conflicting-flags';
53
+ reason: 'positional-with-new' | 'tracking-with-new';
54
+ };
55
+ export declare function classifyForm(positional: string | undefined, options: DoorbellOptions): Form | Rejection;
56
+ export declare function runDoorbell(positional: string | undefined, options: DoorbellOptions, deps?: DoorbellDeps): Promise<number>;
57
+ export declare function doorbellCommand(): Command;
58
+ //# sourceMappingURL=doorbell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doorbell.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/doorbell.ts"],"names":[],"mappings":"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"}