@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,71 @@
1
+ ---
2
+ name: core
3
+ description: Core sourcefed usage guide. Read this before creating monitors. Covers monitor creation per source (Jira issue, GitHub PR, Slack thread), event delivery and acknowledgement semantics, daemon modes, CLI usage, and troubleshooting. Use when the user asks to watch or monitor a Jira ticket, GitHub PR, Slack thread, or when sourcefed monitor events arrive in the session.
4
+ ---
5
+
6
+ # Sourcefed core
7
+
8
+ Sourcefed lets you create **monitors** that watch a Jira issue, GitHub PR, or
9
+ Slack thread and route NEW events into the session you're currently working in,
10
+ so you can react to them as they happen.
11
+
12
+ Every monitor is detect-only: it routes events into the session and never
13
+ replies to the watched thread unless you are explicitly asked to.
14
+
15
+ ## Create a monitor
16
+
17
+ Monitors belong to the session that created them; list, status, and stop only
18
+ affect that session's monitors.
19
+
20
+ - **Jira issue**: `monitor_create({ name: "PROJ-12345", sourceType: "jira", issueKey: "PROJ-12345" })`
21
+ - **GitHub PR**: `monitor_create({ name: "PR #42", sourceType: "github", repo: "owner/repo", prNumber: 42 })`
22
+ - **Slack thread**: `monitor_create({ name: "thread", sourceType: "slack", threadUrl: "<thread-url>" })`
23
+
24
+ You will be notified of:
25
+
26
+ - **Jira**: new comments, description edits, and summary/status/assignee/priority/label changes.
27
+ - **GitHub**: new reviews (including bot reviews), PR and line-level comments,
28
+ CI failures, merge conflicts, and the PR being merged or closed.
29
+ - **Slack**: new replies in the thread. Slack monitors are always detect-only
30
+ and never reply.
31
+
32
+ GitHub and Slack use webhook delivery when configured and fall back to polling
33
+ when unavailable. Jira always uses polling. You can lower `pollIntervalSec`
34
+ (min 15) for time-sensitive work, but prefer the default to avoid hammering
35
+ APIs.
36
+
37
+ Actionable events trigger an agent turn. Stable all-passing CI is suppressed to
38
+ avoid notification noise; other informational events are added as context only.
39
+
40
+ ## Lifecycle
41
+
42
+ - `monitor_list` — see monitors created by this session.
43
+ - `monitor_status { id }` — detail on one of this session's monitors.
44
+ - `monitor_stop { id }` — stop routing events for one of this session's monitors.
45
+ - GitHub monitors remove themselves after the PR is merged. Jira monitors
46
+ remove themselves when `SOURCEFED_JIRA_TERMINAL_STATUS` matches the issue
47
+ status; leave it unset to disable automatic Jira removal.
48
+
49
+ ## When an event arrives
50
+
51
+ Events are fed into your session as a message (e.g. a new review comment, a CI
52
+ failure, a Jira status change). Treat it like any new input: read it, decide
53
+ whether it needs action, and act (or tell the user it needs a decision). If the
54
+ event is non-actionable (e.g. CI all-passing), acknowledge it and move on — do
55
+ not fabricate work from it.
56
+
57
+ ## Daemon and CLI
58
+
59
+ Sourcefed runs as a shared HTTP daemon (`@sourcefed/daemon`) that owns
60
+ polling, webhooks, cursors, and state. The MCP server, the CLI, and host
61
+ adapters (OpenCode, Pi) are all consumers of the daemon.
62
+
63
+ - `sourcefed daemon [--port 18787]` — run the shared daemon (rpc, events, webhooks).
64
+ - `sourcefed mcp --stdio|--http` — expose the daemon through MCP.
65
+ - `sourcefed monitor create|list|status|stop` — drive a running daemon from the shell.
66
+
67
+ When `SOURCEFED_DAEMON_URL` is unset, the OpenCode and Pi adapters spawn one
68
+ local HTTP daemon automatically (if none is running) and connect to it, so
69
+ monitors persist across sessions and share a single registry.
70
+
71
+ Load the full command reference with `sourcefed skills get core --full`.
@@ -0,0 +1,75 @@
1
+ # Sourcefed command reference
2
+
3
+ ## CLI
4
+
5
+ ```text
6
+ sourcefed daemon [--port 18787] Run the shared daemon (rpc, events, webhooks)
7
+ sourcefed mcp --stdio Serve MCP over stdio
8
+ sourcefed mcp --http [--port 18788] Serve MCP over HTTP at /mcp
9
+ sourcefed monitor create [options] Create a monitor via a running daemon
10
+ sourcefed monitor list [--target-kind KIND] [--target-id ID]
11
+ sourcefed monitor status --id ID [--target-kind KIND] [--target-id ID]
12
+ sourcefed monitor stop --id ID [--target-kind KIND] [--target-id ID]
13
+ sourcefed monitor start --id ID [--target-kind KIND] [--target-id ID]
14
+ sourcefed monitor remove --id ID --yes [--target-kind KIND] [--target-id ID]
15
+ sourcefed monitor events [--target-kind KIND] [--target-id ID]
16
+ sourcefed monitor ack --event-id ID[,ID...] [--target-kind KIND] [--target-id ID]
17
+ sourcefed monitor sources
18
+ sourcefed skills [list] List bundled skills
19
+ sourcefed skills get <name> [--full] Output skill content (--full adds references)
20
+ sourcefed skills get --all Output every skill
21
+ sourcefed skills path [name] Print skill directory path
22
+ ```
23
+
24
+ ### monitor create options
25
+
26
+ ```text
27
+ --name NAME Human-readable monitor name (defaults to the source type)
28
+ --source-type TYPE jira | github | slack
29
+ --issue-key KEY Jira issue key (jira)
30
+ --repo OWNER/NAME GitHub repository (github)
31
+ --pr-number N GitHub PR number (github)
32
+ --channel-id ID Slack channel (slack)
33
+ --thread-ts TS Slack parent message timestamp (slack)
34
+ --thread-url URL Slack thread URL (slack)
35
+ --poll-interval-sec N Poll interval in seconds (min 15)
36
+ --target-kind KIND Target kind for ownership scoping (default: cli)
37
+ --target-id ID Target id for ownership scoping (default: hostname)
38
+ ```
39
+
40
+ ## Environment
41
+
42
+ ```text
43
+ SOURCEFED_DAEMON_URL Base URL of a shared daemon (default http://127.0.0.1:18787).
44
+ When unset, adapters auto-spawn one local HTTP daemon.
45
+ SOURCEFED_DAEMON_TOKEN Bearer token required when binding a non-loopback host
46
+ SOURCEFED_SLACK_TOKEN Slack bot/user token for direct Slack Web API polling
47
+ SOURCEFED_STATE_DIR State directory (default ~/.local/state/sourcefed)
48
+ SOURCEFED_DAEMON_PORT HTTP daemon port (default 18787)
49
+ SOURCEFED_MCP_PORT MCP HTTP port (default 18788)
50
+ SOURCEFED_WEBHOOK_PORT Optional webhook listener port (default 8788)
51
+ SOURCEFED_JIRA_BASE_URL Jira base URL (default https://<site>.atlassian.net)
52
+ SOURCEFED_JIRA_TERMINAL_STATUS Jira status that auto-removes monitors
53
+ GH_TOKEN / GITHUB_TOKEN GitHub token for direct API polling
54
+ SOURCEFED_GITHUB_WEBHOOK_SECRET GitHub webhook secret (enables webhooks)
55
+ SOURCEFED_SLACK_SIGNING_SECRET Slack signing secret (enables webhooks)
56
+ SOURCEFED_SKILLS_DIR Override the bundled skills directory
57
+ ```
58
+
59
+ ## Daemon protocol
60
+
61
+ The daemon speaks a small JSON protocol over HTTP (`POST /rpc`, `GET /events?target=...`
62
+ for SSE). Any harness can talk to it directly:
63
+
64
+ ```json
65
+ { "id": 1, "method": "monitor.create", "params": { ... } }
66
+ { "id": 1, "result": { ... } }
67
+ ```
68
+
69
+ ```text
70
+ data: { "type": "event", "target": { "kind": "...", "id": "..." }, "events": [ ... ] }
71
+ ```
72
+
73
+ Methods: `monitor.create`, `monitor.list`, `monitor.status`, `monitor.stop`,
74
+ `monitor.events`, `monitor.ack`, `monitor.subscribe`, `monitor.unsubscribe`,
75
+ `daemon.sourceTypes`.
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: sourcefed
3
+ description: Live Jira, GitHub, and Slack monitoring for agent hosts. Create monitors that route new issue comments, PR reviews, CI failures, and Slack thread messages into the current session as they happen.
4
+ hidden: true
5
+ ---
6
+
7
+ # Sourcefed
8
+
9
+ Sourcefed turns external collaboration threads into live agent input: create a
10
+ monitor for a Jira issue, GitHub PR, or Slack thread and NEW events are routed
11
+ into the session you are working in, so you can react to them as they happen.
12
+
13
+ This file is a discovery stub, not the usage guide. Before running any
14
+ `sourcefed` command, load the actual workflow content from the CLI:
15
+
16
+ ```bash
17
+ sourcefed skills get core # start here — workflows, patterns, troubleshooting
18
+ sourcefed skills get core --full # include full command reference and templates
19
+ ```
20
+
21
+ The CLI serves skill content that always matches the installed version, so
22
+ instructions never go stale. The content in this stub cannot change between
23
+ releases, which is why it just points at `skills get core`.
24
+
25
+ ## When to load this skill
26
+
27
+ - A user asks to monitor a Jira ticket, GitHub PR, or Slack thread.
28
+ - You found or are working on a Jira ticket, PR, or thread and want new
29
+ activity routed into your session.
30
+ - You opened a PR and want to be notified of reviews, comments, CI failures,
31
+ merge conflicts, or the merge itself.
@@ -0,0 +1,71 @@
1
+ # sourcefed — monitoring guidance
2
+
3
+ sourcefed is a monitor service. It lets you create **monitors** that watch a Jira issue, GitHub
4
+ PR, or Slack thread and route NEW events into the host session where the monitor was created.
5
+ The OpenCode and Pi adapters drive the Sourcefed daemon client (`@sourcefed/daemon`) for
6
+ monitor tools and event delivery; the same daemon can be served through MCP (`@sourcefed/mcp`)
7
+ or driven directly by the CLI.
8
+
9
+ All transports speak the same daemon JSON protocol over HTTP (`POST /rpc` +
10
+ `GET /events` SSE). The MCP adapter adds the 2026 resource-subscription flow
11
+ (`subscriptions/listen`, `notifications/resources/updated`, `monitor_events_ack`)
12
+ on top. When `SOURCEFED_DAEMON_URL` is unset, the OpenCode and Pi adapters
13
+ spawn one local HTTP daemon automatically (if none is running) and connect to it.
14
+
15
+ ## When to create a monitor
16
+
17
+ - **You found or are working on a Jira ticket** → create a Jira monitor for its issue key. You
18
+ will be notified of new comments, description edits, and summary/status/assignee/priority/label changes.
19
+ - **You are on a branch with an active PR (or just opened one)** → create a GitHub monitor for
20
+ `repo#prNumber`. You will be notified of new reviews (including bot reviews), PR and
21
+ line-level comments, CI failures, merge conflicts, and the PR being merged or closed.
22
+ - **You were given a Slack thread** → create a Slack monitor for the thread URL. It is
23
+ detect-only: it reads new messages and routes notifications into this session, but never replies.
24
+
25
+ ## How to create one
26
+
27
+ Use the `monitor_create` tool:
28
+
29
+ - Jira: `monitor_create({ name: "<key>", sourceType: "jira", issueKey: "PROJ-12345" })`
30
+ - GitHub: `monitor_create({ name: "<pr>", sourceType: "github", repo: "owner/name", prNumber: 42 })`
31
+ - Slack: `monitor_create({ name: "<thread>", sourceType: "slack", threadUrl: "<slack-thread-url>" })`
32
+
33
+ GitHub and Slack use webhook delivery when configured and fall back to polling when unavailable.
34
+ Jira always uses polling. Slack monitors are
35
+ always detect-only and never reply. You can lower
36
+ `pollIntervalSec` (min 15) for time-sensitive work, but prefer the default to avoid hammering APIs.
37
+ Actionable events trigger an agent turn. Stable all-passing CI is suppressed to avoid notification noise; other informational events are added as context only.
38
+
39
+ The abstract `Monitor` consolidates transport fallback and recovery and composes whichever
40
+ generic `PollMonitor` and `WebhookMonitor` transports a source exposes as class attributes.
41
+ Each provider is its own package (`@sourcefed/provider-{jira,github,slack}`) with monitor and
42
+ event modules; the built-in registry (`SOURCE_MAP`) is composed by the daemon, which imports
43
+ the provider packages directly. Jira exposes only polling;
44
+ GitHub and Slack expose both. Do not add source-specific transport branches to tools,
45
+ scheduling, or the daemon.
46
+
47
+ ## Skills
48
+
49
+ The CLI bundles skills that teach agents how to use sourcefed, in the agent-browser style: a
50
+ thin discovery stub points at CLI-served content that always matches the installed version.
51
+
52
+ ```bash
53
+ sourcefed skills # list available skills
54
+ sourcefed skills get core # load the core usage guide (--full adds references)
55
+ ```
56
+
57
+ ## Lifecycle
58
+
59
+ - Monitors belong to the target that created them; list, status, and stop only affect that target's monitors.
60
+ - `monitor_list` — see monitors created by this session.
61
+ - `monitor_status { id }` — detail on one of this session's monitors.
62
+ - `monitor_stop { id }` — stop routing events for one of this session's monitors.
63
+ - GitHub monitors remove themselves after the PR is merged. Jira monitors remove themselves when
64
+ `SOURCEFED_JIRA_TERMINAL_STATUS` matches the issue status; leave it unset to disable automatic Jira removal.
65
+
66
+ ## When an event arrives
67
+
68
+ Events are fed into your session as a message (e.g. a new review comment, a CI failure, a Jira
69
+ status change). Treat it like any new input: read it, decide whether it needs action, and act
70
+ (or tell the user it needs a decision). If the event is non-actionable (e.g. CI all-passing),
71
+ acknowledge it and move on — do not fabricate work from it.