@fdcn/sourcefed 0.2.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 (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/dist/chunk-B7T6IZYS.js +5155 -0
  4. package/dist/chunk-MLKGABMK.js +9 -0
  5. package/dist/chunk-NGJ6F5ST.js +766 -0
  6. package/dist/cli.js +30491 -0
  7. package/dist/core-storage.js +13 -0
  8. package/dist/core.js +643 -0
  9. package/dist/daemon.js +5190 -0
  10. package/dist/data/core/SKILL.md +71 -0
  11. package/dist/data/core/references/commands.md +75 -0
  12. package/dist/data/sourcefed/SKILL.md +31 -0
  13. package/dist/guidance.md +71 -0
  14. package/dist/mcp.js +4800 -0
  15. package/dist/opencode.js +12646 -0
  16. package/dist/pi.js +249 -0
  17. package/dist/tui-compiled.mjs +4096 -0
  18. package/dist.dts/adapters/opencode/bridge.d.ts +20 -0
  19. package/dist.dts/adapters/opencode/index.d.ts +3 -0
  20. package/dist.dts/adapters/opencode/tool-result.d.ts +1 -0
  21. package/dist.dts/adapters/opencode/tools/monitor_create.d.ts +3 -0
  22. package/dist.dts/adapters/opencode/tools/monitor_list.d.ts +3 -0
  23. package/dist.dts/adapters/opencode/tools/monitor_start.d.ts +3 -0
  24. package/dist.dts/adapters/opencode/tools/monitor_status.d.ts +3 -0
  25. package/dist.dts/adapters/opencode/tools/monitor_stop.d.ts +3 -0
  26. package/dist.dts/adapters/opencode/tui/plugin.d.ts +3 -0
  27. package/dist.dts/adapters/opencode/tui/sidebar.d.ts +13 -0
  28. package/dist.dts/adapters/opencode/tui.d.ts +7 -0
  29. package/dist.dts/adapters/pi/src/dialog.d.ts +12 -0
  30. package/dist.dts/adapters/pi/src/index.d.ts +2 -0
  31. package/dist.dts/index.d.ts +1 -0
  32. package/dist.dts/packages/cli/src/index.d.ts +2 -0
  33. package/dist.dts/packages/cli/src/skills/command.d.ts +1 -0
  34. package/dist.dts/packages/cli/src/skills/discovery.d.ts +7 -0
  35. package/dist.dts/packages/cli/src/skills/frontmatter.d.ts +5 -0
  36. package/dist.dts/packages/cli/src/skills/index.d.ts +1 -0
  37. package/dist.dts/packages/core/src/events.d.ts +24 -0
  38. package/dist.dts/packages/core/src/events.test.d.ts +1 -0
  39. package/dist.dts/packages/core/src/index.d.ts +9 -0
  40. package/dist.dts/packages/core/src/monitors/index.d.ts +6 -0
  41. package/dist.dts/packages/core/src/monitors/monitor.d.ts +26 -0
  42. package/dist.dts/packages/core/src/monitors/poll/index.d.ts +1 -0
  43. package/dist.dts/packages/core/src/monitors/poll/monitor.d.ts +12 -0
  44. package/dist.dts/packages/core/src/monitors/poll/types/index.d.ts +2 -0
  45. package/dist.dts/packages/core/src/monitors/poll/types/poll-monitor-options.d.ts +6 -0
  46. package/dist.dts/packages/core/src/monitors/poll/types/poll-runner.d.ts +3 -0
  47. package/dist.dts/packages/core/src/monitors/poll/types/routed-event-cursor.d.ts +2 -0
  48. package/dist.dts/packages/core/src/monitors/poll/utils/event-delivery-id.d.ts +2 -0
  49. package/dist.dts/packages/core/src/monitors/poll/utils/tick.d.ts +2 -0
  50. package/dist.dts/packages/core/src/monitors/schema.d.ts +37 -0
  51. package/dist.dts/packages/core/src/monitors/service.d.ts +35 -0
  52. package/dist.dts/packages/core/src/monitors/service.test.d.ts +1 -0
  53. package/dist.dts/packages/core/src/monitors/transport.test.d.ts +1 -0
  54. package/dist.dts/packages/core/src/monitors/types/index.d.ts +2 -0
  55. package/dist.dts/packages/core/src/monitors/types/monitor-record.d.ts +3 -0
  56. package/dist.dts/packages/core/src/monitors/types/monitor-registry.d.ts +3 -0
  57. package/dist.dts/packages/core/src/monitors/utils/monitor-identity.d.ts +5 -0
  58. package/dist.dts/packages/core/src/monitors/utils/monitor-identity.test.d.ts +1 -0
  59. package/dist.dts/packages/core/src/monitors/webhook/index.d.ts +1 -0
  60. package/dist.dts/packages/core/src/monitors/webhook/monitor.d.ts +24 -0
  61. package/dist.dts/packages/core/src/monitors/webhook/types/index.d.ts +3 -0
  62. package/dist.dts/packages/core/src/monitors/webhook/types/pending-webhook-event.d.ts +19 -0
  63. package/dist.dts/packages/core/src/monitors/webhook/types/webhook-monitor-options.d.ts +13 -0
  64. package/dist.dts/packages/core/src/monitors/webhook/utils/constants.d.ts +2 -0
  65. package/dist.dts/packages/core/src/monitors/webhook/utils/deliver-webhook.d.ts +3 -0
  66. package/dist.dts/packages/core/src/monitors/webhook/utils/handle-webhook.d.ts +2 -0
  67. package/dist.dts/packages/core/src/monitors/webhook/utils/handle-webhook.test.d.ts +1 -0
  68. package/dist.dts/packages/core/src/monitors/webhook/utils/heartbeat-webhooks.d.ts +3 -0
  69. package/dist.dts/packages/core/src/runtime.d.ts +23 -0
  70. package/dist.dts/packages/core/src/runtime.test.d.ts +1 -0
  71. package/dist.dts/packages/core/src/sources/index.d.ts +1 -0
  72. package/dist.dts/packages/core/src/sources/schema.d.ts +4 -0
  73. package/dist.dts/packages/core/src/sources/types/index.d.ts +3 -0
  74. package/dist.dts/packages/core/src/sources/types/monitor-source.d.ts +3 -0
  75. package/dist.dts/packages/core/src/sources/types/source-input.d.ts +4 -0
  76. package/dist.dts/packages/core/src/sources/types/source-registry.d.ts +2 -0
  77. package/dist.dts/packages/core/src/storage/in-memory-monitor-store.d.ts +8 -0
  78. package/dist.dts/packages/core/src/storage/index.d.ts +2 -0
  79. package/dist.dts/packages/core/src/storage/json.d.ts +30 -0
  80. package/dist.dts/packages/core/src/storage/json.test.d.ts +1 -0
  81. package/dist.dts/packages/core/src/types/delivery.d.ts +1 -0
  82. package/dist.dts/packages/core/src/types/event-sink.d.ts +12 -0
  83. package/dist.dts/packages/core/src/types/index.d.ts +11 -0
  84. package/dist.dts/packages/core/src/types/monitor-context.d.ts +10 -0
  85. package/dist.dts/packages/core/src/types/monitor-create-input.d.ts +8 -0
  86. package/dist.dts/packages/core/src/types/monitor-event-queue.d.ts +18 -0
  87. package/dist.dts/packages/core/src/types/monitor-event.d.ts +10 -0
  88. package/dist.dts/packages/core/src/types/monitor-options.d.ts +7 -0
  89. package/dist.dts/packages/core/src/types/monitor-store.d.ts +6 -0
  90. package/dist.dts/packages/core/src/types/monitor-target.d.ts +4 -0
  91. package/dist.dts/packages/core/src/types/source-event.d.ts +9 -0
  92. package/dist.dts/packages/core/src/types/source-poll-result.d.ts +6 -0
  93. package/dist.dts/packages/core/src/utils/event-to-text.d.ts +2 -0
  94. package/dist.dts/packages/core/src/utils/to-monitor-event.d.ts +3 -0
  95. package/dist.dts/packages/daemon/src/client.d.ts +2 -0
  96. package/dist.dts/packages/daemon/src/client.test.d.ts +1 -0
  97. package/dist.dts/packages/daemon/src/daemon.d.ts +36 -0
  98. package/dist.dts/packages/daemon/src/daemon.test.d.ts +1 -0
  99. package/dist.dts/packages/daemon/src/dispatch.d.ts +2 -0
  100. package/dist.dts/packages/daemon/src/http.d.ts +5 -0
  101. package/dist.dts/packages/daemon/src/index.d.ts +8 -0
  102. package/dist.dts/packages/daemon/src/registry.d.ts +14 -0
  103. package/dist.dts/packages/daemon/src/types/client.d.ts +21 -0
  104. package/dist.dts/packages/daemon/src/types/daemon.d.ts +58 -0
  105. package/dist.dts/packages/daemon/src/types/index.d.ts +3 -0
  106. package/dist.dts/packages/daemon/src/types/protocol.d.ts +21 -0
  107. package/dist.dts/packages/daemon/src/utils/env.d.ts +1 -0
  108. package/dist.dts/packages/daemon/src/utils/http-server.d.ts +10 -0
  109. package/dist.dts/packages/daemon/src/utils/index.d.ts +6 -0
  110. package/dist.dts/packages/daemon/src/utils/request-router.d.ts +11 -0
  111. package/dist.dts/packages/daemon/src/utils/sink.d.ts +13 -0
  112. package/dist.dts/packages/daemon/src/utils/spawn.d.ts +19 -0
  113. package/dist.dts/packages/daemon/src/utils/target.d.ts +4 -0
  114. package/dist.dts/packages/mcp/src/index.d.ts +2 -0
  115. package/dist.dts/packages/mcp/src/server.d.ts +14 -0
  116. package/dist.dts/packages/mcp/src/server.test.d.ts +1 -0
  117. package/dist.dts/packages/mcp/src/uris.d.ts +3 -0
  118. package/dist.dts/packages/sourcefed/src/server.d.ts +7 -0
  119. package/dist.dts/providers/github/src/api/client.d.ts +3 -0
  120. package/dist.dts/providers/github/src/api/comments.d.ts +1 -0
  121. package/dist.dts/providers/github/src/api/github-api.test.d.ts +1 -0
  122. package/dist.dts/providers/github/src/api/index.d.ts +4 -0
  123. package/dist.dts/providers/github/src/api/logs.d.ts +5 -0
  124. package/dist.dts/providers/github/src/api/pr.d.ts +8 -0
  125. package/dist.dts/providers/github/src/github.test.d.ts +1 -0
  126. package/dist.dts/providers/github/src/index.d.ts +2 -0
  127. package/dist.dts/providers/github/src/monitor.d.ts +15 -0
  128. package/dist.dts/providers/github/src/poll/index.d.ts +2 -0
  129. package/dist.dts/providers/github/src/poll/monitor.d.ts +3 -0
  130. package/dist.dts/providers/github/src/poll/utils/append-comments.d.ts +2 -0
  131. package/dist.dts/providers/github/src/poll/utils/append-github-ci-event.d.ts +2 -0
  132. package/dist.dts/providers/github/src/poll/utils/append-github-conflict-event.d.ts +2 -0
  133. package/dist.dts/providers/github/src/poll/utils/append-github-reviews.d.ts +2 -0
  134. package/dist.dts/providers/github/src/poll/utils/append-github-state-event.d.ts +2 -0
  135. package/dist.dts/providers/github/src/poll/utils/ci-failure-detail.d.ts +1 -0
  136. package/dist.dts/providers/github/src/poll/utils/clean-ci-log.d.ts +1 -0
  137. package/dist.dts/providers/github/src/poll/utils/confirm-still-failing.d.ts +1 -0
  138. package/dist.dts/providers/github/src/poll/utils/empty-cursor.d.ts +2 -0
  139. package/dist.dts/providers/github/src/poll/utils/failure-run-ids.d.ts +1 -0
  140. package/dist.dts/providers/github/src/poll/utils/failure-run-log.d.ts +1 -0
  141. package/dist.dts/providers/github/src/poll/utils/format-failed-check.d.ts +1 -0
  142. package/dist.dts/providers/github/src/poll/utils/index.d.ts +1 -0
  143. package/dist.dts/providers/github/src/poll/utils/poll-github.d.ts +6 -0
  144. package/dist.dts/providers/github/src/poll/utils/poll-helpers.test.d.ts +1 -0
  145. package/dist.dts/providers/github/src/schema.d.ts +17 -0
  146. package/dist.dts/providers/github/src/types/cursor.d.ts +11 -0
  147. package/dist.dts/providers/github/src/types/event.d.ts +11 -0
  148. package/dist.dts/providers/github/src/types/index.d.ts +3 -0
  149. package/dist.dts/providers/github/src/types/source-record.d.ts +5 -0
  150. package/dist.dts/providers/github/src/webhook/index.d.ts +3 -0
  151. package/dist.dts/providers/github/src/webhook/monitor.d.ts +3 -0
  152. package/dist.dts/providers/github/src/webhook/types/context.d.ts +7 -0
  153. package/dist.dts/providers/github/src/webhook/types/event-handler.d.ts +3 -0
  154. package/dist.dts/providers/github/src/webhook/types/event-shape.d.ts +7 -0
  155. package/dist.dts/providers/github/src/webhook/types/index.d.ts +1 -0
  156. package/dist.dts/providers/github/src/webhook/utils/fallback-github-event.d.ts +3 -0
  157. package/dist.dts/providers/github/src/webhook/utils/github-event-handlers.d.ts +2 -0
  158. package/dist.dts/providers/github/src/webhook/utils/index.d.ts +2 -0
  159. package/dist.dts/providers/github/src/webhook/utils/parse-check-run.d.ts +3 -0
  160. package/dist.dts/providers/github/src/webhook/utils/parse-check-suite.d.ts +3 -0
  161. package/dist.dts/providers/github/src/webhook/utils/parse-github-comment.d.ts +3 -0
  162. package/dist.dts/providers/github/src/webhook/utils/parse-github-webhook.d.ts +2 -0
  163. package/dist.dts/providers/github/src/webhook/utils/parse-pull-request-review.d.ts +3 -0
  164. package/dist.dts/providers/github/src/webhook/utils/parse-pull-request.d.ts +3 -0
  165. package/dist.dts/providers/github/src/webhook/utils/pull-request-number.d.ts +1 -0
  166. package/dist.dts/providers/github/src/webhook/utils/update-github-cursor.d.ts +3 -0
  167. package/dist.dts/providers/github/src/webhook/utils/verify-github-webhook.d.ts +1 -0
  168. package/dist.dts/providers/github/src/webhook/utils/verify-hmac.d.ts +1 -0
  169. package/dist.dts/providers/jira/src/index.d.ts +2 -0
  170. package/dist.dts/providers/jira/src/monitor.d.ts +14 -0
  171. package/dist.dts/providers/jira/src/poll/index.d.ts +2 -0
  172. package/dist.dts/providers/jira/src/poll/monitor.d.ts +3 -0
  173. package/dist.dts/providers/jira/src/poll/utils/adf-text.d.ts +1 -0
  174. package/dist.dts/providers/jira/src/poll/utils/append-jira-changelog.d.ts +2 -0
  175. package/dist.dts/providers/jira/src/poll/utils/append-jira-comments.d.ts +2 -0
  176. package/dist.dts/providers/jira/src/poll/utils/append-jira-description.d.ts +2 -0
  177. package/dist.dts/providers/jira/src/poll/utils/empty-cursor.d.ts +2 -0
  178. package/dist.dts/providers/jira/src/poll/utils/format-jira-changelog-item.d.ts +1 -0
  179. package/dist.dts/providers/jira/src/poll/utils/index.d.ts +1 -0
  180. package/dist.dts/providers/jira/src/poll/utils/is-terminal-status.d.ts +1 -0
  181. package/dist.dts/providers/jira/src/poll/utils/jira-auth.d.ts +1 -0
  182. package/dist.dts/providers/jira/src/poll/utils/jira-change-value.d.ts +1 -0
  183. package/dist.dts/providers/jira/src/poll/utils/jira-changelog-event.d.ts +2 -0
  184. package/dist.dts/providers/jira/src/poll/utils/jira-fetch.d.ts +1 -0
  185. package/dist.dts/providers/jira/src/poll/utils/meaningful-changelog-items.d.ts +1 -0
  186. package/dist.dts/providers/jira/src/poll/utils/poll-helpers.test.d.ts +1 -0
  187. package/dist.dts/providers/jira/src/poll/utils/poll-jira.d.ts +6 -0
  188. package/dist.dts/providers/jira/src/schema.d.ts +10 -0
  189. package/dist.dts/providers/jira/src/types/cursor.d.ts +5 -0
  190. package/dist.dts/providers/jira/src/types/event.d.ts +11 -0
  191. package/dist.dts/providers/jira/src/types/index.d.ts +3 -0
  192. package/dist.dts/providers/jira/src/types/source-record.d.ts +4 -0
  193. package/dist.dts/providers/slack/src/index.d.ts +2 -0
  194. package/dist.dts/providers/slack/src/monitor.d.ts +15 -0
  195. package/dist.dts/providers/slack/src/poll/index.d.ts +2 -0
  196. package/dist.dts/providers/slack/src/poll/monitor.d.ts +3 -0
  197. package/dist.dts/providers/slack/src/poll/utils/index.d.ts +2 -0
  198. package/dist.dts/providers/slack/src/poll/utils/parse-slack-read-result.d.ts +5 -0
  199. package/dist.dts/providers/slack/src/poll/utils/poll-slack.d.ts +6 -0
  200. package/dist.dts/providers/slack/src/poll/utils/slack-api.d.ts +4 -0
  201. package/dist.dts/providers/slack/src/schema.d.ts +11 -0
  202. package/dist.dts/providers/slack/src/slack.test.d.ts +1 -0
  203. package/dist.dts/providers/slack/src/types/cursor.d.ts +5 -0
  204. package/dist.dts/providers/slack/src/types/event.d.ts +8 -0
  205. package/dist.dts/providers/slack/src/types/index.d.ts +4 -0
  206. package/dist.dts/providers/slack/src/types/message.d.ts +6 -0
  207. package/dist.dts/providers/slack/src/types/read-result.d.ts +10 -0
  208. package/dist.dts/providers/slack/src/types/source-record.d.ts +5 -0
  209. package/dist.dts/providers/slack/src/utils/index.d.ts +2 -0
  210. package/dist.dts/providers/slack/src/utils/message-at.d.ts +1 -0
  211. package/dist.dts/providers/slack/src/utils/message-timestamp.d.ts +1 -0
  212. package/dist.dts/providers/slack/src/webhook/index.d.ts +2 -0
  213. package/dist.dts/providers/slack/src/webhook/monitor.d.ts +3 -0
  214. package/dist.dts/providers/slack/src/webhook/utils/index.d.ts +3 -0
  215. package/dist.dts/providers/slack/src/webhook/utils/parse-slack-webhook.d.ts +2 -0
  216. package/dist.dts/providers/slack/src/webhook/utils/slack-signature.d.ts +1 -0
  217. package/dist.dts/providers/slack/src/webhook/utils/update-slack-cursor.d.ts +3 -0
  218. package/dist.dts/providers/slack/src/webhook/utils/valid-slack-signature.d.ts +1 -0
  219. package/dist.dts/tui.d.ts +1 -0
  220. package/package.json +68 -0
@@ -0,0 +1,18 @@
1
+ import type { MonitorEvent } from "./monitor-event.js";
2
+ import type { MonitorTarget } from "./monitor-target.js";
3
+ import type { MonitorRecord } from "../monitors/types/monitor-record.js";
4
+ export type QueuedMonitorEvent = {
5
+ id: string;
6
+ monitorID: string;
7
+ target: MonitorTarget;
8
+ event: MonitorEvent;
9
+ queuedAt: string;
10
+ };
11
+ export interface MonitorEventQueue {
12
+ enqueue(input: {
13
+ monitor: MonitorRecord;
14
+ event: MonitorEvent;
15
+ }): Promise<QueuedMonitorEvent>;
16
+ read(target: MonitorTarget): Promise<QueuedMonitorEvent[]>;
17
+ acknowledge(target: MonitorTarget, eventIDs: string[]): Promise<void>;
18
+ }
@@ -0,0 +1,10 @@
1
+ export type MonitorEvent = {
2
+ source: unknown;
3
+ kind: string;
4
+ id?: string;
5
+ at: string;
6
+ summary: string;
7
+ body?: string;
8
+ actionable: boolean;
9
+ terminal?: boolean;
10
+ };
@@ -0,0 +1,7 @@
1
+ import type * as v from "valibot";
2
+ import type { MonitorSource } from "#sourcefed/sources";
3
+ export type MonitorSchema<TSource extends MonitorSource> = v.BaseSchema<unknown, TSource, v.BaseIssue<unknown>>;
4
+ export type MonitorOptions<TSource extends MonitorSource> = {
5
+ type: TSource["type"];
6
+ schema: MonitorSchema<TSource>;
7
+ };
@@ -0,0 +1,6 @@
1
+ import type { MonitorRegistry } from "../monitors/types/monitor-registry.js";
2
+ export interface MonitorStore {
3
+ load(): Promise<MonitorRegistry>;
4
+ save(registry: MonitorRegistry): Promise<void>;
5
+ acquireExclusive?(): Promise<() => Promise<void>>;
6
+ }
@@ -0,0 +1,4 @@
1
+ export type MonitorTarget = {
2
+ kind: string;
3
+ id: string;
4
+ };
@@ -0,0 +1,9 @@
1
+ export type SourceEvent = {
2
+ kind: string;
3
+ id?: string;
4
+ at: string;
5
+ summary: string;
6
+ body?: string;
7
+ actionable: boolean;
8
+ terminal?: boolean;
9
+ };
@@ -0,0 +1,6 @@
1
+ import type { MonitorEvent } from "./monitor-event.js";
2
+ export type SourcePollResult = {
3
+ cursor: unknown;
4
+ events: MonitorEvent[];
5
+ terminal: boolean;
6
+ };
@@ -0,0 +1,2 @@
1
+ import type { MonitorEvent } from "#sourcefed/types";
2
+ export declare function eventToText(event: MonitorEvent): string;
@@ -0,0 +1,3 @@
1
+ import type { MonitorEvent, SourceEvent } from "#sourcefed/types";
2
+ import type { MonitorSource } from "#sourcefed/sources";
3
+ export declare function toMonitorEvent(event: SourceEvent, source: MonitorSource): MonitorEvent;
@@ -0,0 +1,2 @@
1
+ import type { DaemonClient, DaemonClientOptions } from "./types";
2
+ export declare function connectDaemonClient(options: DaemonClientOptions): Promise<DaemonClient>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ import { MonitorRuntime, type MonitorRecord, type MonitorTarget, type QueuedMonitorEvent } from "@fdcn/sourcefed/core";
2
+ import type { DaemonCreateInput, DaemonResult, LogEntryView, MonitorView, SourcefedDaemonOptions } from "./types";
3
+ export declare class SourcefedDaemon {
4
+ readonly runtime: MonitorRuntime;
5
+ private readonly store;
6
+ private readonly queue;
7
+ private readonly listeners;
8
+ private readonly observers;
9
+ private readonly received;
10
+ private readonly emitChains;
11
+ private readonly deliveryLog;
12
+ private releaseExclusive?;
13
+ private started;
14
+ constructor(options?: SourcefedDaemonOptions);
15
+ get service(): import("@fdcn/sourcefed/core").MonitorService;
16
+ get sourceTypes(): readonly string[];
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ webhook(request: Request): Promise<Response>;
20
+ createMonitor(target: MonitorTarget, input: DaemonCreateInput): Promise<DaemonResult>;
21
+ listMonitors(target: MonitorTarget): Promise<DaemonResult>;
22
+ getMonitor(target: MonitorTarget, id: string): Promise<DaemonResult>;
23
+ stopMonitor(target: MonitorTarget, id: string): Promise<DaemonResult>;
24
+ startMonitor(target: MonitorTarget, id: string): Promise<DaemonResult>;
25
+ removeMonitor(target: MonitorTarget, id: string): Promise<DaemonResult>;
26
+ readEvents(target: MonitorTarget): Promise<QueuedMonitorEvent[]>;
27
+ readLogs(target: MonitorTarget): Promise<LogEntryView[]>;
28
+ acknowledgeEvents(target: MonitorTarget, eventIDs: string[]): Promise<DaemonResult>;
29
+ subscribe(target: MonitorTarget, onEvents: (events: QueuedMonitorEvent[]) => void): () => void;
30
+ observe(onEvent: (target: MonitorTarget) => void): () => void;
31
+ private appendLog;
32
+ private emit;
33
+ private deliver;
34
+ }
35
+ export declare function monitorView(monitor: MonitorRecord): MonitorView;
36
+ export declare function logEntryView(queued: QueuedMonitorEvent): LogEntryView;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { SourcefedDaemon } from "./daemon.js";
2
+ export declare function dispatchDaemonRequest(daemon: SourcefedDaemon, method: string, params: Record<string, unknown>): Promise<unknown>;
@@ -0,0 +1,5 @@
1
+ import type { SourcefedDaemon } from "./daemon.js";
2
+ export type DaemonHttpOptions = {
3
+ token?: string;
4
+ };
5
+ export declare function handleDaemonHttpRequest(daemon: SourcefedDaemon, request: Request, options?: DaemonHttpOptions): Promise<Response>;
@@ -0,0 +1,8 @@
1
+ export { SourcefedDaemon, monitorView } from "./daemon.js";
2
+ export { SOURCE_TYPES } from "./registry.js";
3
+ export { connectDaemonClient } from "./client.js";
4
+ export { defaultDaemonUrl } from "./utils";
5
+ export { dispatchDaemonRequest } from "./dispatch.js";
6
+ export { handleDaemonHttpRequest } from "./http.js";
7
+ export { daemonCommand, daemonEnvironment, DEFAULT_DAEMON_URL, decodeTarget, encodeTarget, serveHttp, spawnLocalDaemon, type HttpServer, type HttpServerOptions } from "./utils";
8
+ export type { DaemonClient, DaemonClientOptions, DaemonCreateInput, DaemonEventFrame, DaemonFrame, DaemonRequest, DaemonResponse, DaemonResult, LogEntryView, MonitorView, SourcefedDaemonOptions, SpawnDaemonResult } from "./types";
@@ -0,0 +1,14 @@
1
+ import type { Monitor, MonitorCreateInput, MonitorSource, SourceInput } from "@fdcn/sourcefed/core";
2
+ import { GithubMonitor } from "@fdcn/sourcefed/provider-github";
3
+ import { JiraMonitor } from "@fdcn/sourcefed/provider-jira";
4
+ import { SlackMonitor } from "@fdcn/sourcefed/provider-slack";
5
+ export declare const SOURCE_MAP: {
6
+ jira: JiraMonitor;
7
+ github: GithubMonitor;
8
+ slack: SlackMonitor;
9
+ };
10
+ export declare const SOURCE_TYPES: [string, ...string[]];
11
+ export declare function sourceDefinition(source: MonitorSource): Monitor<any>;
12
+ export declare function isSource(input: SourceInput): input is MonitorSource;
13
+ export declare function sourceForInput(type: MonitorSource["type"], input: MonitorCreateInput): SourceInput;
14
+ export declare function sourceForWebhookPath(pathname: string): Monitor<any> | undefined;
@@ -0,0 +1,21 @@
1
+ import type { ChildProcess } from "node:child_process";
2
+ import type { MonitorTarget, QueuedMonitorEvent } from "@fdcn/sourcefed/core";
3
+ export type DaemonClientOptions = {
4
+ name: string;
5
+ url?: string;
6
+ token?: string;
7
+ command?: string;
8
+ args?: string[];
9
+ env?: Record<string, string>;
10
+ };
11
+ export interface DaemonClient {
12
+ request(method: string, params?: Record<string, unknown>): Promise<unknown>;
13
+ subscribe(target: MonitorTarget, onEvents: (events: QueuedMonitorEvent[]) => Promise<void>): Promise<{
14
+ close(): Promise<void>;
15
+ }>;
16
+ close(): Promise<void>;
17
+ }
18
+ export type SpawnDaemonResult = {
19
+ url: string;
20
+ proc?: ChildProcess;
21
+ };
@@ -0,0 +1,58 @@
1
+ import type { MonitorEventQueue, MonitorRecord, MonitorStore, QueuedMonitorEvent } from "@fdcn/sourcefed/core";
2
+ export type DaemonCreateInput = {
3
+ name: string;
4
+ sourceType: string;
5
+ issueKey?: string;
6
+ repo?: string;
7
+ prNumber?: number;
8
+ channelId?: string;
9
+ threadTs?: string;
10
+ threadUrl?: string;
11
+ pollIntervalSec?: number;
12
+ };
13
+ export type SourcefedDaemonOptions = {
14
+ store?: MonitorStore;
15
+ eventQueue?: MonitorEventQueue;
16
+ stateDir?: string;
17
+ pollLoopSec?: number;
18
+ };
19
+ export type MonitorView = {
20
+ id: string;
21
+ name: string;
22
+ source: MonitorRecord["source"];
23
+ target: MonitorRecord["target"];
24
+ delivery: MonitorRecord["delivery"];
25
+ pollIntervalSec: number;
26
+ enabled: boolean;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ icon: string;
30
+ label: string;
31
+ detail: string;
32
+ describe: string;
33
+ unresponsive: boolean;
34
+ };
35
+ export type LogEntryView = {
36
+ id: string;
37
+ monitorID: string;
38
+ at: string;
39
+ kind: string;
40
+ summary: string;
41
+ body?: string;
42
+ actionable: boolean;
43
+ icon: string;
44
+ describe: string;
45
+ };
46
+ export type DaemonResult = {
47
+ ok: true;
48
+ created?: boolean;
49
+ monitor?: MonitorView;
50
+ monitors?: MonitorView[];
51
+ events?: QueuedMonitorEvent[];
52
+ logs?: LogEntryView[];
53
+ acknowledged?: string[];
54
+ removed?: boolean;
55
+ } | {
56
+ ok: false;
57
+ error: string;
58
+ };
@@ -0,0 +1,3 @@
1
+ export type { DaemonCreateInput, DaemonResult, LogEntryView, MonitorView, SourcefedDaemonOptions } from "./daemon.js";
2
+ export type { DaemonClient, DaemonClientOptions, SpawnDaemonResult } from "./client.js";
3
+ export type { DaemonEventFrame, DaemonFrame, DaemonRequest, DaemonResponse } from "./protocol.js";
@@ -0,0 +1,21 @@
1
+ import type { MonitorTarget, QueuedMonitorEvent } from "@fdcn/sourcefed/core";
2
+ export type DaemonRequest = {
3
+ id?: number;
4
+ method: string;
5
+ params?: Record<string, unknown>;
6
+ };
7
+ export type DaemonResponse = {
8
+ id?: number;
9
+ result?: unknown;
10
+ error?: string;
11
+ };
12
+ export type DaemonEventFrame = {
13
+ type: "event";
14
+ target: MonitorTarget;
15
+ events: QueuedMonitorEvent[];
16
+ };
17
+ export type DaemonFrame = DaemonResponse | DaemonEventFrame | {
18
+ type: "subscribed";
19
+ target: MonitorTarget;
20
+ };
21
+ export declare function parseDaemonFrame(line: string): DaemonFrame | undefined;
@@ -0,0 +1 @@
1
+ export declare function daemonEnvironment(host?: string): Record<string, string>;
@@ -0,0 +1,10 @@
1
+ export type HttpServerOptions = {
2
+ hostname: string;
3
+ port: number;
4
+ handler: (request: Request) => Promise<Response> | Response;
5
+ };
6
+ export type HttpServer = {
7
+ port: number;
8
+ stop(): Promise<void>;
9
+ };
10
+ export declare function serveHttp(options: HttpServerOptions): Promise<HttpServer>;
@@ -0,0 +1,6 @@
1
+ export { daemonEnvironment } from "./env.js";
2
+ export { serveHttp, type HttpServer, type HttpServerOptions } from "./http-server.js";
3
+ export { RequestRouter } from "./request-router.js";
4
+ export { DEFAULT_DAEMON_URL, daemonCommand, defaultDaemonUrl, sleep, spawnLocalDaemon, withTimeout } from "./spawn.js";
5
+ export { NotifyingEventSink } from "./sink.js";
6
+ export { decodeTarget, encodeTarget, targetKey } from "./target.js";
@@ -0,0 +1,11 @@
1
+ export declare class RequestRouter {
2
+ private readonly pending;
3
+ private cursor;
4
+ nextID(): number;
5
+ register(id: number): Promise<unknown>;
6
+ settle(id: number, frame: {
7
+ result?: unknown;
8
+ error?: string;
9
+ }): void;
10
+ rejectAll(error: Error): void;
11
+ }
@@ -0,0 +1,13 @@
1
+ import type { MonitorEventQueue, MonitorEventSink, MonitorRecord, MonitorTarget } from "@fdcn/sourcefed/core";
2
+ export declare class NotifyingEventSink implements MonitorEventSink {
3
+ private readonly queue;
4
+ private readonly notify;
5
+ constructor(queue: MonitorEventQueue, notify: (target: MonitorTarget) => void);
6
+ deliver(input: {
7
+ monitor: MonitorRecord;
8
+ event: import("@fdcn/sourcefed/core").MonitorEvent;
9
+ }): Promise<{
10
+ ok: boolean;
11
+ error?: string;
12
+ }>;
13
+ }
@@ -0,0 +1,19 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export declare const DEFAULT_DAEMON_URL = "http://127.0.0.1:18787";
3
+ export declare function defaultDaemonUrl(): string;
4
+ export declare function daemonCommand(cliEntryPath: string): {
5
+ command: string;
6
+ args: string[];
7
+ };
8
+ export declare function spawnLocalDaemon(options: {
9
+ command: string;
10
+ args: string[];
11
+ env?: Record<string, string>;
12
+ port?: number;
13
+ timeoutMs?: number;
14
+ }): Promise<{
15
+ url: string;
16
+ proc?: ChildProcess;
17
+ }>;
18
+ export declare function sleep(ms: number): Promise<void>;
19
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number, message: string): Promise<T>;
@@ -0,0 +1,4 @@
1
+ import type { MonitorTarget } from "@fdcn/sourcefed/core";
2
+ export declare function encodeTarget(target: MonitorTarget): string;
3
+ export declare function decodeTarget(value: string): MonitorTarget | undefined;
4
+ export declare function targetKey(target: MonitorTarget): string;
@@ -0,0 +1,2 @@
1
+ export { createSourcefedMcp, createSourcefedStdio, type SourcefedMcp, type SourcefedStdio } from "./server.js";
2
+ export { decodeTarget, encodeTarget, eventResourceUri } from "./uris.js";
@@ -0,0 +1,14 @@
1
+ import { createMcpHandler, McpServer } from "@modelcontextprotocol/server";
2
+ import type { SourcefedDaemon } from "@fdcn/sourcefed/daemon";
3
+ export type SourcefedMcp = {
4
+ runtime: SourcefedDaemon["runtime"];
5
+ handler: ReturnType<typeof createMcpHandler>;
6
+ close(): void;
7
+ };
8
+ export type SourcefedStdio = {
9
+ runtime: SourcefedDaemon["runtime"];
10
+ factory: () => McpServer;
11
+ close(): void;
12
+ };
13
+ export declare function createSourcefedMcp(daemon: SourcefedDaemon): SourcefedMcp;
14
+ export declare function createSourcefedStdio(daemon: SourcefedDaemon): SourcefedStdio;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { MonitorTarget } from "@fdcn/sourcefed/core";
2
+ export declare function eventResourceUri(target: MonitorTarget): string;
3
+ export { decodeTarget, encodeTarget } from "@fdcn/sourcefed/daemon";
@@ -0,0 +1,7 @@
1
+ import type { Hooks } from "@opencode-ai/plugin";
2
+ import Sourcefed from "../../../adapters/opencode/index.js";
3
+ declare const _default: {
4
+ id: string;
5
+ server: (input: Parameters<typeof Sourcefed>[0]) => Promise<Hooks>;
6
+ };
7
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export declare function githubToken(): string | undefined;
2
+ export declare function githubJson(path: string): Promise<any | undefined>;
3
+ export declare function githubGraphQL(query: string, variables: Record<string, unknown>): Promise<any | undefined>;
@@ -0,0 +1 @@
1
+ export declare function fetchGithubComments(path: string): Promise<any[] | undefined>;
@@ -0,0 +1,4 @@
1
+ export { githubToken } from "./client.js";
2
+ export { fetchGithubComments } from "./comments.js";
3
+ export { fetchRunLog } from "./logs.js";
4
+ export { fetchPrData } from "./pr.js";
@@ -0,0 +1,5 @@
1
+ export declare function fetchRunLog(repo: string, runId: string): Promise<string | undefined>;
2
+ export declare function extractZipEntries(buffer: Uint8Array): {
3
+ name: string;
4
+ content: Uint8Array;
5
+ }[];
@@ -0,0 +1,8 @@
1
+ export type GithubPrData = {
2
+ reviews: any[];
3
+ statusCheckRollup: any[];
4
+ mergeable?: string;
5
+ mergeStateStatus?: string;
6
+ state?: string;
7
+ };
8
+ export declare function fetchPrData(repo: string, prNumber: number): Promise<GithubPrData | undefined>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { GithubMonitor } from "./monitor.js";
2
+ export type { GithubSourceRecord, GithubEvent, GithubCursor } from "./types";
@@ -0,0 +1,15 @@
1
+ import { Monitor } from "@fdcn/sourcefed/core";
2
+ import type { MonitorCreateInput } from "@fdcn/sourcefed/core";
3
+ import type { GithubSourceRecord } from "./types";
4
+ import type { SourceInput } from "@fdcn/sourcefed/core";
5
+ export declare class GithubMonitor extends Monitor<GithubSourceRecord> {
6
+ readonly poll: import("@fdcn/sourcefed/core").PollMonitor<GithubSourceRecord>;
7
+ readonly webhook: import("@fdcn/sourcefed/core").WebhookMonitor<GithubSourceRecord>;
8
+ constructor();
9
+ readonly key: (source: GithubSourceRecord) => string;
10
+ readonly icon = "\uDB80\uDEA4";
11
+ readonly label: (source: GithubSourceRecord) => string;
12
+ readonly detail: (source: GithubSourceRecord) => string;
13
+ readonly describe: (source: GithubSourceRecord) => string;
14
+ build(input: MonitorCreateInput): SourceInput;
15
+ }
@@ -0,0 +1,2 @@
1
+ export { githubPollMonitor } from "./monitor.js";
2
+ export * from "./utils";
@@ -0,0 +1,3 @@
1
+ import { PollMonitor } from "@fdcn/sourcefed/core";
2
+ import type { GithubSourceRecord } from "../types";
3
+ export declare const githubPollMonitor: PollMonitor<GithubSourceRecord>;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function appendComments(repo: string, prNumber: number, cursor: GithubCursor, events: GithubEvent[], comments: any[], idPrefix: string, historyPrimed: boolean, summary: (comment: any) => string, body: (comment: any) => string): void;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function appendGithubCiEvent(repo: string, prNumber: number, cursor: GithubCursor, events: GithubEvent[], rollup: any[]): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function appendGithubConflictEvent(repo: string, prNumber: number, cursor: GithubCursor, events: GithubEvent[], mergeable: string): void;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function appendGithubReviews(repo: string, prNumber: number, cursor: GithubCursor, events: GithubEvent[], reviews: any[], historyPrimed: boolean): void;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function appendGithubStateEvent(repo: string, prNumber: number, cursor: GithubCursor, events: GithubEvent[], prState: string): boolean;
@@ -0,0 +1 @@
1
+ export declare function ciFailureDetail(repo: string, failed: any[]): Promise<string>;
@@ -0,0 +1 @@
1
+ export declare function cleanCiLog(raw: string): string;
@@ -0,0 +1 @@
1
+ export declare function confirmStillFailing(repo: string, prNumber: number, failed: any[]): Promise<any[]>;
@@ -0,0 +1,2 @@
1
+ import type { GithubCursor } from "../../types";
2
+ export declare function emptyGithubCursor(): GithubCursor;
@@ -0,0 +1 @@
1
+ export declare function failureRunIds(failed: any[]): Set<string>;
@@ -0,0 +1 @@
1
+ export declare function failureRunLog(repo: string, runId: string): Promise<string | undefined>;
@@ -0,0 +1 @@
1
+ export declare function formatFailedCheck(check: any): string;
@@ -0,0 +1 @@
1
+ export { pollGithub } from "./poll-github.js";
@@ -0,0 +1,6 @@
1
+ import type { GithubCursor, GithubEvent } from "../../types";
2
+ export declare function pollGithub(repo: string, prNumber: number, cursorRaw: unknown): Promise<{
3
+ events: GithubEvent[];
4
+ cursor: GithubCursor;
5
+ terminal: boolean;
6
+ }>;
@@ -0,0 +1,17 @@
1
+ import * as v from "valibot";
2
+ export declare const GithubSourceSchema: v.ObjectSchema<{
3
+ readonly type: v.LiteralSchema<"github", undefined>;
4
+ readonly repo: v.StringSchema<undefined>;
5
+ readonly prNumber: v.NumberSchema<undefined>;
6
+ }, undefined>;
7
+ export declare const GithubCursorSchema: v.ObjectSchema<{
8
+ readonly reviewIds: v.ArraySchema<v.StringSchema<undefined>, undefined>;
9
+ readonly commentIds: v.ArraySchema<v.StringSchema<undefined>, undefined>;
10
+ readonly historyPrimed: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
11
+ readonly lineCommentsPrimed: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
12
+ readonly conversationCommentsPrimed: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
13
+ readonly ciState: v.StringSchema<undefined>;
14
+ readonly ciFailureState: v.OptionalSchema<v.StringSchema<undefined>, "">;
15
+ readonly mergeable: v.StringSchema<undefined>;
16
+ readonly prState: v.StringSchema<undefined>;
17
+ }, undefined>;
@@ -0,0 +1,11 @@
1
+ export interface GithubCursor {
2
+ reviewIds: string[];
3
+ commentIds: string[];
4
+ historyPrimed: boolean;
5
+ lineCommentsPrimed: boolean;
6
+ conversationCommentsPrimed: boolean;
7
+ ciState: string;
8
+ ciFailureState: string;
9
+ mergeable: string;
10
+ prState: string;
11
+ }
@@ -0,0 +1,11 @@
1
+ export interface GithubEvent {
2
+ kind: "review" | "comment" | "ci" | "conflict" | "merged";
3
+ id?: string;
4
+ repo: string;
5
+ prNumber: number;
6
+ at: string;
7
+ summary: string;
8
+ body?: string;
9
+ actionable: boolean;
10
+ terminal?: boolean;
11
+ }
@@ -0,0 +1,3 @@
1
+ export type { GithubCursor } from "./cursor.js";
2
+ export type { GithubEvent } from "./event.js";
3
+ export type { GithubSourceRecord } from "./source-record.js";
@@ -0,0 +1,5 @@
1
+ export type GithubSourceRecord = {
2
+ type: "github";
3
+ repo: string;
4
+ prNumber: number;
5
+ };
@@ -0,0 +1,3 @@
1
+ export { githubWebhookMonitor } from "./monitor.js";
2
+ export * from "./types";
3
+ export * from "./utils";
@@ -0,0 +1,3 @@
1
+ import { WebhookMonitor } from "@fdcn/sourcefed/core";
2
+ import type { GithubSourceRecord } from "../types";
3
+ export declare const githubWebhookMonitor: WebhookMonitor<GithubSourceRecord>;
@@ -0,0 +1,7 @@
1
+ export type GithubWebhookContext = {
2
+ payload: any;
3
+ actor: string;
4
+ repo: string;
5
+ prNumber: number;
6
+ eventName: string;
7
+ };
@@ -0,0 +1,3 @@
1
+ import type { GithubWebhookContext } from "./context.js";
2
+ import type { GithubEventShape } from "./event-shape.js";
3
+ export type GithubEventHandler = (context: GithubWebhookContext) => GithubEventShape;
@@ -0,0 +1,7 @@
1
+ export type GithubEventShape = {
2
+ kind: string;
3
+ id?: string;
4
+ summary: string;
5
+ body?: string;
6
+ actionable: boolean;
7
+ };
@@ -0,0 +1 @@
1
+ export type { GithubEventHandler } from "./event-handler.js";
@@ -0,0 +1,3 @@
1
+ import type { GithubEventShape } from "../types/event-shape.js";
2
+ import type { GithubWebhookContext } from "../types/context.js";
3
+ export declare function fallbackGithubEvent({ payload, actor, repo, prNumber, eventName }: GithubWebhookContext): GithubEventShape;
@@ -0,0 +1,2 @@
1
+ import type { GithubEventHandler } from "../types";
2
+ export declare const githubEventHandlers: Record<string, GithubEventHandler>;