@open-everywhere/provider-github 0.0.0-stage → 0.1.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 (111) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +21 -0
  3. package/README.md +50 -2
  4. package/agent/channels/github-catch-up.ts +134 -0
  5. package/agent/channels/github-engagement.ts +381 -0
  6. package/agent/channels/github-identity.ts +376 -0
  7. package/agent/channels/github-installations.ts +152 -0
  8. package/agent/channels/github-message-ops.ts +62 -0
  9. package/agent/channels/github-origin-codec.ts +42 -0
  10. package/agent/channels/github-post-arm.ts +422 -0
  11. package/agent/channels/github-reaction-feedback.ts +489 -0
  12. package/agent/channels/github-reaction-scope.ts +312 -0
  13. package/agent/channels/github-read.ts +471 -0
  14. package/agent/channels/github-stop.ts +175 -0
  15. package/agent/channels/github-supervisor.ts +645 -0
  16. package/agent/channels/github-webhook-verifier.ts +56 -0
  17. package/agent/channels/github.ts +1458 -0
  18. package/agent/contributions.ts +31 -0
  19. package/agent/docs-generated.ts +15 -0
  20. package/agent/memory/memory.ts +265 -0
  21. package/agent/ops.ts +17 -0
  22. package/agent/provider-events.ts +114 -0
  23. package/agent/register.ts +130 -0
  24. package/agent/surface-parity.ts +116 -0
  25. package/dist/agent/channels/github-catch-up.d.ts +29 -0
  26. package/dist/agent/channels/github-catch-up.d.ts.map +1 -0
  27. package/dist/agent/channels/github-catch-up.js +105 -0
  28. package/dist/agent/channels/github-catch-up.js.map +1 -0
  29. package/dist/agent/channels/github-engagement.d.ts +223 -0
  30. package/dist/agent/channels/github-engagement.d.ts.map +1 -0
  31. package/dist/agent/channels/github-engagement.js +317 -0
  32. package/dist/agent/channels/github-engagement.js.map +1 -0
  33. package/dist/agent/channels/github-identity.d.ts +164 -0
  34. package/dist/agent/channels/github-identity.d.ts.map +1 -0
  35. package/dist/agent/channels/github-identity.js +295 -0
  36. package/dist/agent/channels/github-identity.js.map +1 -0
  37. package/dist/agent/channels/github-installations.d.ts +49 -0
  38. package/dist/agent/channels/github-installations.d.ts.map +1 -0
  39. package/dist/agent/channels/github-installations.js +114 -0
  40. package/dist/agent/channels/github-installations.js.map +1 -0
  41. package/dist/agent/channels/github-message-ops.d.ts +3 -0
  42. package/dist/agent/channels/github-message-ops.d.ts.map +1 -0
  43. package/dist/agent/channels/github-message-ops.js +58 -0
  44. package/dist/agent/channels/github-message-ops.js.map +1 -0
  45. package/dist/agent/channels/github-origin-codec.d.ts +7 -0
  46. package/dist/agent/channels/github-origin-codec.d.ts.map +1 -0
  47. package/dist/agent/channels/github-origin-codec.js +36 -0
  48. package/dist/agent/channels/github-origin-codec.js.map +1 -0
  49. package/dist/agent/channels/github-post-arm.d.ts +54 -0
  50. package/dist/agent/channels/github-post-arm.d.ts.map +1 -0
  51. package/dist/agent/channels/github-post-arm.js +339 -0
  52. package/dist/agent/channels/github-post-arm.js.map +1 -0
  53. package/dist/agent/channels/github-reaction-feedback.d.ts +97 -0
  54. package/dist/agent/channels/github-reaction-feedback.d.ts.map +1 -0
  55. package/dist/agent/channels/github-reaction-feedback.js +380 -0
  56. package/dist/agent/channels/github-reaction-feedback.js.map +1 -0
  57. package/dist/agent/channels/github-reaction-scope.d.ts +102 -0
  58. package/dist/agent/channels/github-reaction-scope.d.ts.map +1 -0
  59. package/dist/agent/channels/github-reaction-scope.js +296 -0
  60. package/dist/agent/channels/github-reaction-scope.js.map +1 -0
  61. package/dist/agent/channels/github-read.d.ts +135 -0
  62. package/dist/agent/channels/github-read.d.ts.map +1 -0
  63. package/dist/agent/channels/github-read.js +371 -0
  64. package/dist/agent/channels/github-read.js.map +1 -0
  65. package/dist/agent/channels/github-stop.d.ts +52 -0
  66. package/dist/agent/channels/github-stop.d.ts.map +1 -0
  67. package/dist/agent/channels/github-stop.js +145 -0
  68. package/dist/agent/channels/github-stop.js.map +1 -0
  69. package/dist/agent/channels/github-supervisor.d.ts +308 -0
  70. package/dist/agent/channels/github-supervisor.d.ts.map +1 -0
  71. package/dist/agent/channels/github-supervisor.js +339 -0
  72. package/dist/agent/channels/github-supervisor.js.map +1 -0
  73. package/dist/agent/channels/github-webhook-verifier.d.ts +5 -0
  74. package/dist/agent/channels/github-webhook-verifier.d.ts.map +1 -0
  75. package/dist/agent/channels/github-webhook-verifier.js +55 -0
  76. package/dist/agent/channels/github-webhook-verifier.js.map +1 -0
  77. package/dist/agent/channels/github.d.ts +139 -0
  78. package/dist/agent/channels/github.d.ts.map +1 -0
  79. package/dist/agent/channels/github.js +1232 -0
  80. package/dist/agent/channels/github.js.map +1 -0
  81. package/dist/agent/contributions.d.ts +12 -0
  82. package/dist/agent/contributions.d.ts.map +1 -0
  83. package/dist/agent/contributions.js +31 -0
  84. package/dist/agent/contributions.js.map +1 -0
  85. package/dist/agent/docs-generated.d.ts +3 -0
  86. package/dist/agent/docs-generated.d.ts.map +1 -0
  87. package/dist/agent/docs-generated.js +13 -0
  88. package/dist/agent/docs-generated.js.map +1 -0
  89. package/dist/agent/memory/memory.d.ts +54 -0
  90. package/dist/agent/memory/memory.d.ts.map +1 -0
  91. package/dist/agent/memory/memory.js +224 -0
  92. package/dist/agent/memory/memory.js.map +1 -0
  93. package/dist/agent/ops.d.ts +3 -0
  94. package/dist/agent/ops.d.ts.map +1 -0
  95. package/dist/agent/ops.js +16 -0
  96. package/dist/agent/ops.js.map +1 -0
  97. package/dist/agent/provider-events.d.ts +3 -0
  98. package/dist/agent/provider-events.d.ts.map +1 -0
  99. package/dist/agent/provider-events.js +112 -0
  100. package/dist/agent/provider-events.js.map +1 -0
  101. package/dist/agent/register.d.ts +4 -0
  102. package/dist/agent/register.d.ts.map +1 -0
  103. package/dist/agent/register.js +116 -0
  104. package/dist/agent/register.js.map +1 -0
  105. package/dist/agent/surface-parity.d.ts +3 -0
  106. package/dist/agent/surface-parity.d.ts.map +1 -0
  107. package/dist/agent/surface-parity.js +110 -0
  108. package/dist/agent/surface-parity.js.map +1 -0
  109. package/package.json +156 -4
  110. package/tsconfig.build.json +22 -0
  111. package/tsconfig.json +15 -0
@@ -0,0 +1,112 @@
1
+ // GITHUB's event inventory (OPE-1612). See the core module's header
2
+ // (packages/core/agent/routines/provider-events.ts) for what the three routing states mean.
3
+ //
4
+ // Every `event` name below is a row of GitHub's own "Webhook events and payloads" index, which the
5
+ // `doc` field cites. The scope column is what `routines/github-normalizer.ts` proves: the `tenant`
6
+ // step is the repo OWNER and the `container` step is `owner/name` on EVERY row, so the rows below
7
+ // list only what each event adds BELOW the container — that is the part that varies, and the part a
8
+ // routine can address about the thing that happened.
9
+ //
10
+ // 🔴 THE `entity` STEP IS THE SUBJECT `normalizeGithubEvent` FOUND, and the chain it searches
11
+ // (`pull_request` → `issue` → `check_run` → `release` → `workflow_run`) is why `push`,
12
+ // `check_suite` and `workflow_job` are envelope-only: their subject object is under a key that chain
13
+ // does not name, so nothing below the repo is proven. That is a real gap, not a vendor limit, and
14
+ // the notes say so. `installation` is a different case and is `none`, not `envelope`: it names no
15
+ // repository at all, so the read-grant check refuses every delivery and nothing can ever fire.
16
+ //
17
+ // 🔴 THIS LIST IS REVIEWED, NOT EXHAUSTIVE. GitHub's index carries far more events than the rows
18
+ // below — `installation_repositories`, `star`, `fork`, `deployment_status` and many more. A row
19
+ // reaches this file when somebody read the event and decided what a routine could do with it. So an
20
+ // ABSENT event means "nobody has reviewed it here", never "the vendor does not send it"; adding one
21
+ // is a doc read plus a routing decision, not a guess.
22
+ export const GITHUB_PROVIDER_EVENTS = {
23
+ source: "github",
24
+ doc: "https://docs.github.com/en/webhooks/webhook-events-and-payloads",
25
+ events: [
26
+ {
27
+ event: "issues",
28
+ routing: "mapped",
29
+ match: [],
30
+ scope: ["entity"],
31
+ note: "an issue was opened, closed, labelled, assigned…; the entity step is the issue number, so the fire re-fetches the issue itself",
32
+ },
33
+ {
34
+ event: "issue_comment",
35
+ routing: "mapped",
36
+ match: [],
37
+ scope: ["entity", "sub"],
38
+ note: "a comment on an issue or on a pull request's timeline; the sub step is the comment id",
39
+ },
40
+ {
41
+ event: "pull_request",
42
+ routing: "mapped",
43
+ match: [],
44
+ scope: ["entity"],
45
+ note: "a pull request was opened, synchronised, merged…; the entity step is the pull-request number",
46
+ },
47
+ {
48
+ event: "pull_request_review",
49
+ routing: "mapped",
50
+ match: [],
51
+ scope: ["entity"],
52
+ note: "a review was submitted, edited or dismissed; the review itself is not addressable — the payload names it `review`, not `comment`",
53
+ },
54
+ {
55
+ event: "pull_request_review_comment",
56
+ routing: "mapped",
57
+ match: [],
58
+ scope: ["entity", "sub"],
59
+ note: "an inline comment on a line of a pull request's diff; the sub step is the comment id",
60
+ },
61
+ {
62
+ event: "push",
63
+ routing: "envelope",
64
+ match: [],
65
+ scope: [],
66
+ note: "commits were pushed to a ref; a push has no entity to fetch, and the ref is not mapped — a routine can match the repo and the sender only",
67
+ },
68
+ {
69
+ event: "check_run",
70
+ routing: "mapped",
71
+ match: [],
72
+ scope: ["entity"],
73
+ note: "one check's state changed; the entity step is GitHub's opaque run id, so it narrows a subscription but is not re-fetchable",
74
+ },
75
+ {
76
+ event: "check_suite",
77
+ routing: "envelope",
78
+ match: [],
79
+ scope: [],
80
+ note: "a whole suite of checks completed; unmapped — the payload's subject sits under `check_suite`, which the normalizer's subject chain does not name",
81
+ },
82
+ {
83
+ event: "workflow_run",
84
+ routing: "mapped",
85
+ match: ["branch", "status", "conclusion", "workflow"],
86
+ scope: ["entity"],
87
+ note: "an Actions run started or finished; the four keys are what makes `a red build on our main` expressible — `.scope.container == \"acme/web\" and .fields.conclusion == \"failure\" and .fields.branch == \"main\"`. The container clause is REQUIRED, not decoration: a github subscription that narrows by nothing is refused at create time",
88
+ },
89
+ {
90
+ event: "workflow_job",
91
+ routing: "envelope",
92
+ match: [],
93
+ scope: [],
94
+ note: "one job inside an Actions run changed state; unmapped — `workflow_run` is the run-level event and carries the same conclusion for the whole run",
95
+ },
96
+ {
97
+ event: "release",
98
+ routing: "mapped",
99
+ match: [],
100
+ scope: ["entity"],
101
+ note: "a release was published or edited; the entity step is GitHub's opaque release id, so it narrows a subscription but is not re-fetchable",
102
+ },
103
+ {
104
+ event: "installation",
105
+ routing: "none",
106
+ match: [],
107
+ scope: [],
108
+ note: "the App was installed, suspended or removed; the normalizer accepts it, but the payload names `repositories` and never `repository`, so it proves NO container step and the read-grant check refuses every delivery fail-closed — nothing can ever fire. The self-registering install leg reads it instead",
109
+ },
110
+ ],
111
+ };
112
+ //# sourceMappingURL=provider-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-events.js","sourceRoot":"","sources":["../../agent/provider-events.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,4FAA4F;AAC5F,EAAE;AACF,mGAAmG;AACnG,mGAAmG;AACnG,kGAAkG;AAClG,oGAAoG;AACpG,qDAAqD;AACrD,EAAE;AACF,8FAA8F;AAC9F,uFAAuF;AACvF,qGAAqG;AACrG,kGAAkG;AAClG,kGAAkG;AAClG,+FAA+F;AAC/F,EAAE;AACF,iGAAiG;AACjG,gGAAgG;AAChG,oGAAoG;AACpG,oGAAoG;AACpG,sDAAsD;AAItD,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,iEAAiE;IACtE,MAAM,EAAE;QACN;YACE,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,gIAAgI;SACvI;QACD;YACE,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YACxB,IAAI,EAAE,uFAAuF;SAC9F;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,8FAA8F;SACrG;QACD;YACE,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,kIAAkI;SACzI;QACD;YACE,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YACxB,IAAI,EAAE,sFAAsF;SAC7F;QACD;YACE,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,2IAA2I;SAClJ;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,4HAA4H;SACnI;QACD;YACE,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,kJAAkJ;SACzJ;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;YACrD,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,6UAA6U;SACpV;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,iJAAiJ;SACxJ;QACD;YACE,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,IAAI,EAAE,wIAAwI;SAC/I;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,4SAA4S;SACnT;KACF;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Perform ALL of the github bundle's chat-surface registrations. Idempotent (each register call
2
+ * replaces); cheap and side-effect-free beyond the registry writes. */
3
+ export declare function registerGithubProvider(): void;
4
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../agent/register.ts"],"names":[],"mappings":"AAiEA;wEACwE;AACxE,wBAAgB,sBAAsB,IAAI,IAAI,CA8D7C"}
@@ -0,0 +1,116 @@
1
+ // registerGithubProvider — the ONE boot entry of @open-everywhere/provider-github. The app's
2
+ // adapter-wiring module (agent/lib/register-adapters.ts) imports this STATICALLY and calls it once
3
+ // at boot; every seam the github bundle implements registers here and nowhere else. Static imports
4
+ // only: eve bundles the agent definition and its whole import graph into one rolldown chunk — a
5
+ // literal dynamic import() code-splits and trips eve's "expected one authored module" invariant.
6
+ //
7
+ // SCOPE — CHAT SURFACE ONLY. The github bundle takes the conversational surface (channels/github.ts
8
+ // + the ambient supervisor + identity + post arm). The SCM subsystem STAYS IN CORE by doctrine (the
9
+ // single SCM implementation until a second SCM needs the abstraction — docs/extending/adapter-model.md):
10
+ // the githubEntityAdapter (scm/issue-actions.ts) and every PR/SCM tool (open_pull_request,
11
+ // subscribe_pr, checkout_repo, list_repos, add_label, assign, …) plus the config-repo PR mechanism
12
+ // (credentials/config-pr-github.ts) is NOT part
13
+ // of this bundle — they register from core exactly as before.
14
+ //
15
+ // What github registers (and what it deliberately does NOT):
16
+ // • identity mapper — bindGitHub (chat-surface plane; channels/github-identity.ts)
17
+ // • capability manifest — { midTurnPost: true, reactions: true, closingProseDropped: true }:
18
+ // the arm mints its own installation token and posts/edits/reacts on the
19
+ // issue/PR timeline itself, so every mid-turn verb runs through `reply` /
20
+ // `edit_reply` / `react` rather than a host-side supervisor post (OPE-811,
21
+ // OPE-862)
22
+ // • post arm — githubPostArm (mid-turn + unified-reply installation-token comment,
23
+ // editMessage, react, + redrive)
24
+ // • wake-origin codec — the stored-data github arm (channels/github-origin-codec.ts)
25
+ // • read adapter — githubReadAdapter (channels/github-read.ts, OPE-958): the issue-or-PR
26
+ // conversation for `read_channel` and a PR review thread for
27
+ // `read_thread`, on the brokered read-scoped token. The READ grain is
28
+ // the conversation, not the repo — a repo timeline is not a room
29
+ // anybody wrote in
30
+ // • memory backing — the github MemoryProvider + its connector-memory capability
31
+ // (agent/memory/memory.ts). MOVED here from core at OPE-390: a
32
+ // connector-owned backing belongs to the package that owns the
33
+ // connector; core keeps only the first-party postgres/sqlite ones.
34
+ // • surface message ops — githubMessageOps (postText/editMessage; OPE-899): the stop
35
+ // acknowledgement's transport (turn-anchor.ts's `postSurfaceText`).
36
+ // No postFiles (no file-attach API) and no setReaction (no raised hand
37
+ // in GitHub's fixed reaction set) — channels/github-message-ops.ts.
38
+ import { registerIdentityMapper, registerCapabilityManifest, registerSurfaceParity, registerProviderEvents, registerReactionSurface, registerPostArm, registerWakeOriginCodec, registerProviderDocs, registerReadAdapter, registerSeatCatchUp, registerWebhookVerifier, registerSurfaceMessageOps, } from "@open-everywhere/core/agent/adapter-api.js";
39
+ import { PROVIDER_DOCS } from "./docs-generated.js";
40
+ import { GITHUB_SURFACE_PARITY } from "./surface-parity.js";
41
+ import { GITHUB_PROVIDER_EVENTS } from "./provider-events.js";
42
+ import { registerGithubOps } from "./ops.js";
43
+ import { registerGitHubMemory, declareGitHubMemoryCapability } from "./memory/memory.js";
44
+ import { bindGitHub } from "./channels/github-identity.js";
45
+ import { githubPostArm } from "./channels/github-post-arm.js";
46
+ import { githubWakeOriginCodec } from "./channels/github-origin-codec.js";
47
+ import { githubWebhookVerifier } from "./channels/github-webhook-verifier.js";
48
+ import { githubReadAdapter } from "./channels/github-read.js";
49
+ import { githubSeatCatchUpFetch, GITHUB_TIMESTAMP_PRECISION_MS } from "./channels/github-catch-up.js";
50
+ import { githubMessageOps } from "./channels/github-message-ops.js";
51
+ /** Perform ALL of the github bundle's chat-surface registrations. Idempotent (each register call
52
+ * replaces); cheap and side-effect-free beyond the registry writes. */
53
+ export function registerGithubProvider() {
54
+ registerIdentityMapper("github", bindGitHub);
55
+ // Reply surface (OPE-811): mid-turn post is the arm's own installation-token issue/PR-timeline
56
+ // comment (githubPostArm.dispatchReply) — no eve proactive helper needed ⇒ midTurnPost true.
57
+ // reactions (OPE-862): the arm's `react` member posts to GitHub's issue-reactions endpoint
58
+ // (mapping the model's bare emoji name onto GitHub's fixed content enum) ⇒ true.
59
+ // closingProseDropped (OPE-811): a container-supervisor turn runs the message-tool-only gate
60
+ // live, so its turn-final text is dropped and `reply` is the only route out.
61
+ registerCapabilityManifest("github", { midTurnPost: true, reactions: true, closingProseDropped: true });
62
+ // The OPE-1499 parity ledger: every capability the chat-surface contract names, answered
63
+ // `supported` or `{ unsupported: "<reason>" }`. Gates nothing at runtime — `lint:surface-parity`
64
+ // reds on an unanswered row, and the contract's §7.1/§7.1.1/§7.2 tables are generated from it.
65
+ registerSurfaceParity("github", GITHUB_SURFACE_PARITY);
66
+ // The OPE-1612 event inventory: every vendor event that could wake a routine, and how far the
67
+ // normalizer plane carries each one. Gates nothing at runtime — `lint:provider-events` reds a
68
+ // bundle that declares none or that promises a match key the normalizer does not declare, and
69
+ // the manual's inventory table is generated from it.
70
+ registerProviderEvents("github", GITHUB_PROVIDER_EVENTS);
71
+ registerPostArm(githubPostArm);
72
+ registerWakeOriginCodec("github", githubWakeOriginCodec);
73
+ // Read plane (OPE-958): the sixth surface's arm of the uniform chat read. It serves the SEAT's
74
+ // `read_channel` / `read_thread` and — under the domain's repo grant — the worker's
75
+ // `read_work_channel` / `read_work_thread`, because both run the same neutral engine over this
76
+ // one adapter.
77
+ registerReadAdapter(githubReadAdapter);
78
+ // THE SEAT CATCH-UP FETCH (OPE-1726): the timeline comments this issue/PR collected since the
79
+ // seat's last wake. Core's shared path applies the bounds, the admission policy and the cap.
80
+ // The surface DECLARES the unit its own message stamps carry, and core widens both catch-up
81
+ // bounds by it (OPE-1847). A wrong or missing unit bounds the seat out of its own window.
82
+ registerSeatCatchUp("github", githubSeatCatchUpFetch, { timestampPrecisionMs: GITHUB_TIMESTAMP_PRECISION_MS });
83
+ // Surface message ops (OPE-899): postText/editMessage over the SAME issue/PR-timeline comment
84
+ // transport the post arm uses, so the stop acknowledgement (turn-anchor.ts's `postSurfaceText`)
85
+ // now has a place to land on GitHub. No `postFiles` (no attach-a-file-to-a-comment API) and no
86
+ // `setReaction` (GitHub's fixed 8-value reaction set has no raised hand) — see
87
+ // channels/github-message-ops.ts's header.
88
+ registerSurfaceMessageOps(githubMessageOps);
89
+ // REACTION-FEEDBACK INGEST (OPE-1502) — a POLL, not a delivery: GitHub pushes no reaction webhook,
90
+ // so the front reads the reactions on the agent's own comments when a delivery names their
91
+ // conversation (channels/github-reaction-feedback.ts).
92
+ registerReactionSurface("github");
93
+ // Webhook-verifier plane (OPE-164): GitHub's `x-hub-signature-256` scheme, so a GENERIC hook can
94
+ // declare `source: "github"` and be verified the way GitHub signs. Changes no existing route —
95
+ // the native github webhook path keeps its own inline gate.
96
+ registerWebhookVerifier(githubWebhookVerifier);
97
+ // Shipped-manual plane (OPE-138): this bundle's own setup runbook (docs/deploy/surfaces/github.md,
98
+ // compiled into ./docs-generated.ts because docs/ is not on disk at runtime). De-select the bundle
99
+ // and the module leaves the import graph; registerProviderDocs re-checks the selection gate anyway.
100
+ registerProviderDocs("github", PROVIDER_DOCS);
101
+ // Ops plane (OPE-495): the telemetry credential-presence probe. Split into ./ops.js so the
102
+ // STANDALONE ops MCP entry (repo-root scripts/ops-mcp.ts, which serves preflight/quickstart with
103
+ // no agent boot) registers it without pulling the whole channel graph — the same split slack and
104
+ // teams use.
105
+ registerGithubOps();
106
+ // The MEMORY backing (OPE-390). Two calls on purpose:
107
+ // • registerGitHubMemory() wires the live provider off the GitHub App plane and is a no-op
108
+ // (false) when no App is configured — a deployment that never uses git-backed memory pays
109
+ // nothing and never resolves the "github" provider id.
110
+ // • declareGitHubMemoryCapability() runs REGARDLESS, because the prefetch invariant is a
111
+ // CONFIG check: a silo reaching past its domain's repo grants must go red at config load on
112
+ // a deployment whose App plane happens to be unconfigured too, not go quiet.
113
+ if (!registerGitHubMemory())
114
+ declareGitHubMemoryCapability();
115
+ }
116
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../agent/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SurfaceParityDeclaration } from "@open-everywhere/core/agent/adapter-api.js";
2
+ export declare const GITHUB_SURFACE_PARITY: SurfaceParityDeclaration;
3
+ //# sourceMappingURL=surface-parity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-parity.d.ts","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F,eAAO,MAAM,qBAAqB,EAAE,wBA0GnC,CAAC"}
@@ -0,0 +1,110 @@
1
+ // GITHUB's surface-parity declaration (OPE-1499). See the core module's header
2
+ // (packages/core/agent/identity/surface-parity.ts) for what the three cell shapes mean.
3
+ //
4
+ // GitHub is a TICKETING surface. A repo holds issues and pull requests, not chat rooms, so the
5
+ // three cross-container verbs and the DM family are absent for a structural reason rather than an
6
+ // unbuilt one — and that distinction is what the reasons below carry.
7
+ export const GITHUB_SURFACE_PARITY = {
8
+ // --- registration seams (§7.1) ---------------------------------------------------------------
9
+ "identity-mapper": "supported",
10
+ "capability-manifest": "supported",
11
+ "post-arm": "supported",
12
+ "wake-origin-codec": "supported",
13
+ "unified-action-plane": {
14
+ unsupported: "an issue comment is markdown and carries no component plane at all — GitHub offers no tappable button a bot may render into a timeline comment, so there is nothing for a tap route to receive. The bridged approval posts as prose, which the question bridge already renders complete",
15
+ },
16
+ "origin-placement-carry": {
17
+ unsupported: "the placement is INSIDE the conversation identity: a reply is a comment appended to the issue timeline and the issue IS `threadRef`'s thread key, so there is no 'where inside it' left to name",
18
+ },
19
+ "read-adapter": "supported",
20
+ // 🔴 A POLL, not a delivery, and the note says so because the latency is real. GitHub pushes no
21
+ // reaction webhook at all, so the arm reads the reactions on the agent's own comments when a
22
+ // later delivery names their conversation. Only an ADD is observable — the route returns the
23
+ // reactions that exist, never one that was taken away.
24
+ "reaction-feedback-ingest": { supported: "polled on the next delivery for that conversation — GitHub pushes no reaction webhook, so a removal is never observed" },
25
+ "ancillary-ops": "supported",
26
+ "ambient-engagement-seam": "supported",
27
+ // `githubWakeAddressing` (channels/github-engagement.ts) carries the admission's own `deliver`
28
+ // verdict to the `github.dispatched` row, so an engaged follow-up reads `thread-follow` and
29
+ // unowned issue chatter still reads `channel-watch`. The verdict is floored on
30
+ // `githubEngagedFollowUpReach`, so an engaged issue on a public or unknown-privacy repo, and an
31
+ // inline review comment, still write `channel-watch` — the engaged door is shut there. The wake
32
+ // envelope is untouched: the turn is judged, and the silence bar set, exactly as before
33
+ // (OPE-1752).
34
+ "engaged-row-promotion": "supported",
35
+ // The container and the thread coincide — an issue or pull request IS its own thread — so every
36
+ // wake this surface diverts is thread-scoped and consults ownership.
37
+ "owned-thread-ingress": "supported",
38
+ // --- wake legs and conversation shapes -------------------------------------------------------
39
+ "addressed-leg": "supported",
40
+ // The ambient supervisor, a different mechanism from the §2.5 registry: the domain opt-in and the
41
+ // operator vouch decide whether it runs, and the registry has never gated that. The registry does
42
+ // SUPPRESS it, though — `ambientDelivery` drops a comment in a container `stand_down` marked, and
43
+ // drops one the native leg now owns (OPE-1501).
44
+ "ambient-leg": { supported: "the ambient supervisor, not the §2.5 engagement registry" },
45
+ // `github-catch-up.ts` reads `/issues/:n/comments?since=` for the conversation the seat is woken
46
+ // on, over the same brokered conversation-read token `read_channel` uses. The vendor's own `since`
47
+ // filter does the narrowing, so a seat that woke a minute ago pays for a near-empty page.
48
+ "seat-catch-up": "supported",
49
+ // The supervisor wake fills the slot with ONE host-composed issue/PR title line, and pours it
50
+ // through the core seam (github-supervisor.ts). One line is still a pour: a `members-only` domain
51
+ // must get the same answer here as it gets on the catch-up read beside it.
52
+ // 🔴 BARE, NOT `{ supported: "…" }` — a noted cell is exempt from the overclaim arm, and this
53
+ // surface is half of the OPE-1800 class the arm exists to catch.
54
+ "seat-context-admission": "supported",
55
+ // A GitHub comment carries no component plane at all — there is no button to tap and no route for
56
+ // a tap to arrive on. See the roster row for what that costs and where it does NOT cost anything.
57
+ "approval-card": { unsupported: "an issue/PR comment carries no component plane, so there is no button to render and no route for a tap. A governed act that takes the venue walk is redirected to a card-capable room in the SAME domain, or refused when the domain holds none. The paths OUTSIDE that walk do not: the spend checkpoint (spend/checkpoint.ts `requireSessionContinuation`) fails OPEN here and records the crossing in an audit row instead" },
58
+ // THE TRACE ARRIVES EVEN THOUGH THE BUTTON CANNOT (OPE-1854). A judge-lifted act posts its
59
+ // notice here as a plain issue or pull-request comment through the shared road (`postJudgeLiftNotice`), on this
60
+ // surface's own `SurfaceMessageOps` transport. It carries the overrule as an INSTRUCTION in
61
+ // words, with the action id a reviewer finds the act by, because no tap can land here.
62
+ // 🔴 BARE, NOT `{ supported: "…" }`. A noted cell is exempt from the overclaim arm, and the
63
+ // arm is the point: drop this bundle's text transport and the notice silently stops arriving.
64
+ "judge-lift-notice": "supported",
65
+ "name-drop-mention": { unsupported: "not built yet — the ambient supervisor already reads every comment, so a name-drop match adds no wake" },
66
+ // 🔴 EVERY WAKE LEG ADMITS `created` ONLY, and that is the narrower true claim. The delivery DOES
67
+ // reach OE code — `wrapRoute` runs the fan-out, the installation leg and the reaction poll on an
68
+ // edited comment like any other — but no leg that can start a turn admits one: eve's route
69
+ // dispatches `issue_comment`/`pull_request_review_comment` with `action: "created"`,
70
+ // `extractGitHubAmbientEvent` reads the same created-only shape, and `parseGitHubStopComment`
71
+ // agrees.
72
+ "message-edit-wake": { unsupported: "every wake leg admits `action: \"created\"` only — eve's route, the ambient extractor and the stop leg each refuse an edited comment" },
73
+ // A review thread on a pull request (§4.6.1).
74
+ threads: "supported",
75
+ // A STANDING room (§4.7.1's sense), not §4.5's read_channel container — GitHub has the latter and
76
+ // `read_channel` is supported below. Every GitHub container is one issue or pull request, so it
77
+ // exists because somebody filed work and is about that work.
78
+ rooms: { unsupported: "no standing container — every GitHub container is one issue or pull request" },
79
+ dm: { unsupported: "no DM plane — GitHub carries no person-to-person message channel" },
80
+ mpim: { unsupported: "no DM plane — GitHub carries no person-to-person message channel" },
81
+ // --- core verbs (§7.2) -----------------------------------------------------------------------
82
+ reply: "supported",
83
+ edit_reply: "supported",
84
+ react: "supported",
85
+ no_reply: "supported",
86
+ read_channel: "supported",
87
+ read_thread: "supported",
88
+ // The work-search adapter is CORE-resident and ungated (packages/core/agent/scm/github-search.ts,
89
+ // `registerCoreWorkSearchAdapter`), not registered from this bundle — but the corpus is GitHub's.
90
+ search: { supported: "the core-resident adapter (`scm/github-search.ts`), registered ungated" },
91
+ // NOT a structural absence, and the reason matters: the transport exists (this bundle registers
92
+ // `SurfaceMessageOps`, and `approvals/chat-post.ts` posts through it). What refuses is the closed
93
+ // `RESOURCE_TYPES` table in `access/resource-grant.ts`, which carries no row for this surface, so
94
+ // no `channel` grant can be minted and `chatWriteMount` never arms the tool.
95
+ post_message: { unsupported: "not built yet — no `channel` row in `access/resource-grant.ts` — OPE-1507" },
96
+ dm_person: { unsupported: "no DM plane — GitHub carries no person-to-person message channel (§4.7.2)" },
97
+ set_dm_delivery: { unsupported: "no DM plane — the verb mounts only inside a 1:1 DM (§4.7.2)" },
98
+ // GitHub sends no webhook for a reaction at all, so the trigger is a comment whose ENTIRE body is
99
+ // the word `stop` — one thing only, never a magic string competing with real messages (§4.8).
100
+ stop: { supported: "a comment whose entire body is `stop` — GitHub sends no reaction webhook" },
101
+ // `react` IS wired, so this is not "no reaction primitive". GitHub's reaction set is the fixed
102
+ // eight (+1, -1, laugh, confused, heart, hooray, rocket, eyes) and none of them is a raised hand,
103
+ // so there is no glyph to place — github-message-ops.ts offers no `setReaction` for that reason
104
+ // rather than faking one against the wrong emoji.
105
+ ack_stop_glyph: { unsupported: "vendor limit — GitHub's fixed eight reactions carry no raised hand, so there is no ✋ to place" },
106
+ ack_cancel_note: "supported",
107
+ stand_down: { supported: "marks the issue/pull-request row; refuses when no row exists" },
108
+ post_file: { unsupported: "vendor limit — a GitHub comment carries no file-attachment API" },
109
+ };
110
+ //# sourceMappingURL=surface-parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-parity.js","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wFAAwF;AACxF,EAAE;AACF,+FAA+F;AAC/F,kGAAkG;AAClG,sEAAsE;AAItE,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,gGAAgG;IAChG,iBAAiB,EAAE,WAAW;IAC9B,qBAAqB,EAAE,WAAW;IAClC,UAAU,EAAE,WAAW;IACvB,mBAAmB,EAAE,WAAW;IAChC,sBAAsB,EAAE;QACtB,WAAW,EACT,yRAAyR;KAC5R;IACD,wBAAwB,EAAE;QACxB,WAAW,EACT,iMAAiM;KACpM;IACD,cAAc,EAAE,WAAW;IAC3B,gGAAgG;IAChG,6FAA6F;IAC7F,6FAA6F;IAC7F,uDAAuD;IACvD,0BAA0B,EAAE,EAAE,SAAS,EAAE,uHAAuH,EAAE;IAClK,eAAe,EAAE,WAAW;IAC5B,yBAAyB,EAAE,WAAW;IACtC,+FAA+F;IAC/F,4FAA4F;IAC5F,+EAA+E;IAC/E,gGAAgG;IAChG,gGAAgG;IAChG,wFAAwF;IACxF,cAAc;IACd,uBAAuB,EAAE,WAAW;IACpC,gGAAgG;IAChG,qEAAqE;IACrE,sBAAsB,EAAE,WAAW;IAEnC,gGAAgG;IAChG,eAAe,EAAE,WAAW;IAC5B,kGAAkG;IAClG,kGAAkG;IAClG,kGAAkG;IAClG,gDAAgD;IAChD,aAAa,EAAE,EAAE,SAAS,EAAE,0DAA0D,EAAE;IACxF,iGAAiG;IACjG,mGAAmG;IACnG,0FAA0F;IAC1F,eAAe,EAAE,WAAW;IAC5B,8FAA8F;IAC9F,kGAAkG;IAClG,2EAA2E;IAC3E,8FAA8F;IAC9F,iEAAiE;IACjE,wBAAwB,EAAE,WAAW;IACrC,kGAAkG;IAClG,kGAAkG;IAClG,eAAe,EAAE,EAAE,WAAW,EAAE,+ZAA+Z,EAAE;IACjc,2FAA2F;IAC3F,gHAAgH;IAChH,4FAA4F;IAC5F,uFAAuF;IACvF,4FAA4F;IAC5F,8FAA8F;IAC9F,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,EAAE,WAAW,EAAE,uGAAuG,EAAE;IAC7I,kGAAkG;IAClG,iGAAiG;IACjG,2FAA2F;IAC3F,qFAAqF;IACrF,8FAA8F;IAC9F,UAAU;IACV,mBAAmB,EAAE,EAAE,WAAW,EAAE,sIAAsI,EAAE;IAC5K,8CAA8C;IAC9C,OAAO,EAAE,WAAW;IACpB,kGAAkG;IAClG,gGAAgG;IAChG,6DAA6D;IAC7D,KAAK,EAAE,EAAE,WAAW,EAAE,6EAA6E,EAAE;IACrG,EAAE,EAAE,EAAE,WAAW,EAAE,kEAAkE,EAAE;IACvF,IAAI,EAAE,EAAE,WAAW,EAAE,kEAAkE,EAAE;IAEzF,gGAAgG;IAChG,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,WAAW;IACzB,WAAW,EAAE,WAAW;IACxB,kGAAkG;IAClG,kGAAkG;IAClG,MAAM,EAAE,EAAE,SAAS,EAAE,wEAAwE,EAAE;IAC/F,gGAAgG;IAChG,kGAAkG;IAClG,kGAAkG;IAClG,6EAA6E;IAC7E,YAAY,EAAE,EAAE,WAAW,EAAE,2EAA2E,EAAE;IAC1G,SAAS,EAAE,EAAE,WAAW,EAAE,2EAA2E,EAAE;IACvG,eAAe,EAAE,EAAE,WAAW,EAAE,6DAA6D,EAAE;IAC/F,kGAAkG;IAClG,8FAA8F;IAC9F,IAAI,EAAE,EAAE,SAAS,EAAE,0EAA0E,EAAE;IAC/F,+FAA+F;IAC/F,kGAAkG;IAClG,gGAAgG;IAChG,kDAAkD;IAClD,cAAc,EAAE,EAAE,WAAW,EAAE,+FAA+F,EAAE;IAChI,eAAe,EAAE,WAAW;IAC5B,UAAU,EAAE,EAAE,SAAS,EAAE,8DAA8D,EAAE;IACzF,SAAS,EAAE,EAAE,WAAW,EAAE,gEAAgE,EAAE;CAC7F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,158 @@
1
1
  {
2
2
  "name": "@open-everywhere/provider-github",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Open Everywhere GitHub provider — GitHub issues and pull requests as a conversational wake surface.",
5
+ "keywords": [
6
+ "agent",
7
+ "github",
8
+ "github-app",
9
+ "chatops",
10
+ "eve"
11
+ ],
12
+ "license": "Apache-2.0",
13
+ "type": "module",
14
+ "homepage": "https://github.com/open-everywhere/open-everywhere/tree/main/packages/providers/github",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/open-everywhere/open-everywhere.git",
18
+ "directory": "packages/providers/github"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/open-everywhere/open-everywhere/issues"
22
+ },
23
+ "engines": {
24
+ "node": ">=24"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "files": [
30
+ "agent",
31
+ "dist",
32
+ "tsconfig.json",
33
+ "tsconfig.build.json",
34
+ "LICENSE",
35
+ "NOTICE"
36
+ ],
37
+ "exports": {
38
+ "./package.json": "./package.json",
39
+ "./agent/channels/github-catch-up.js": {
40
+ "types": "./dist/agent/channels/github-catch-up.d.ts",
41
+ "default": "./dist/agent/channels/github-catch-up.js"
42
+ },
43
+ "./agent/channels/github-engagement.js": {
44
+ "types": "./dist/agent/channels/github-engagement.d.ts",
45
+ "default": "./dist/agent/channels/github-engagement.js"
46
+ },
47
+ "./agent/channels/github-identity.js": {
48
+ "types": "./dist/agent/channels/github-identity.d.ts",
49
+ "default": "./dist/agent/channels/github-identity.js"
50
+ },
51
+ "./agent/channels/github-installations.js": {
52
+ "types": "./dist/agent/channels/github-installations.d.ts",
53
+ "default": "./dist/agent/channels/github-installations.js"
54
+ },
55
+ "./agent/channels/github-message-ops.js": {
56
+ "types": "./dist/agent/channels/github-message-ops.d.ts",
57
+ "default": "./dist/agent/channels/github-message-ops.js"
58
+ },
59
+ "./agent/channels/github-origin-codec.js": {
60
+ "types": "./dist/agent/channels/github-origin-codec.d.ts",
61
+ "default": "./dist/agent/channels/github-origin-codec.js"
62
+ },
63
+ "./agent/channels/github-post-arm.js": {
64
+ "types": "./dist/agent/channels/github-post-arm.d.ts",
65
+ "default": "./dist/agent/channels/github-post-arm.js"
66
+ },
67
+ "./agent/channels/github-reaction-feedback.js": {
68
+ "types": "./dist/agent/channels/github-reaction-feedback.d.ts",
69
+ "default": "./dist/agent/channels/github-reaction-feedback.js"
70
+ },
71
+ "./agent/channels/github-reaction-scope.js": {
72
+ "types": "./dist/agent/channels/github-reaction-scope.d.ts",
73
+ "default": "./dist/agent/channels/github-reaction-scope.js"
74
+ },
75
+ "./agent/channels/github-read.js": {
76
+ "types": "./dist/agent/channels/github-read.d.ts",
77
+ "default": "./dist/agent/channels/github-read.js"
78
+ },
79
+ "./agent/channels/github-stop.js": {
80
+ "types": "./dist/agent/channels/github-stop.d.ts",
81
+ "default": "./dist/agent/channels/github-stop.js"
82
+ },
83
+ "./agent/channels/github-supervisor.js": {
84
+ "types": "./dist/agent/channels/github-supervisor.d.ts",
85
+ "default": "./dist/agent/channels/github-supervisor.js"
86
+ },
87
+ "./agent/channels/github-webhook-verifier.js": {
88
+ "types": "./dist/agent/channels/github-webhook-verifier.d.ts",
89
+ "default": "./dist/agent/channels/github-webhook-verifier.js"
90
+ },
91
+ "./agent/channels/github.js": {
92
+ "types": "./dist/agent/channels/github.d.ts",
93
+ "default": "./dist/agent/channels/github.js"
94
+ },
95
+ "./agent/contributions.js": {
96
+ "types": "./dist/agent/contributions.d.ts",
97
+ "default": "./dist/agent/contributions.js"
98
+ },
99
+ "./agent/docs-generated.js": {
100
+ "types": "./dist/agent/docs-generated.d.ts",
101
+ "default": "./dist/agent/docs-generated.js"
102
+ },
103
+ "./agent/memory/memory.js": {
104
+ "types": "./dist/agent/memory/memory.d.ts",
105
+ "default": "./dist/agent/memory/memory.js"
106
+ },
107
+ "./agent/ops.js": {
108
+ "types": "./dist/agent/ops.d.ts",
109
+ "default": "./dist/agent/ops.js"
110
+ },
111
+ "./agent/provider-events.js": {
112
+ "types": "./dist/agent/provider-events.d.ts",
113
+ "default": "./dist/agent/provider-events.js"
114
+ },
115
+ "./agent/register.js": {
116
+ "types": "./dist/agent/register.d.ts",
117
+ "default": "./dist/agent/register.js"
118
+ },
119
+ "./agent/surface-parity.js": {
120
+ "types": "./dist/agent/surface-parity.d.ts",
121
+ "default": "./dist/agent/surface-parity.js"
122
+ }
123
+ },
124
+ "scripts": {
125
+ "build": "tsc -p tsconfig.build.json",
126
+ "typecheck": "tsc --noEmit -p tsconfig.json",
127
+ "test": "npm run test:chain",
128
+ "test:chain": "npm run test:github-supervisor && npm run test:github-identity && npm run test:github-post-arm && npm run test:github-installations && npm run test:github-webhook-verifier && npm run test:github-memory && npm run test:github-stop && npm run test:github-engagement && npm run test:github-reaction-feedback && npm run test:github-read && npm run test:github-mint-scope && npm run test:github-message-ops && npm run test:github-wake-failure-audit && npm run test:github-rate-limit && npm run test:github-write-seam && npm run test:github-reaction-scope",
129
+ "test:github-wake-failure-audit": "NODE_NO_WARNINGS=1 tsx scripts/github-wake-failure-audit-test.ts",
130
+ "test:github-rate-limit": "NODE_NO_WARNINGS=1 tsx scripts/github-rate-limit-test.ts",
131
+ "test:github-write-seam": "NODE_NO_WARNINGS=1 tsx scripts/github-write-seam-test.ts",
132
+ "test:github-read": "NODE_NO_WARNINGS=1 tsx scripts/github-read-test.ts",
133
+ "test:github-message-ops": "NODE_NO_WARNINGS=1 tsx scripts/github-message-ops-test.ts",
134
+ "test:github-supervisor": "NODE_NO_WARNINGS=1 tsx scripts/github-supervisor-test.ts",
135
+ "test:github-identity": "NODE_NO_WARNINGS=1 tsx scripts/github-identity-test.ts",
136
+ "test:github-post-arm": "NODE_NO_WARNINGS=1 tsx scripts/github-post-arm-test.ts",
137
+ "test:github-installations": "NODE_NO_WARNINGS=1 tsx scripts/github-installations-test.ts",
138
+ "test:github-webhook-verifier": "NODE_NO_WARNINGS=1 tsx scripts/github-webhook-verifier-test.ts",
139
+ "test:github-memory": "NODE_NO_WARNINGS=1 tsx scripts/github-memory-test.ts",
140
+ "test:github-stop": "NODE_NO_WARNINGS=1 tsx scripts/github-stop-test.ts",
141
+ "test:github-reaction-feedback": "NODE_NO_WARNINGS=1 tsx scripts/github-reaction-feedback-test.ts",
142
+ "test:github-engagement": "NODE_NO_WARNINGS=1 tsx scripts/github-engagement-test.ts",
143
+ "test:github-mint-scope": "NODE_NO_WARNINGS=1 tsx scripts/github-mint-scope-test.ts",
144
+ "test:github-reaction-scope": "NODE_NO_WARNINGS=1 tsx scripts/github-reaction-scope-test.ts"
145
+ },
146
+ "dependencies": {
147
+ "@open-everywhere/core": "0.1.0",
148
+ "zod": "4.5.4"
149
+ },
150
+ "peerDependencies": {
151
+ "eve": "0.54.3"
152
+ },
153
+ "devDependencies": {
154
+ "@types/node": "latest",
155
+ "tsx": "latest",
156
+ "typescript": "latest"
157
+ }
158
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ // PUBLISH BUILD (OPE-406). See packages/core/tsconfig.build.json for the full rationale: the
3
+ // sibling tsconfig.json stays noEmit (it is the typecheck gate and covers scripts/** too); this
4
+ // config emits ONLY the published surface (agent/**) into dist/, because a registry install
5
+ // cannot execute raw TypeScript and "eve build" evaluates the authored agent modules.
6
+ "extends": "./tsconfig.json",
7
+ "compilerOptions": {
8
+ "noEmit": false,
9
+ // Incremental: these run from every pre-hook (pretypecheck/pretest/prebuild), so a no-op
10
+ // rebuild has to be near-free or the gate chain pays a full tsc on every invocation.
11
+ "incremental": true,
12
+ // OUTSIDE outDir on purpose: a tsbuildinfo left in dist/ gets swept up by the files
13
+ // allowlist and PUBLISHED (caught by the tarball listing, 2026-08-12).
14
+ "tsBuildInfoFile": "./.tsbuildinfo",
15
+ "declaration": true,
16
+ "declarationMap": true,
17
+ "sourceMap": true,
18
+ "outDir": "dist",
19
+ "rootDir": "."
20
+ },
21
+ "include": ["agent/**/*.ts"]
22
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2023",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "lib": ["ES2023"],
7
+ "strict": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "noEmit": true,
11
+ "resolveJsonModule": true,
12
+ "types": ["node"]
13
+ },
14
+ "include": ["agent/**/*.ts", "scripts/**/*.ts"]
15
+ }