@fdcn/sourcefed 0.3.8 → 0.4.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.
- package/README.md +36 -1
- package/dist/{chunk-5JL3UV72.js → chunk-L4SMC2NT.js} +29 -6
- package/dist/cli.js +4485 -2511
- package/dist/daemon.js +31 -6
- package/dist/mcp.js +2281 -1105
- package/dist/opencode.js +1 -1
- package/dist/pi.js +1 -1
- package/dist.dts/adapters/opencode/bridge.d.ts +1 -1
- package/dist.dts/adapters/opencode/subscriptions.d.ts +2 -2
- package/dist.dts/adapters/opencode/tui/sidebar.d.ts +1 -1
- package/dist.dts/adapters/pi/src/dialog.d.ts +1 -1
- package/dist.dts/adapters/pi/src/monitors-dialog.d.ts +1 -1
- package/dist.dts/packages/cli/src/commands/monitor/index.d.ts +1 -1
- package/dist.dts/packages/cli/src/utils/daemon.d.ts +1 -1
- package/dist.dts/packages/cli/src/utils/format.d.ts +1 -1
- package/dist.dts/packages/cli/src/utils/webhooks.d.ts +1 -1
- package/dist.dts/packages/core/src/events.d.ts +2 -2
- package/dist.dts/packages/core/src/index.d.ts +4 -4
- package/dist.dts/packages/core/src/monitors/index.d.ts +3 -3
- package/dist.dts/packages/core/src/monitors/monitor.d.ts +6 -6
- package/dist.dts/packages/core/src/monitors/poll/monitor.d.ts +5 -5
- package/dist.dts/packages/core/src/monitors/poll/types/poll-monitor-options.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/poll/types/poll-runner.d.ts +2 -2
- package/dist.dts/packages/core/src/monitors/poll/utils/event-delivery-id.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/poll/utils/tick.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/service.d.ts +3 -3
- package/dist.dts/packages/core/src/monitors/utils/monitor-identity.d.ts +3 -3
- package/dist.dts/packages/core/src/monitors/webhook/monitor.d.ts +5 -5
- package/dist.dts/packages/core/src/monitors/webhook/types/pending-webhook-event.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/webhook/types/webhook-monitor-options.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/webhook/utils/deliver-webhook.d.ts +2 -2
- package/dist.dts/packages/core/src/monitors/webhook/utils/handle-webhook.d.ts +1 -1
- package/dist.dts/packages/core/src/monitors/webhook/utils/heartbeat-webhooks.d.ts +2 -2
- package/dist.dts/packages/core/src/runtime.d.ts +3 -3
- package/dist.dts/packages/core/src/sources/index.d.ts +1 -1
- package/dist.dts/packages/core/src/sources/types/source-registry.d.ts +1 -1
- package/dist.dts/packages/core/src/storage/json.d.ts +2 -2
- package/dist.dts/packages/core/src/types/monitor-context.d.ts +2 -2
- package/dist.dts/packages/core/src/types/monitor-options.d.ts +1 -1
- package/dist.dts/packages/core/src/utils/event-to-text.d.ts +1 -1
- package/dist.dts/packages/core/src/utils/to-monitor-event.d.ts +2 -2
- package/dist.dts/packages/daemon/src/client.d.ts +1 -1
- package/dist.dts/packages/daemon/src/daemon.d.ts +3 -3
- package/dist.dts/packages/daemon/src/event-stream.d.ts +1 -1
- package/dist.dts/packages/daemon/src/event-transport.d.ts +4 -0
- package/dist.dts/packages/daemon/src/event-transport.test.d.ts +1 -0
- package/dist.dts/packages/daemon/src/fetch-isolation.test.d.ts +1 -0
- package/dist.dts/packages/daemon/src/index.d.ts +3 -3
- package/dist.dts/packages/daemon/src/registry.d.ts +5 -5
- package/dist.dts/packages/daemon/src/types/client.d.ts +1 -1
- package/dist.dts/packages/daemon/src/types/daemon.d.ts +1 -1
- package/dist.dts/packages/daemon/src/types/protocol.d.ts +1 -1
- package/dist.dts/packages/daemon/src/utils/sink.d.ts +2 -2
- package/dist.dts/packages/daemon/src/utils/target.d.ts +1 -1
- package/dist.dts/packages/mcp/src/server.d.ts +1 -1
- package/dist.dts/packages/mcp/src/uris.d.ts +2 -2
- package/dist.dts/providers/github/src/index.d.ts +1 -1
- package/dist.dts/providers/github/src/monitor.d.ts +6 -6
- package/dist.dts/providers/github/src/poll/index.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/monitor.d.ts +2 -2
- package/dist.dts/providers/github/src/poll/utils/append-comments.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/append-github-ci-event.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/append-github-conflict-event.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/append-github-reviews.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/append-github-state-event.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/empty-cursor.d.ts +1 -1
- package/dist.dts/providers/github/src/poll/utils/poll-github.d.ts +1 -1
- package/dist.dts/providers/github/src/webhook/index.d.ts +2 -2
- package/dist.dts/providers/github/src/webhook/monitor.d.ts +2 -2
- package/dist.dts/providers/github/src/webhook/utils/github-event-handlers.d.ts +1 -1
- package/dist.dts/providers/github/src/webhook/utils/parse-github-webhook.d.ts +1 -1
- package/dist.dts/providers/github/src/webhook/utils/update-github-cursor.d.ts +2 -2
- package/dist.dts/providers/jira/src/index.d.ts +1 -1
- package/dist.dts/providers/jira/src/monitor.d.ts +5 -5
- package/dist.dts/providers/jira/src/poll/index.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/monitor.d.ts +2 -2
- package/dist.dts/providers/jira/src/poll/utils/append-jira-changelog.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/utils/append-jira-comments.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/utils/append-jira-description.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/utils/empty-cursor.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/utils/jira-changelog-event.d.ts +1 -1
- package/dist.dts/providers/jira/src/poll/utils/poll-jira.d.ts +1 -1
- package/dist.dts/providers/slack/src/index.d.ts +1 -1
- package/dist.dts/providers/slack/src/monitor.d.ts +6 -6
- package/dist.dts/providers/slack/src/poll/index.d.ts +1 -1
- package/dist.dts/providers/slack/src/poll/monitor.d.ts +2 -2
- package/dist.dts/providers/slack/src/poll/utils/parse-slack-read-result.d.ts +1 -1
- package/dist.dts/providers/slack/src/poll/utils/poll-slack.d.ts +1 -1
- package/dist.dts/providers/slack/src/webhook/index.d.ts +1 -1
- package/dist.dts/providers/slack/src/webhook/monitor.d.ts +2 -2
- package/dist.dts/providers/slack/src/webhook/utils/parse-slack-webhook.d.ts +1 -1
- package/dist.dts/providers/slack/src/webhook/utils/update-slack-cursor.d.ts +2 -2
- package/dist.dts/providers/yab/src/index.d.ts +1 -1
- package/dist.dts/providers/yab/src/monitor.d.ts +5 -5
- package/dist.dts/providers/yab/src/poll/index.d.ts +1 -1
- package/dist.dts/providers/yab/src/poll/monitor.d.ts +2 -2
- package/dist.dts/providers/yab/src/poll/utils/feed-events.d.ts +1 -1
- package/dist.dts/providers/yab/src/poll/utils/parse-feed.d.ts +1 -1
- package/dist.dts/providers/yab/src/poll/utils/poll-yab.d.ts +1 -1
- package/dist.dts/providers/yab/src/poll/utils/yab-mcp.d.ts +1 -1
- package/package.json +27 -9
package/README.md
CHANGED
|
@@ -33,11 +33,46 @@ OpenCode loads this package as both a server and a TUI plugin from one entry:
|
|
|
33
33
|
|
|
34
34
|
```json
|
|
35
35
|
// ~/.config/opencode/opencode.jsonc
|
|
36
|
-
{ "plugins": ["@fdcn/sourcefed@0.
|
|
36
|
+
{ "plugins": ["@fdcn/sourcefed@0.4.0"] }
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
The package exposes `./server`, `./tui`, `./opencode`, `./opencode/tui`, and `./pi` entrypoints for hosts that load them directly.
|
|
40
40
|
|
|
41
|
+
## Host dependencies
|
|
42
|
+
|
|
43
|
+
Pi provides `@earendil-works/pi-coding-agent`, `@earendil-works/pi-tui` and
|
|
44
|
+
`typebox` through its extension loader. Sourcefed declares each as an optional
|
|
45
|
+
peer with a `"*"` range and leaves their imports external in `dist/pi.js`, matching
|
|
46
|
+
[Pi’s package contract](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/packages.md#dependencies).
|
|
47
|
+
OpenCode, CLI, daemon and MCP entry points do not import these peers. A plain npm
|
|
48
|
+
install downloads no Pi host packages; a Pi host supplies its own versions.
|
|
49
|
+
|
|
50
|
+
Install the extension through the Pi host:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
pi install npm:@fdcn/sourcefed@0.4.0
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The workspace uses pinned development dependencies to compile and test the Pi
|
|
57
|
+
adapter. Those development tools are separate from the published runtime.
|
|
58
|
+
|
|
59
|
+
From a checkout, verify the packed package:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
npm run check
|
|
63
|
+
|
|
64
|
+
node scripts/check-optional-pi.mjs
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The check packs and installs Sourcefed into fresh temporary directories. It
|
|
68
|
+
verifies the absence of Pi packages, imports the non-Pi libraries, loads the
|
|
69
|
+
installed plugin in a private OpenCode host, and loads the Pi-managed extension
|
|
70
|
+
in RPC mode without a model request. The Pi installer uses an isolated
|
|
71
|
+
`npmCommand` wrapper that substitutes the local tarball for the package’s npm
|
|
72
|
+
spec; the registry contains only published releases. The check needs OpenCode,
|
|
73
|
+
OpenSSL and the workspace’s Pi development host. Its audit output includes
|
|
74
|
+
remaining OpenCode dependencies and does not certify a clean security gate.
|
|
75
|
+
|
|
41
76
|
## Skills
|
|
42
77
|
|
|
43
78
|
```sh
|
|
@@ -25,6 +25,9 @@ import { createServer } from "node:http";
|
|
|
25
25
|
import { Readable } from "node:stream";
|
|
26
26
|
import { spawn as spawn2 } from "node:child_process";
|
|
27
27
|
import path7 from "node:path";
|
|
28
|
+
import { get as getHttp } from "node:http";
|
|
29
|
+
import { get as getHttps } from "node:https";
|
|
30
|
+
import { Readable as Readable2 } from "node:stream";
|
|
28
31
|
var store$4;
|
|
29
32
|
var DEFAULT_CONFIG = {
|
|
30
33
|
lang: void 0,
|
|
@@ -12670,6 +12673,28 @@ function parseDaemonFrame(line) {
|
|
|
12670
12673
|
return void 0;
|
|
12671
12674
|
}
|
|
12672
12675
|
}
|
|
12676
|
+
async function openEventResponse(url, headers, signal) {
|
|
12677
|
+
signal.throwIfAborted();
|
|
12678
|
+
const endpoint = new URL(url);
|
|
12679
|
+
if (endpoint.protocol !== "http:" && endpoint.protocol !== "https:") {
|
|
12680
|
+
throw new Error("event stream requires HTTP or HTTPS");
|
|
12681
|
+
}
|
|
12682
|
+
const get = endpoint.protocol === "https:" ? getHttps : getHttp;
|
|
12683
|
+
const response = await new Promise((resolve, reject) => {
|
|
12684
|
+
const request = get(endpoint, { headers, signal, agent: false }, resolve);
|
|
12685
|
+
request.once("error", reject);
|
|
12686
|
+
});
|
|
12687
|
+
if (!response.statusCode || response.statusCode < 200 || response.statusCode >= 300) {
|
|
12688
|
+
response.destroy();
|
|
12689
|
+
throw new Error("event stream failed: " + response.statusCode);
|
|
12690
|
+
}
|
|
12691
|
+
return response;
|
|
12692
|
+
}
|
|
12693
|
+
function eventReader(response) {
|
|
12694
|
+
return Readable2.toWeb(response, {
|
|
12695
|
+
strategy: { highWaterMark: 64 * 1024, size: (chunk) => chunk.byteLength }
|
|
12696
|
+
}).getReader();
|
|
12697
|
+
}
|
|
12673
12698
|
var DaemonEventStream = class {
|
|
12674
12699
|
constructor(url, headers, onEvents, acknowledge, onClose) {
|
|
12675
12700
|
this.url = url;
|
|
@@ -12742,14 +12767,11 @@ var DaemonEventStream = class {
|
|
|
12742
12767
|
this.stream = controller;
|
|
12743
12768
|
this.controller.signal.addEventListener("abort", abort, { once: true });
|
|
12744
12769
|
let reader;
|
|
12770
|
+
let response;
|
|
12745
12771
|
try {
|
|
12746
12772
|
this.controller.signal.throwIfAborted();
|
|
12747
|
-
|
|
12748
|
-
|
|
12749
|
-
await response.body?.cancel();
|
|
12750
|
-
throw new Error(`event stream failed: ${response.status}`);
|
|
12751
|
-
}
|
|
12752
|
-
reader = response.body.getReader();
|
|
12773
|
+
response = await openEventResponse(this.url, this.headers, controller.signal);
|
|
12774
|
+
reader = eventReader(response);
|
|
12753
12775
|
const decoder = new TextDecoder();
|
|
12754
12776
|
let buffer = "";
|
|
12755
12777
|
while (!controller.signal.aborted) {
|
|
@@ -12763,6 +12785,7 @@ var DaemonEventStream = class {
|
|
|
12763
12785
|
} finally {
|
|
12764
12786
|
await reader?.cancel().catch(() => void 0);
|
|
12765
12787
|
reader?.releaseLock();
|
|
12788
|
+
response?.destroy();
|
|
12766
12789
|
this.controller.signal.removeEventListener("abort", abort);
|
|
12767
12790
|
if (this.stream === controller) this.stream = void 0;
|
|
12768
12791
|
}
|