pi-ghwebhook 0.1.0 → 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.
- package/CHANGELOG.md +6 -0
- package/README.md +68 -94
- package/README_zh.md +56 -82
- package/dist/bus/event-bus.d.ts +6 -6
- package/dist/bus/event-bus.d.ts.map +1 -1
- package/dist/bus/event-bus.js +31 -38
- package/dist/bus/event-bus.js.map +1 -1
- package/dist/bus/matcher.d.ts +7 -0
- package/dist/bus/matcher.d.ts.map +1 -0
- package/dist/bus/matcher.js +122 -0
- package/dist/bus/matcher.js.map +1 -0
- package/dist/config/loader.d.ts +2 -2
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +1 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/types/schema.d.ts +23 -49
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/types/schema.js +23 -37
- package/dist/types/schema.js.map +1 -1
- package/package.json +6 -1
- package/schemas/ghwebhook.schema.json +225 -0
- package/skills/setup-ghwebhook/SKILL.md +149 -0
- package/skills/setup-ghwebhook/assets/default-config.json +31 -0
- package/src/bus/event-bus.ts +33 -41
- package/src/bus/matcher.ts +164 -0
- package/src/config/loader.ts +4 -4
- package/src/index.ts +6 -5
- package/src/types/schema.ts +36 -68
- package/src/bus/guards.ts +0 -118
- package/src/bus/normalizer.ts +0 -32
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export function globMatch(pattern, text) {
|
|
2
|
+
if (pattern === text || pattern === "*")
|
|
3
|
+
return true;
|
|
4
|
+
const escaped = pattern
|
|
5
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
6
|
+
.replace(/\*\*/g, ".*")
|
|
7
|
+
.replace(/\*/g, ".*");
|
|
8
|
+
const regex = new RegExp(`^${escaped}$`);
|
|
9
|
+
return regex.test(text);
|
|
10
|
+
}
|
|
11
|
+
export function resolvePayloadBranch(payload) {
|
|
12
|
+
return (payload.workflow_run?.head_branch ??
|
|
13
|
+
payload.pull_request?.head?.ref ??
|
|
14
|
+
payload.check_suite?.head_branch ??
|
|
15
|
+
payload.workflow_job?.head_branch ??
|
|
16
|
+
(typeof payload.ref === "string"
|
|
17
|
+
? payload.ref.replace("refs/heads/", "")
|
|
18
|
+
: undefined));
|
|
19
|
+
}
|
|
20
|
+
function matchBranches(branches, actualBranch, currentBranch) {
|
|
21
|
+
for (const pattern of branches) {
|
|
22
|
+
if (pattern === "@current" && actualBranch === currentBranch) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (globMatch(pattern, actualBranch)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
function matchTypes(types, action) {
|
|
32
|
+
if (!Array.isArray(types) || types.length === 0)
|
|
33
|
+
return true;
|
|
34
|
+
const actionStr = typeof action === "string" ? action : "";
|
|
35
|
+
return types.includes(actionStr);
|
|
36
|
+
}
|
|
37
|
+
function matchBranchFilter(branches, payload, currentBranch) {
|
|
38
|
+
if (!Array.isArray(branches) || branches.length === 0)
|
|
39
|
+
return true;
|
|
40
|
+
const actualBranch = resolvePayloadBranch(payload);
|
|
41
|
+
return Boolean(actualBranch && matchBranches(branches, actualBranch, currentBranch));
|
|
42
|
+
}
|
|
43
|
+
function matchWorkflows(workflows, payload) {
|
|
44
|
+
if (!Array.isArray(workflows) || workflows.length === 0)
|
|
45
|
+
return true;
|
|
46
|
+
const workflowName = payload.workflow_run?.name ?? payload.workflow_job?.workflow_name ?? "";
|
|
47
|
+
return workflows.some((w) => globMatch(w, workflowName));
|
|
48
|
+
}
|
|
49
|
+
export function isTriggerMatched(trigger, payload, currentBranch) {
|
|
50
|
+
if (!trigger)
|
|
51
|
+
return true;
|
|
52
|
+
return (matchTypes(trigger.types, payload.action) &&
|
|
53
|
+
matchBranchFilter(trigger.branches, payload, currentBranch) &&
|
|
54
|
+
matchWorkflows(trigger.workflows, payload));
|
|
55
|
+
}
|
|
56
|
+
function getNestedValue(obj, path) {
|
|
57
|
+
const parts = path.split(".");
|
|
58
|
+
let current = obj;
|
|
59
|
+
for (const part of parts) {
|
|
60
|
+
if (current == null || typeof current !== "object")
|
|
61
|
+
return undefined;
|
|
62
|
+
current = current[part];
|
|
63
|
+
}
|
|
64
|
+
return current;
|
|
65
|
+
}
|
|
66
|
+
function resolveContextValue(path, payload, currentBranch) {
|
|
67
|
+
const cleanPath = path
|
|
68
|
+
.replace(/^github\.event\./, "")
|
|
69
|
+
.replace(/^event\./, "")
|
|
70
|
+
.trim();
|
|
71
|
+
// Special shortcuts
|
|
72
|
+
if (cleanPath === "branch")
|
|
73
|
+
return resolvePayloadBranch(payload) ?? currentBranch;
|
|
74
|
+
if (cleanPath === "conclusion")
|
|
75
|
+
return payload.workflow_run?.conclusion ?? payload.check_suite?.conclusion;
|
|
76
|
+
if (cleanPath === "sender")
|
|
77
|
+
return payload.sender?.login ?? payload.review?.user?.login;
|
|
78
|
+
if (cleanPath === "isBot") {
|
|
79
|
+
const senderType = payload.review?.user?.type ?? payload.sender?.type;
|
|
80
|
+
const login = payload.review?.user?.login ?? payload.sender?.login ?? "";
|
|
81
|
+
return senderType === "Bot" || login.endsWith("[bot]");
|
|
82
|
+
}
|
|
83
|
+
return getNestedValue(payload, cleanPath);
|
|
84
|
+
}
|
|
85
|
+
function parseLiteral(literal) {
|
|
86
|
+
const trimmed = literal.trim();
|
|
87
|
+
if (trimmed === "true")
|
|
88
|
+
return true;
|
|
89
|
+
if (trimmed === "false")
|
|
90
|
+
return false;
|
|
91
|
+
if (trimmed === "null")
|
|
92
|
+
return null;
|
|
93
|
+
if (/^['"].*['"]$/.test(trimmed)) {
|
|
94
|
+
return trimmed.slice(1, -1);
|
|
95
|
+
}
|
|
96
|
+
const num = Number(trimmed);
|
|
97
|
+
if (!Number.isNaN(num))
|
|
98
|
+
return num;
|
|
99
|
+
return trimmed;
|
|
100
|
+
}
|
|
101
|
+
export function evaluateCondition(expr, payload, currentBranch) {
|
|
102
|
+
if (!expr || !expr.trim())
|
|
103
|
+
return true;
|
|
104
|
+
const match = expr.match(/^(.+?)\s*(===|!==|==|!=)\s*(.+)$/);
|
|
105
|
+
if (!match) {
|
|
106
|
+
const val = resolveContextValue(expr.trim(), payload, currentBranch);
|
|
107
|
+
return Boolean(val);
|
|
108
|
+
}
|
|
109
|
+
const [, leftRaw, op, rightRaw] = match;
|
|
110
|
+
const leftVal = resolveContextValue(leftRaw.trim(), payload, currentBranch);
|
|
111
|
+
const rightVal = parseLiteral(rightRaw.trim());
|
|
112
|
+
const isEqualOp = op === "==" || op === "===";
|
|
113
|
+
if (typeof rightVal === "string" &&
|
|
114
|
+
typeof leftVal === "string" &&
|
|
115
|
+
rightVal.includes("*")) {
|
|
116
|
+
const matchesGlob = globMatch(rightVal, leftVal);
|
|
117
|
+
return isEqualOp ? matchesGlob : !matchesGlob;
|
|
118
|
+
}
|
|
119
|
+
const areEqual = leftVal === rightVal;
|
|
120
|
+
return isEqualOp ? areEqual : !areEqual;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/bus/matcher.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function loadProjectConfig(cwd: string): Promise<
|
|
1
|
+
import type { GhWebhookWorkflow } from "../types/schema.js";
|
|
2
|
+
export declare function loadProjectConfig(cwd: string): Promise<GhWebhookWorkflow | null>;
|
|
3
3
|
export declare function resolveGitBranch(cwd: string): Promise<string>;
|
|
4
4
|
export declare function parseGitHubRepo(remoteUrl: string): string | null;
|
|
5
5
|
export declare function resolveGitRepo(cwd: string): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAmB5D,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWnE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxE"}
|
package/dist/config/loader.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function loadProjectConfig(cwd) {
|
|
|
24
24
|
try {
|
|
25
25
|
const content = await readFile(fullPath, "utf8");
|
|
26
26
|
const parsed = JSON.parse(content);
|
|
27
|
-
if (parsed && typeof parsed === "object" && parsed.
|
|
27
|
+
if (parsed && typeof parsed === "object" && parsed.on && parsed.jobs) {
|
|
28
28
|
return parsed;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,iBAAiB,GAAG;IACxB,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;CACjB,CAAC;AAEF,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW;IAEX,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,iBAAiB,GAAG;IACxB,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;CACjB,CAAC;AAEF,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW;IAEX,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;gBACxD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACrE,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,6CAA6C,QAAQ,GAAG,EACxD,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,KAAK,EACL,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EACrC,EAAE,GAAG,EAAE,CACR,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAC5B,kEAAkE,CACnE,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CACpC,KAAK,EACL,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC/B,EAAE,GAAG,EAAE,CACR,CAAC;QACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAUpE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAgGjE"}
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ export default function ghWebhookExtension(pi) {
|
|
|
22
22
|
pi.on("session_start", async (_event, ctx) => {
|
|
23
23
|
// 1. 工作区探测:若当前项目无 .pi/ghwebhook.json,则静默休眠,零资源占用
|
|
24
24
|
const config = await loadProjectConfig(ctx.cwd);
|
|
25
|
-
if (!config
|
|
25
|
+
if (!config) {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
// 2. 解析当前 Git 分支与远端仓库
|
|
@@ -36,8 +36,8 @@ export default function ghWebhookExtension(pi) {
|
|
|
36
36
|
}
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
// 3.
|
|
40
|
-
const bus = new WebhookEventBus(config
|
|
39
|
+
// 3. 构建 GitHub Actions Workflow 事件总线
|
|
40
|
+
const bus = new WebhookEventBus(config);
|
|
41
41
|
// 4. 启动随机端口本地回环服务器
|
|
42
42
|
loopback = new LoopbackServer({
|
|
43
43
|
secret: config.secret,
|
|
@@ -60,7 +60,7 @@ export default function ghWebhookExtension(pi) {
|
|
|
60
60
|
}
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
// 5. 托管 gh webhook forward
|
|
63
|
+
// 5. 托管 gh webhook forward 长连接子进程(全量监听)
|
|
64
64
|
forwarder = new GhForwarder({
|
|
65
65
|
repo,
|
|
66
66
|
url: loopback.getUrl(),
|
|
@@ -71,7 +71,8 @@ export default function ghWebhookExtension(pi) {
|
|
|
71
71
|
});
|
|
72
72
|
forwarder.start();
|
|
73
73
|
if (ctx.hasUI) {
|
|
74
|
-
|
|
74
|
+
const displayName = config.name ? `[${config.name}]` : "[pi-ghwebhook]";
|
|
75
|
+
ctx.ui.notify(`${displayName} 已监听 ${repo} (${currentBranch}) 事件流 (端口: ${loopback.getPort()})`, "info");
|
|
75
76
|
}
|
|
76
77
|
});
|
|
77
78
|
pi.on("session_shutdown", async () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAgB;IACzD,IAAI,QAAQ,GAA0B,IAAI,CAAC;IAC3C,IAAI,SAAS,GAAuB,IAAI,CAAC;IAEzC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,IAAI,SAAS;YAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/schema.d.ts
CHANGED
|
@@ -1,59 +1,33 @@
|
|
|
1
1
|
import { Type, type Static } from "typebox";
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
state: Type.TOptional<Type.TString>;
|
|
7
|
-
senders: Type.TOptional<Type.TArray<Type.TString>>;
|
|
8
|
-
isBot: Type.TOptional<Type.TBoolean>;
|
|
9
|
-
match: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean]>>>;
|
|
2
|
+
export declare const EventTriggerSchema: Type.TObject<{
|
|
3
|
+
types: Type.TOptional<Type.TArray<Type.TString>>;
|
|
4
|
+
branches: Type.TOptional<Type.TArray<Type.TString>>;
|
|
5
|
+
workflows: Type.TOptional<Type.TArray<Type.TString>>;
|
|
10
6
|
}>;
|
|
11
|
-
export type
|
|
12
|
-
export declare const
|
|
7
|
+
export type EventTriggerConfig = Static<typeof EventTriggerSchema>;
|
|
8
|
+
export declare const JobSchema: Type.TObject<{
|
|
9
|
+
name: Type.TOptional<Type.TString>;
|
|
10
|
+
if: Type.TOptional<Type.TString>;
|
|
13
11
|
prompt: Type.TString;
|
|
14
12
|
deliverAs: Type.TOptional<Type.TUnion<[Type.TLiteral<"steer">, Type.TLiteral<"followUp">]>>;
|
|
15
13
|
}>;
|
|
16
|
-
export type
|
|
17
|
-
export declare const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
filters: Type.TOptional<Type.TObject<{
|
|
21
|
-
branch: Type.TOptional<Type.TString>;
|
|
22
|
-
conclusion: Type.TOptional<Type.TString>;
|
|
23
|
-
workflow: Type.TOptional<Type.TString>;
|
|
24
|
-
state: Type.TOptional<Type.TString>;
|
|
25
|
-
senders: Type.TOptional<Type.TArray<Type.TString>>;
|
|
26
|
-
isBot: Type.TOptional<Type.TBoolean>;
|
|
27
|
-
match: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean]>>>;
|
|
28
|
-
}>>;
|
|
29
|
-
action: Type.TObject<{
|
|
30
|
-
prompt: Type.TString;
|
|
31
|
-
deliverAs: Type.TOptional<Type.TUnion<[Type.TLiteral<"steer">, Type.TLiteral<"followUp">]>>;
|
|
32
|
-
}>;
|
|
33
|
-
}>;
|
|
34
|
-
export type SubscriptionRule = Static<typeof SubscriptionRuleSchema>;
|
|
35
|
-
export declare const ConfigSchema: Type.TObject<{
|
|
36
|
-
version: Type.TLiteral<1>;
|
|
37
|
-
enabled: Type.TBoolean;
|
|
14
|
+
export type JobConfig = Static<typeof JobSchema>;
|
|
15
|
+
export declare const WorkflowSchema: Type.TObject<{
|
|
16
|
+
$schema: Type.TOptional<Type.TString>;
|
|
17
|
+
name: Type.TOptional<Type.TString>;
|
|
38
18
|
repo: Type.TOptional<Type.TString>;
|
|
39
19
|
secret: Type.TOptional<Type.TString>;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
match: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TString, Type.TNumber, Type.TBoolean]>>>;
|
|
51
|
-
}>>;
|
|
52
|
-
action: Type.TObject<{
|
|
53
|
-
prompt: Type.TString;
|
|
54
|
-
deliverAs: Type.TOptional<Type.TUnion<[Type.TLiteral<"steer">, Type.TLiteral<"followUp">]>>;
|
|
55
|
-
}>;
|
|
20
|
+
on: Type.TUnion<[Type.TString, Type.TArray<Type.TString>, Type.TRecord<"^.*$", Type.TUnion<[Type.TNull, Type.TObject<{
|
|
21
|
+
types: Type.TOptional<Type.TArray<Type.TString>>;
|
|
22
|
+
branches: Type.TOptional<Type.TArray<Type.TString>>;
|
|
23
|
+
workflows: Type.TOptional<Type.TArray<Type.TString>>;
|
|
24
|
+
}>]>>]>;
|
|
25
|
+
jobs: Type.TRecord<"^.*$", Type.TObject<{
|
|
26
|
+
name: Type.TOptional<Type.TString>;
|
|
27
|
+
if: Type.TOptional<Type.TString>;
|
|
28
|
+
prompt: Type.TString;
|
|
29
|
+
deliverAs: Type.TOptional<Type.TUnion<[Type.TLiteral<"steer">, Type.TLiteral<"followUp">]>>;
|
|
56
30
|
}>>;
|
|
57
31
|
}>;
|
|
58
|
-
export type
|
|
32
|
+
export type GhWebhookWorkflow = Static<typeof WorkflowSchema>;
|
|
59
33
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;;EAe9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,SAAS;;;;;EAkBrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AAEjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;EA2B1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
package/dist/types/schema.js
CHANGED
|
@@ -1,49 +1,35 @@
|
|
|
1
1
|
import { Type } from "typebox";
|
|
2
|
-
export const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
description: "
|
|
6
|
-
})),
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
})),
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
})
|
|
15
|
-
match: Type.Optional(Type.Record(Type.String(), Type.Union([Type.String(), Type.Number(), Type.Boolean()]), {
|
|
16
|
-
description: "Arbitrary field matching on payload (dot-separated path)",
|
|
17
|
-
})),
|
|
18
|
-
}, { additionalProperties: false });
|
|
19
|
-
export const ActionSchema = Type.Object({
|
|
20
|
-
prompt: Type.String({
|
|
21
|
-
description: "Template string to dispatch to agent",
|
|
22
|
-
}),
|
|
2
|
+
export const EventTriggerSchema = Type.Object({
|
|
3
|
+
types: Type.Optional(Type.Array(Type.String(), { description: "Event activity types" })),
|
|
4
|
+
branches: Type.Optional(Type.Array(Type.String(), {
|
|
5
|
+
description: "Branch filters, supports '@current' and globs",
|
|
6
|
+
})),
|
|
7
|
+
workflows: Type.Optional(Type.Array(Type.String(), { description: "Workflow names filter" })),
|
|
8
|
+
}, { additionalProperties: true });
|
|
9
|
+
export const JobSchema = Type.Object({
|
|
10
|
+
name: Type.Optional(Type.String({ description: "Optional job name" })),
|
|
11
|
+
if: Type.Optional(Type.String({
|
|
12
|
+
description: "Condition expression (e.g. \"conclusion == 'failure'\")",
|
|
13
|
+
})),
|
|
14
|
+
prompt: Type.String({ description: "Template string sent to Pi Agent" }),
|
|
23
15
|
deliverAs: Type.Optional(Type.Union([Type.Literal("steer"), Type.Literal("followUp")], {
|
|
24
16
|
description: "Delivery urgency: steer interrupts turn, followUp queues next",
|
|
17
|
+
default: "followUp",
|
|
25
18
|
})),
|
|
26
19
|
}, { additionalProperties: false });
|
|
27
|
-
export const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
})),
|
|
31
|
-
topic: Type.Optional(Type.String({
|
|
32
|
-
description: "Alias for 'event' (e.g. 'workflow_run.completed' or 'github.workflow_run.completed')",
|
|
33
|
-
})),
|
|
34
|
-
filters: Type.Optional(FilterSchema),
|
|
35
|
-
action: ActionSchema,
|
|
36
|
-
}, { additionalProperties: false });
|
|
37
|
-
export const ConfigSchema = Type.Object({
|
|
38
|
-
version: Type.Literal(1, { description: "Schema version" }),
|
|
39
|
-
enabled: Type.Boolean({ default: true }),
|
|
20
|
+
export const WorkflowSchema = Type.Object({
|
|
21
|
+
$schema: Type.Optional(Type.String()),
|
|
22
|
+
name: Type.Optional(Type.String({ description: "Workflow display name" })),
|
|
40
23
|
repo: Type.Optional(Type.String({
|
|
41
24
|
default: "auto",
|
|
42
25
|
description: "Target GitHub repo (owner/repo or 'auto')",
|
|
43
26
|
})),
|
|
44
27
|
secret: Type.Optional(Type.String({ description: "Optional Webhook HMAC secret" })),
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
28
|
+
on: Type.Union([
|
|
29
|
+
Type.String(),
|
|
30
|
+
Type.Array(Type.String()),
|
|
31
|
+
Type.Record(Type.String(), Type.Union([Type.Null(), EventTriggerSchema])),
|
|
32
|
+
], { description: "GitHub event triggers specification" }),
|
|
33
|
+
jobs: Type.Record(Type.String(), JobSchema, { description: "Jobs map" }),
|
|
48
34
|
}, { additionalProperties: false });
|
|
49
35
|
//# sourceMappingURL=schema.js.map
|
package/dist/types/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAC3C;IACE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,CACnE;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACxB,WAAW,EAAE,+CAA+C;KAC7D,CAAC,CACH;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CACpE;CACF,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC/B,CAAC;AAIF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAClC;IACE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACtE,EAAE,EAAE,IAAI,CAAC,QAAQ,CACf,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,yDAAyD;KACvE,CAAC,CACH;IACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IACxE,SAAS,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;QAC5D,WAAW,EACT,+DAA+D;QACjE,OAAO,EAAE,UAAU;KACpB,CAAC,CACH;CACF,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC;AAIF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CACvC;IACE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;QACV,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,2CAA2C;KACzD,CAAC,CACH;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC,CAC7D;IACD,EAAE,EAAE,IAAI,CAAC,KAAK,CACZ;QACE,IAAI,CAAC,MAAM,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,MAAM,EAAE,EACb,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAC9C;KACF,EACD,EAAE,WAAW,EAAE,qCAAqC,EAAE,CACvD;IACD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;CACzE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-ghwebhook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Universal GitHub Webhook event bus and wake-up engine for Pi coding agent",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
"files": [
|
|
30
30
|
"dist",
|
|
31
31
|
"src",
|
|
32
|
+
"skills",
|
|
33
|
+
"schemas",
|
|
32
34
|
"README.md",
|
|
33
35
|
"README_zh.md",
|
|
34
36
|
"CHANGELOG.md",
|
|
@@ -61,6 +63,9 @@
|
|
|
61
63
|
"pi": {
|
|
62
64
|
"extensions": [
|
|
63
65
|
"./dist/index.js"
|
|
66
|
+
],
|
|
67
|
+
"skills": [
|
|
68
|
+
"./skills"
|
|
64
69
|
]
|
|
65
70
|
}
|
|
66
71
|
}
|