@a5c-ai/triggers 0.4.9

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 (51) hide show
  1. package/README.md +49 -0
  2. package/action.yml +232 -0
  3. package/dist/action.d.ts +15 -0
  4. package/dist/action.d.ts.map +1 -0
  5. package/dist/action.js +21 -0
  6. package/dist/action.js.map +1 -0
  7. package/dist/backends/bitbucket.d.ts +2 -0
  8. package/dist/backends/bitbucket.d.ts.map +1 -0
  9. package/dist/backends/bitbucket.js +36 -0
  10. package/dist/backends/bitbucket.js.map +1 -0
  11. package/dist/backends/generic-webhook.d.ts +2 -0
  12. package/dist/backends/generic-webhook.d.ts.map +1 -0
  13. package/dist/backends/generic-webhook.js +28 -0
  14. package/dist/backends/generic-webhook.js.map +1 -0
  15. package/dist/backends/github.d.ts +2 -0
  16. package/dist/backends/github.d.ts.map +1 -0
  17. package/dist/backends/github.js +36 -0
  18. package/dist/backends/github.js.map +1 -0
  19. package/dist/backends/gitlab.d.ts +2 -0
  20. package/dist/backends/gitlab.d.ts.map +1 -0
  21. package/dist/backends/gitlab.js +33 -0
  22. package/dist/backends/gitlab.js.map +1 -0
  23. package/dist/backends/index.d.ts +6 -0
  24. package/dist/backends/index.d.ts.map +1 -0
  25. package/dist/backends/index.js +20 -0
  26. package/dist/backends/index.js.map +1 -0
  27. package/dist/backends/utils.d.ts +7 -0
  28. package/dist/backends/utils.d.ts.map +1 -0
  29. package/dist/backends/utils.js +22 -0
  30. package/dist/backends/utils.js.map +1 -0
  31. package/dist/cli.d.ts +2 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +77 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/enrich.d.ts +2 -0
  36. package/dist/enrich.d.ts.map +1 -0
  37. package/dist/enrich.js +113 -0
  38. package/dist/enrich.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +5 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/query.d.ts +5 -0
  44. package/dist/query.d.ts.map +1 -0
  45. package/dist/query.js +145 -0
  46. package/dist/query.js.map +1 -0
  47. package/dist/types.d.ts +54 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +68 -0
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # @a5c-ai/triggers
2
+
3
+ Trigger glue for running `amux` from automation systems. It normalizes GitHub, GitLab, Bitbucket, and generic webhook payloads into one event shape, enriches GitHub events with changed files and optional diffs, and evaluates compact trigger queries before launching agent-mux.
4
+
5
+ ## CLI
6
+
7
+ ```bash
8
+ amux-triggers evaluate --backend github --query "event:issue_comment text:@develop-this path:packages/agent-mux/**"
9
+ amux-triggers enrich --backend github --include-diff --output event.json
10
+ ```
11
+
12
+ ## GitHub Action
13
+
14
+ The reusable action lives at `packages/triggers/action.yml` and installs the requested harness before installing adapter plugins, then runs `amux` only when the trigger query matches.
15
+
16
+ ### Issue comment mention
17
+
18
+ ```yaml
19
+ - uses: ./packages/triggers
20
+ with:
21
+ trigger-backend: github
22
+ trigger-query: event:issue_comment text:@develop-this
23
+ adapter: codex
24
+ prompt: Implement the requested issue-comment task.
25
+ ```
26
+
27
+ ### Changed-file glob and diff mention
28
+
29
+ ```yaml
30
+ - uses: ./packages/triggers
31
+ with:
32
+ trigger-query: path:packages/agent-mux/** diff:@develop-this
33
+ include-diff: 'true'
34
+ adapter: claude-code
35
+ args-json: '["--tag", "github action", "--max-turns", "8"]'
36
+ ```
37
+
38
+ ### Pipeline hooks around agent-mux
39
+
40
+ ```yaml
41
+ - uses: ./packages/triggers
42
+ with:
43
+ trigger-query: event:pull_request path:packages/triggers/**
44
+ pre-run: npm run build --workspace=@a5c-ai/triggers
45
+ post-run: npm run test:coverage --workspace=@a5c-ai/triggers
46
+ args-json: '["--output-format", "json"]'
47
+ ```
48
+
49
+ Use `args-json` instead of `args` when an argument contains spaces, quotes, or shell-sensitive characters.
package/action.yml ADDED
@@ -0,0 +1,232 @@
1
+ name: Agent Mux
2
+ description: Run the agent-mux CLI from GitHub Actions with event triggers, harness setup, plugin install, and optional a5c token exchange.
3
+ author: a5c-ai
4
+
5
+ branding:
6
+ icon: terminal
7
+ color: purple
8
+
9
+ inputs:
10
+ command:
11
+ description: agent-mux command to execute after trigger evaluation.
12
+ required: false
13
+ default: run
14
+ args:
15
+ description: Space-delimited fallback arguments passed to amux after the command.
16
+ required: false
17
+ args-json:
18
+ description: JSON string array of additional arguments passed to amux after the command. Prefer this for values containing spaces or shell-sensitive characters.
19
+ required: false
20
+ adapter:
21
+ description: Agent adapter/agent name passed to amux via --agent when set.
22
+ required: false
23
+ prompt:
24
+ description: Prompt passed to amux run via --prompt when set.
25
+ required: false
26
+ harness:
27
+ description: Harness to install before plugin installation.
28
+ required: false
29
+ plugins:
30
+ description: Newline-delimited plugin specs installed after harness setup. Each line is passed to amux plugin install <adapter> <plugin>.
31
+ required: false
32
+ trigger-backend:
33
+ description: Trigger backend to normalize. Supports github, gitlab, bitbucket, generic-webhook.
34
+ required: false
35
+ default: github
36
+ trigger-query:
37
+ description: Query used to decide whether agent-mux should run.
38
+ required: false
39
+ include-diff:
40
+ description: Include local git diff patches in trigger enrichment.
41
+ required: false
42
+ default: 'true'
43
+ use-a5c-token-exchange:
44
+ description: Use a5c-ai/generate-token-action@main before running trigger enrichment and agent-mux.
45
+ required: false
46
+ default: 'false'
47
+ github-token:
48
+ description: GitHub token fallback for API enrichment.
49
+ required: false
50
+ default: ${{ github.token }}
51
+ node-version:
52
+ description: Node.js version.
53
+ required: false
54
+ default: '22'
55
+ working-directory:
56
+ description: Working directory for amux execution.
57
+ required: false
58
+ default: ${{ github.workspace }}
59
+ pre-run:
60
+ description: Optional shell commands to run after trigger match and before amux.
61
+ required: false
62
+ post-run:
63
+ description: Optional shell commands to run after amux when trigger matched.
64
+ required: false
65
+
66
+ outputs:
67
+ matched:
68
+ description: Whether trigger-query matched the enriched event.
69
+ value: ${{ steps.trigger.outputs.matched }}
70
+ event:
71
+ description: Path to enriched event JSON.
72
+ value: ${{ steps.trigger.outputs.event }}
73
+ exit-code:
74
+ description: agent-mux exit code. Empty when trigger did not match.
75
+ value: ${{ steps.amux.outputs.exit-code }}
76
+
77
+ runs:
78
+ using: composite
79
+ steps:
80
+ - name: Setup Node.js
81
+ uses: actions/setup-node@v4
82
+ with:
83
+ node-version: ${{ inputs.node-version }}
84
+
85
+ - name: Generate a5c GitHub App token
86
+ id: a5c-token
87
+ if: ${{ inputs.use-a5c-token-exchange == 'true' }}
88
+ continue-on-error: true
89
+ uses: a5c-ai/generate-token-action@main
90
+
91
+ - name: Build agent-mux action runtime
92
+ shell: bash
93
+ env:
94
+ ACTION_ROOT: ${{ github.action_path }}
95
+ run: |
96
+ set -euo pipefail
97
+ REPO_ROOT=$(cd "$ACTION_ROOT/../.." && pwd)
98
+ cd "$REPO_ROOT"
99
+ npm ci
100
+ npm run build:agent-mux
101
+ npm run build --workspace=@a5c-ai/triggers
102
+
103
+ - name: Install harness
104
+ if: ${{ inputs.harness != '' }}
105
+ shell: bash
106
+ env:
107
+ ACTION_ROOT: ${{ github.action_path }}
108
+ INPUT_HARNESS: ${{ inputs.harness }}
109
+ INPUT_WORKING_DIRECTORY: ${{ inputs.working-directory }}
110
+ run: |
111
+ set -euo pipefail
112
+ REPO_ROOT=$(cd "$ACTION_ROOT/../.." && pwd)
113
+ cd "$INPUT_WORKING_DIRECTORY"
114
+ node "$REPO_ROOT/packages/agent-mux/sdk/dist/bin/amux.js" install "$INPUT_HARNESS"
115
+
116
+ - name: Install plugins
117
+ if: ${{ inputs.plugins != '' }}
118
+ shell: bash
119
+ env:
120
+ ACTION_ROOT: ${{ github.action_path }}
121
+ INPUT_ADAPTER: ${{ inputs.adapter || inputs.harness }}
122
+ INPUT_PLUGINS: ${{ inputs.plugins }}
123
+ run: |
124
+ set -euo pipefail
125
+ REPO_ROOT=$(cd "$ACTION_ROOT/../.." && pwd)
126
+ while IFS= read -r plugin; do
127
+ [ -z "$plugin" ] && continue
128
+ node "$REPO_ROOT/packages/agent-mux/sdk/dist/bin/amux.js" plugin install "$INPUT_ADAPTER" "$plugin"
129
+ done <<< "$INPUT_PLUGINS"
130
+
131
+ - name: Evaluate trigger
132
+ id: trigger
133
+ shell: bash
134
+ env:
135
+ ACTION_ROOT: ${{ github.action_path }}
136
+ INPUT_TRIGGER_BACKEND: ${{ inputs.trigger-backend }}
137
+ INPUT_TRIGGER_QUERY: ${{ inputs.trigger-query }}
138
+ INPUT_INCLUDE_DIFF: ${{ inputs.include-diff }}
139
+ EFFECTIVE_GITHUB_TOKEN: ${{ steps.a5c-token.outputs.a5c_token || inputs.github-token }}
140
+ run: |
141
+ set -euo pipefail
142
+ REPO_ROOT=$(cd "$ACTION_ROOT/../.." && pwd)
143
+ EVENT_FILE="$RUNNER_TEMP/agent-mux-event.json"
144
+ RESULT_FILE="$RUNNER_TEMP/agent-mux-trigger.json"
145
+ INCLUDE_DIFF_ARGS=()
146
+ if [ "$INPUT_INCLUDE_DIFF" = "true" ]; then
147
+ INCLUDE_DIFF_ARGS+=(--include-diff)
148
+ fi
149
+ node "$REPO_ROOT/packages/triggers/dist/cli.js" enrich \
150
+ --backend "$INPUT_TRIGGER_BACKEND" \
151
+ --token "$EFFECTIVE_GITHUB_TOKEN" \
152
+ "${INCLUDE_DIFF_ARGS[@]}" \
153
+ --output "$EVENT_FILE"
154
+ if [ -z "$INPUT_TRIGGER_QUERY" ]; then
155
+ echo '{"matched":true,"reasons":["no trigger query configured"]}' > "$RESULT_FILE"
156
+ elif node "$REPO_ROOT/packages/triggers/dist/cli.js" evaluate \
157
+ --backend "$INPUT_TRIGGER_BACKEND" \
158
+ --query "$INPUT_TRIGGER_QUERY" \
159
+ --token "$EFFECTIVE_GITHUB_TOKEN" \
160
+ "${INCLUDE_DIFF_ARGS[@]}" \
161
+ --output "$RESULT_FILE"; then
162
+ true
163
+ else
164
+ status=$?
165
+ if [ "$status" -ne 78 ]; then
166
+ exit "$status"
167
+ fi
168
+ fi
169
+ MATCHED=$(node -e "console.log(JSON.parse(require('fs').readFileSync(process.argv[1], 'utf8')).matched ? 'true' : 'false')" "$RESULT_FILE")
170
+ echo "matched=$MATCHED" >> "$GITHUB_OUTPUT"
171
+ echo "event=$EVENT_FILE" >> "$GITHUB_OUTPUT"
172
+ cat "$RESULT_FILE"
173
+
174
+ - name: Pre-run pipeline commands
175
+ if: ${{ steps.trigger.outputs.matched == 'true' && inputs.pre-run != '' }}
176
+ shell: bash
177
+ working-directory: ${{ inputs.working-directory }}
178
+ env:
179
+ INPUT_PRE_RUN: ${{ inputs.pre-run }}
180
+ AMUX_TRIGGER_EVENT_PATH: ${{ steps.trigger.outputs.event }}
181
+ run: |
182
+ set -euo pipefail
183
+ bash -euo pipefail -c "$INPUT_PRE_RUN"
184
+
185
+ - name: Run agent-mux
186
+ id: amux
187
+ if: ${{ steps.trigger.outputs.matched == 'true' }}
188
+ shell: bash
189
+ working-directory: ${{ inputs.working-directory }}
190
+ env:
191
+ ACTION_ROOT: ${{ github.action_path }}
192
+ INPUT_COMMAND: ${{ inputs.command }}
193
+ INPUT_ARGS: ${{ inputs.args }}
194
+ INPUT_ARGS_JSON: ${{ inputs.args-json }}
195
+ INPUT_ADAPTER: ${{ inputs.adapter }}
196
+ INPUT_PROMPT: ${{ inputs.prompt }}
197
+ AMUX_TRIGGER_EVENT_PATH: ${{ steps.trigger.outputs.event }}
198
+ run: |
199
+ set -euo pipefail
200
+ REPO_ROOT=$(cd "$ACTION_ROOT/../.." && pwd)
201
+ ARGS=("$INPUT_COMMAND")
202
+ if [ -n "$INPUT_ADAPTER" ]; then
203
+ ARGS+=(--agent "$INPUT_ADAPTER")
204
+ fi
205
+ if [ -n "$INPUT_PROMPT" ]; then
206
+ ARGS+=(--prompt "$INPUT_PROMPT")
207
+ fi
208
+ if [ -n "$INPUT_ARGS_JSON" ]; then
209
+ mapfile -t EXTRA_ARGS < <(node -e "const value = JSON.parse(process.env.INPUT_ARGS_JSON || '[]'); if (!Array.isArray(value)) throw new Error('args-json must be a JSON array'); for (const item of value) console.log(String(item));")
210
+ ARGS+=("${EXTRA_ARGS[@]}")
211
+ elif [ -n "$INPUT_ARGS" ]; then
212
+ read -r -a EXTRA_ARGS <<< "$INPUT_ARGS"
213
+ ARGS+=("${EXTRA_ARGS[@]}")
214
+ fi
215
+ if node "$REPO_ROOT/packages/agent-mux/sdk/dist/bin/amux.js" "${ARGS[@]}"; then
216
+ echo "exit-code=0" >> "$GITHUB_OUTPUT"
217
+ else
218
+ status=$?
219
+ echo "exit-code=$status" >> "$GITHUB_OUTPUT"
220
+ exit "$status"
221
+ fi
222
+
223
+ - name: Post-run pipeline commands
224
+ if: ${{ steps.trigger.outputs.matched == 'true' && inputs.post-run != '' }}
225
+ shell: bash
226
+ working-directory: ${{ inputs.working-directory }}
227
+ env:
228
+ INPUT_POST_RUN: ${{ inputs.post-run }}
229
+ AMUX_TRIGGER_EVENT_PATH: ${{ steps.trigger.outputs.event }}
230
+ run: |
231
+ set -euo pipefail
232
+ bash -euo pipefail -c "$INPUT_POST_RUN"
@@ -0,0 +1,15 @@
1
+ import type { TriggerEvaluation } from './types.js';
2
+ export interface ActionOptions {
3
+ backend?: string;
4
+ eventName?: string;
5
+ eventPath?: string;
6
+ query?: string;
7
+ includeDiff?: boolean;
8
+ githubToken?: string;
9
+ }
10
+ export declare function evaluateActionTrigger(options?: ActionOptions): Promise<TriggerEvaluation>;
11
+ export interface CommandResult {
12
+ code: number;
13
+ signal: NodeJS.Signals | null;
14
+ }
15
+ export declare function runCommand(command: string, args: string[], env?: NodeJS.ProcessEnv): Promise<CommandResult>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CASnG;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAMxH"}
package/dist/action.js ADDED
@@ -0,0 +1,21 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { evaluateTrigger } from './query.js';
3
+ import { enrichEvent } from './enrich.js';
4
+ export async function evaluateActionTrigger(options = {}) {
5
+ const event = await enrichEvent({
6
+ backend: options.backend,
7
+ eventName: options.eventName,
8
+ eventPath: options.eventPath,
9
+ token: options.githubToken,
10
+ includeDiff: options.includeDiff,
11
+ });
12
+ return evaluateTrigger(event, options.query);
13
+ }
14
+ export function runCommand(command, args, env = process.env) {
15
+ return new Promise((resolve, reject) => {
16
+ const child = spawn(command, args, { stdio: 'inherit', env, shell: process.platform === 'win32' });
17
+ child.on('error', reject);
18
+ child.on('close', (code, signal) => resolve({ code: code ?? 1, signal }));
19
+ });
20
+ }
21
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY1C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAyB,EAAE;IACrE,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAc;QAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,WAAW;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAc,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC9F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QACnG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { NormalizedTriggerEvent } from '../types.js';
2
+ export declare function normalizeBitbucket(eventName: string, event: Record<string, unknown>, raw: unknown): NormalizedTriggerEvent;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../src/backends/bitbucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAGzE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAkC1H"}
@@ -0,0 +1,36 @@
1
+ import { arr, asRecord, change, collectText, str } from './utils.js';
2
+ export function normalizeBitbucket(eventName, event, raw) {
3
+ const repository = asRecord(event.repository);
4
+ const actor = asRecord(event.actor);
5
+ const pullRequest = asRecord(event.pullrequest);
6
+ const push = asRecord(event.push);
7
+ const pushChange = asRecord(arr(push.changes)[0] ?? {});
8
+ const pushNew = asRecord(pushChange.new);
9
+ const pushTarget = asRecord(pushNew.target);
10
+ const changes = arr(push.changes).flatMap((entry) => {
11
+ const newTarget = asRecord(asRecord(entry).new).target;
12
+ const files = arr(asRecord(newTarget).files);
13
+ return files.map((file) => change(asRecord(file).path, asRecord(file).type));
14
+ }).filter((entry) => Boolean(entry));
15
+ const title = str(pullRequest.title);
16
+ const body = str(pullRequest.description);
17
+ return {
18
+ backend: 'bitbucket',
19
+ eventName,
20
+ action: eventName.split(':')[1],
21
+ actor: str(actor.nickname) ?? str(actor.display_name),
22
+ repository: str(repository.full_name),
23
+ ref: str(pushNew.name),
24
+ sha: str(pushTarget.hash),
25
+ title,
26
+ body,
27
+ url: str(asRecord(asRecord(pullRequest.links).html).href),
28
+ sourceBranch: str(asRecord(pullRequest.source && asRecord(pullRequest.source).branch).name),
29
+ targetBranch: str(asRecord(pullRequest.destination && asRecord(pullRequest.destination).branch).name),
30
+ labels: [],
31
+ text: collectText([eventName, title, body, str(repository.full_name), str(actor.nickname)]),
32
+ changes,
33
+ raw,
34
+ };
35
+ }
36
+ //# sourceMappingURL=bitbucket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../src/backends/bitbucket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NormalizedTriggerEvent } from '../types.js';
2
+ export declare function normalizeGeneric(eventName: string, event: Record<string, unknown>, raw: unknown): NormalizedTriggerEvent;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-webhook.d.ts","sourceRoot":"","sources":["../../src/backends/generic-webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAGzE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,CA0BxH"}
@@ -0,0 +1,28 @@
1
+ import { arr, asRecord, change, collectText, str } from './utils.js';
2
+ export function normalizeGeneric(eventName, event, raw) {
3
+ const changes = arr(event.changes).map((entry) => {
4
+ const record = asRecord(entry);
5
+ return change(record.path ?? record.file ?? record.filename, record.status, record.patch ?? record.diff);
6
+ }).filter((entry) => Boolean(entry));
7
+ const title = str(event.title);
8
+ const body = str(event.body) ?? str(event.message) ?? str(event.text);
9
+ return {
10
+ backend: 'generic-webhook',
11
+ eventName: str(event.event) ?? eventName,
12
+ action: str(event.action),
13
+ actor: str(event.actor) ?? str(event.user),
14
+ repository: str(event.repository) ?? str(event.repo),
15
+ ref: str(event.ref) ?? str(event.branch),
16
+ sha: str(event.sha) ?? str(event.commit),
17
+ title,
18
+ body,
19
+ url: str(event.url),
20
+ sourceBranch: str(event.sourceBranch),
21
+ targetBranch: str(event.targetBranch),
22
+ labels: arr(event.labels).map(String),
23
+ text: collectText([eventName, title, body, str(event.repository), str(event.actor)]),
24
+ changes,
25
+ raw,
26
+ };
27
+ }
28
+ //# sourceMappingURL=generic-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-webhook.js","sourceRoot":"","sources":["../../src/backends/generic-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,KAA8B,EAAE,GAAY;IAC9F,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA0B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtE,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS;QACxC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QACpD,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,KAAK;QACL,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QACnB,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;QACrC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;QACrC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACrC,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACpF,OAAO;QACP,GAAG;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { NormalizedTriggerEvent } from '../types.js';
2
+ export declare function normalizeGithub(eventName: string, event: Record<string, unknown>, raw: unknown): NormalizedTriggerEvent;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/backends/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAGzE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAkCvH"}
@@ -0,0 +1,36 @@
1
+ import { arr, asRecord, change, collectText, labelsFrom, str } from './utils.js';
2
+ export function normalizeGithub(eventName, event, raw) {
3
+ const repository = asRecord(event.repository);
4
+ const sender = asRecord(event.sender);
5
+ const issue = asRecord(event.issue);
6
+ const pullRequest = asRecord(event.pull_request);
7
+ const comment = asRecord(event.comment);
8
+ const headCommit = asRecord(event.head_commit);
9
+ const commits = arr(event.commits).map(asRecord);
10
+ const changes = commits.flatMap((commit) => [
11
+ ...arr(commit.added).map((path) => change(path, 'added')),
12
+ ...arr(commit.modified).map((path) => change(path, 'modified')),
13
+ ...arr(commit.removed).map((path) => change(path, 'removed')),
14
+ ]).filter((entry) => Boolean(entry));
15
+ const title = str(issue.title) ?? str(pullRequest.title) ?? str(headCommit.message);
16
+ const body = str(comment.body) ?? str(issue.body) ?? str(pullRequest.body) ?? str(headCommit.message);
17
+ return {
18
+ backend: 'github',
19
+ eventName,
20
+ action: str(event.action),
21
+ actor: str(sender.login),
22
+ repository: str(repository.full_name),
23
+ ref: str(event.ref),
24
+ sha: str(event.after) ?? str(headCommit.id) ?? str(pullRequest.head && asRecord(pullRequest.head).sha),
25
+ title,
26
+ body,
27
+ url: str(comment.html_url) ?? str(issue.html_url) ?? str(pullRequest.html_url),
28
+ sourceBranch: str(asRecord(pullRequest.head).ref),
29
+ targetBranch: str(asRecord(pullRequest.base).ref),
30
+ labels: labelsFrom(issue.labels ?? pullRequest.labels),
31
+ text: collectText([eventName, str(event.action), title, body, str(repository.full_name), str(sender.login)]),
32
+ changes,
33
+ raw,
34
+ };
35
+ }
36
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/backends/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NormalizedTriggerEvent } from '../types.js';
2
+ export declare function normalizeGitlab(eventName: string, event: Record<string, unknown>, raw: unknown): NormalizedTriggerEvent;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/backends/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAGzE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,CA+BvH"}
@@ -0,0 +1,33 @@
1
+ import { arr, asRecord, change, collectText, labelsFrom, str } from './utils.js';
2
+ export function normalizeGitlab(eventName, event, raw) {
3
+ const project = asRecord(event.project);
4
+ const user = asRecord(event.user);
5
+ const objectAttributes = asRecord(event.object_attributes);
6
+ const commits = arr(event.commits).map(asRecord);
7
+ const changes = commits.flatMap((commit) => [
8
+ ...arr(commit.added).map((path) => change(path, 'added')),
9
+ ...arr(commit.modified).map((path) => change(path, 'modified')),
10
+ ...arr(commit.removed).map((path) => change(path, 'removed')),
11
+ ]).filter((entry) => Boolean(entry));
12
+ const title = str(objectAttributes.title) ?? str(event.title);
13
+ const body = str(objectAttributes.description) ?? str(objectAttributes.note) ?? str(event.message);
14
+ return {
15
+ backend: 'gitlab',
16
+ eventName: str(event.object_kind) ?? eventName,
17
+ action: str(objectAttributes.action),
18
+ actor: str(user.username) ?? str(user.name),
19
+ repository: str(project.path_with_namespace) ?? str(project.web_url),
20
+ ref: str(event.ref),
21
+ sha: str(objectAttributes.last_commit && asRecord(objectAttributes.last_commit).id) ?? str(event.after),
22
+ title,
23
+ body,
24
+ url: str(objectAttributes.url),
25
+ sourceBranch: str(objectAttributes.source_branch),
26
+ targetBranch: str(objectAttributes.target_branch),
27
+ labels: labelsFrom(objectAttributes.labels),
28
+ text: collectText([eventName, title, body, str(project.path_with_namespace), str(user.username)]),
29
+ changes,
30
+ raw,
31
+ };
32
+ }
33
+ //# sourceMappingURL=gitlab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/backends/gitlab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,KAA8B,EAAE,GAAY;IAC7F,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/D,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC9D,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAA0B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEnG,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,SAAS;QAC9C,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACpC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QACpE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QACnB,GAAG,EAAE,GAAG,CAAC,gBAAgB,CAAC,WAAW,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACvG,KAAK;QACL,IAAI;QACJ,GAAG,EAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAC9B,YAAY,EAAE,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACjD,YAAY,EAAE,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACjD,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC3C,IAAI,EAAE,WAAW,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjG,OAAO;QACP,GAAG;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { NormalizedTriggerEvent, TriggerBackend } from '../types.js';
2
+ export declare function normalizeEvent(backend: TriggerBackend, eventName: string, payload: unknown): NormalizedTriggerEvent;
3
+ export { normalizeBitbucket } from './bitbucket.js';
4
+ export { normalizeGeneric } from './generic-webhook.js';
5
+ export { normalizeGithub } from './github.js';
6
+ export { normalizeGitlab } from './gitlab.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO1E,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAMnH;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { asRecord } from './utils.js';
2
+ import { normalizeBitbucket } from './bitbucket.js';
3
+ import { normalizeGeneric } from './generic-webhook.js';
4
+ import { normalizeGithub } from './github.js';
5
+ import { normalizeGitlab } from './gitlab.js';
6
+ export function normalizeEvent(backend, eventName, payload) {
7
+ const event = asRecord(payload);
8
+ if (backend === 'github')
9
+ return normalizeGithub(eventName, event, payload);
10
+ if (backend === 'gitlab')
11
+ return normalizeGitlab(eventName, event, payload);
12
+ if (backend === 'bitbucket')
13
+ return normalizeBitbucket(eventName, event, payload);
14
+ return normalizeGeneric(eventName, event, payload);
15
+ }
16
+ export { normalizeBitbucket } from './bitbucket.js';
17
+ export { normalizeGeneric } from './generic-webhook.js';
18
+ export { normalizeGithub } from './github.js';
19
+ export { normalizeGitlab } from './gitlab.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE,SAAiB,EAAE,OAAgB;IACzF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClF,OAAO,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TriggerChange } from '../types.js';
2
+ export declare function asRecord(value: unknown): Record<string, unknown>;
3
+ export declare function str(value: unknown): string | undefined;
4
+ export declare function arr(value: unknown): unknown[];
5
+ export declare function labelsFrom(value: unknown): string[];
6
+ export declare function change(path: unknown, status?: unknown, patch?: unknown): TriggerChange | null;
7
+ export declare function collectText(parts: Array<string | undefined>): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/backends/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEhE;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEtD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAE7C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAEnD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAI7F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAEpE"}
@@ -0,0 +1,22 @@
1
+ export function asRecord(value) {
2
+ return value && typeof value === 'object' ? value : {};
3
+ }
4
+ export function str(value) {
5
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
6
+ }
7
+ export function arr(value) {
8
+ return Array.isArray(value) ? value : [];
9
+ }
10
+ export function labelsFrom(value) {
11
+ return arr(value).map((entry) => str(asRecord(entry).name) ?? str(entry)).filter((entry) => Boolean(entry));
12
+ }
13
+ export function change(path, status, patch) {
14
+ const filePath = str(path);
15
+ if (!filePath)
16
+ return null;
17
+ return { path: filePath, status: str(status), patch: str(patch) };
18
+ }
19
+ export function collectText(parts) {
20
+ return parts.filter(Boolean).join('\n');
21
+ }
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/backends/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,MAAgB,EAAE,KAAe;IACrE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAgC;IAC1D,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function main(argv?: string[]): Promise<number>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAiBA,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDxE"}
package/dist/cli.js ADDED
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ import { writeFile } from 'node:fs/promises';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { evaluateActionTrigger } from './action.js';
5
+ import { enrichEvent } from './enrich.js';
6
+ import { parseQuery } from './query.js';
7
+ function take(args, name) {
8
+ const index = args.indexOf(name);
9
+ if (index === -1)
10
+ return undefined;
11
+ return args[index + 1];
12
+ }
13
+ function has(args, name) {
14
+ return args.includes(name);
15
+ }
16
+ export async function main(argv = process.argv.slice(2)) {
17
+ const command = argv[0];
18
+ if (!command || has(argv, '--help') || has(argv, '-h')) {
19
+ process.stdout.write([
20
+ 'Usage: amux-triggers <evaluate|enrich> [flags]',
21
+ '',
22
+ 'Flags:',
23
+ ' --backend <github|gitlab|bitbucket|generic-webhook>',
24
+ ' --event <name>',
25
+ ' --event-path <file>',
26
+ ' --query <query>',
27
+ ' --include-diff',
28
+ ' --token <token>',
29
+ ' --output <file>',
30
+ '',
31
+ 'Query examples:',
32
+ ' event:issue_comment text:@develop-this',
33
+ ' path:packages/agent-mux/** diff:@develop-this',
34
+ ' {"event":"pull_request","paths":["src/**"],"expression":"text ~ \'@develop-this\'"}',
35
+ ].join('\n') + '\n');
36
+ return 0;
37
+ }
38
+ const options = {
39
+ backend: take(argv, '--backend'),
40
+ eventName: take(argv, '--event'),
41
+ eventPath: take(argv, '--event-path'),
42
+ query: take(argv, '--query'),
43
+ includeDiff: has(argv, '--include-diff'),
44
+ githubToken: take(argv, '--token') ?? process.env.GITHUB_TOKEN,
45
+ };
46
+ if (command === 'enrich') {
47
+ const event = await enrichEvent({ backend: options.backend, eventName: options.eventName, eventPath: options.eventPath, token: options.githubToken, includeDiff: options.includeDiff });
48
+ const output = JSON.stringify(event, null, 2);
49
+ const outputPath = take(argv, '--output');
50
+ if (outputPath)
51
+ await writeFile(outputPath, `${output}\n`, 'utf8');
52
+ else
53
+ process.stdout.write(`${output}\n`);
54
+ return 0;
55
+ }
56
+ if (command === 'evaluate') {
57
+ const result = await evaluateActionTrigger(options);
58
+ const output = JSON.stringify({ ...result, query: parseQuery(options.query) }, null, 2);
59
+ const outputPath = take(argv, '--output');
60
+ if (outputPath)
61
+ await writeFile(outputPath, `${output}\n`, 'utf8');
62
+ else
63
+ process.stdout.write(`${output}\n`);
64
+ return result.matched ? 0 : 78;
65
+ }
66
+ throw new Error(`Unknown command: ${command}`);
67
+ }
68
+ const isDirectRun = process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1];
69
+ if (isDirectRun) {
70
+ main().then((code) => {
71
+ process.exitCode = code;
72
+ }).catch((error) => {
73
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
74
+ process.exitCode = 1;
75
+ });
76
+ }
77
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { EnrichmentOptions, NormalizedTriggerEvent } from './types.js';
2
+ export declare function enrichEvent(options?: EnrichmentOptions): Promise<NormalizedTriggerEvent>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAiC,MAAM,YAAY,CAAC;AA6F3G,wBAAsB,WAAW,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAclG"}
package/dist/enrich.js ADDED
@@ -0,0 +1,113 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { execFile } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import { normalizeEvent } from './backends/index.js';
5
+ const execFileAsync = promisify(execFile);
6
+ function detectBackend(value) {
7
+ if (value === 'gitlab' || value === 'bitbucket' || value === 'generic-webhook')
8
+ return value;
9
+ return 'github';
10
+ }
11
+ async function readPayload(options) {
12
+ if (options.event !== undefined)
13
+ return options.event;
14
+ const eventPath = options.eventPath ?? process.env.GITHUB_EVENT_PATH;
15
+ if (!eventPath)
16
+ return {};
17
+ return JSON.parse(await readFile(eventPath, 'utf8'));
18
+ }
19
+ function uniqueChanges(changes) {
20
+ const byPath = new Map();
21
+ for (const change of changes) {
22
+ const previous = byPath.get(change.path);
23
+ byPath.set(change.path, { ...previous, ...change, patch: change.patch ?? previous?.patch });
24
+ }
25
+ return [...byPath.values()].sort((a, b) => a.path.localeCompare(b.path));
26
+ }
27
+ async function enrichWithLocalGit(event, cwd) {
28
+ const ref = event.sha ?? 'HEAD';
29
+ try {
30
+ const { stdout } = await execFileAsync('git', ['show', '--format=', '--name-status', ref], { cwd });
31
+ const changes = [];
32
+ for (const line of stdout.split(/\r?\n/)) {
33
+ const [status, filePath] = line.split(/\s+/, 2);
34
+ if (filePath)
35
+ changes.push({ path: filePath, status });
36
+ }
37
+ return changes;
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ async function enrichDiffsWithLocalGit(event, cwd) {
44
+ const ref = event.sha ?? 'HEAD';
45
+ try {
46
+ const { stdout } = await execFileAsync('git', ['show', '--format=', '--unified=80', ref], { cwd, maxBuffer: 10 * 1024 * 1024 });
47
+ const patches = stdout.split(/^diff --git /m).slice(1);
48
+ const byPath = new Map();
49
+ for (const patch of patches) {
50
+ const match = patch.match(/^a\/(.*?) b\/(.*?)\r?\n/);
51
+ if (match)
52
+ byPath.set(match[2], `diff --git ${patch}`);
53
+ }
54
+ return event.changes.map((entry) => ({ ...entry, patch: entry.patch ?? byPath.get(entry.path) }));
55
+ }
56
+ catch {
57
+ return event.changes;
58
+ }
59
+ }
60
+ async function enrichGithubFromApi(event, options) {
61
+ if (!options.token || !event.repository)
62
+ return [];
63
+ const fetchImpl = options.fetchImpl ?? fetch;
64
+ const baseUrl = options.baseUrl ?? 'https://api.github.com';
65
+ const headers = {
66
+ accept: 'application/vnd.github+json',
67
+ authorization: `Bearer ${options.token}`,
68
+ 'user-agent': 'a5c-ai-triggers',
69
+ };
70
+ const raw = event.raw && typeof event.raw === 'object' ? event.raw : {};
71
+ const pullRequest = raw.pull_request && typeof raw.pull_request === 'object' ? raw.pull_request : undefined;
72
+ const number = pullRequest && typeof pullRequest.number === 'number' ? pullRequest.number : undefined;
73
+ const endpoint = number
74
+ ? `${baseUrl}/repos/${event.repository}/pulls/${number}/files?per_page=100`
75
+ : event.sha
76
+ ? `${baseUrl}/repos/${event.repository}/commits/${event.sha}`
77
+ : undefined;
78
+ if (!endpoint)
79
+ return [];
80
+ const response = await fetchImpl(endpoint, { headers });
81
+ if (!response.ok)
82
+ return [];
83
+ const payload = await response.json();
84
+ const files = Array.isArray(payload) ? payload : Array.isArray(payload.files) ? payload.files : [];
85
+ const changes = [];
86
+ for (const file of files) {
87
+ const record = file;
88
+ if (typeof record.filename !== 'string')
89
+ continue;
90
+ changes.push({
91
+ path: record.filename,
92
+ status: typeof record.status === 'string' ? record.status : undefined,
93
+ patch: typeof record.patch === 'string' ? record.patch : undefined,
94
+ });
95
+ }
96
+ return changes;
97
+ }
98
+ export async function enrichEvent(options = {}) {
99
+ const backend = detectBackend(options.backend ?? process.env.AMUX_TRIGGER_BACKEND);
100
+ const eventName = options.eventName ?? process.env.GITHUB_EVENT_NAME ?? process.env.AMUX_TRIGGER_EVENT ?? 'webhook';
101
+ const payload = await readPayload(options);
102
+ const event = normalizeEvent(backend, eventName, payload);
103
+ const cwd = options.cwd ?? process.env.GITHUB_WORKSPACE ?? process.cwd();
104
+ const apiChanges = backend === 'github' ? await enrichGithubFromApi(event, options) : [];
105
+ const localChanges = event.changes.length === 0 ? await enrichWithLocalGit(event, cwd) : [];
106
+ event.changes = uniqueChanges([...event.changes, ...apiChanges, ...localChanges]);
107
+ if (options.includeDiff) {
108
+ event.changes = await enrichDiffsWithLocalGit(event, cwd);
109
+ }
110
+ event.text = [event.text, ...event.changes.map((entry) => `${entry.status ?? ''} ${entry.path} ${entry.patch ?? ''}`)].join('\n');
111
+ return event;
112
+ }
113
+ //# sourceMappingURL=enrich.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.js","sourceRoot":"","sources":["../src/enrich.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { normalizeEvent } from './backends/index.js';
2
+ export { enrichEvent } from './enrich.js';
3
+ export { evaluateTrigger, matchesGlob, parseQuery } from './query.js';
4
+ export { evaluateActionTrigger, runCommand } from './action.js';
5
+ export type { ActionOptions, CommandResult } from './action.js';
6
+ export type { EnrichmentOptions, NormalizedTriggerEvent, TriggerBackend, TriggerChange, TriggerEvaluation, TriggerQuery } from './types.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { normalizeEvent } from './backends/index.js';
2
+ export { enrichEvent } from './enrich.js';
3
+ export { evaluateTrigger, matchesGlob, parseQuery } from './query.js';
4
+ export { evaluateActionTrigger, runCommand } from './action.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { NormalizedTriggerEvent, TriggerEvaluation, TriggerQuery } from './types.js';
2
+ declare function matchesGlob(path: string, glob: string): boolean;
3
+ export declare function parseQuery(input: string | TriggerQuery | undefined): TriggerQuery;
4
+ export declare function evaluateTrigger(event: NormalizedTriggerEvent, queryInput: string | TriggerQuery | undefined): TriggerEvaluation;
5
+ export { matchesGlob };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsC1F,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAkCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,CAyBjF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,iBAAiB,CA+B/H;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
package/dist/query.js ADDED
@@ -0,0 +1,145 @@
1
+ function list(value) {
2
+ if (value === undefined)
3
+ return [];
4
+ return Array.isArray(value) ? value : [value];
5
+ }
6
+ function matchesAny(value, expected) {
7
+ if (expected.length === 0)
8
+ return true;
9
+ if (!value)
10
+ return false;
11
+ return expected.some((candidate) => value === candidate || value.includes(candidate));
12
+ }
13
+ function textIncludes(haystack, needles) {
14
+ if (needles.length === 0)
15
+ return true;
16
+ const lower = haystack.toLowerCase();
17
+ return needles.some((needle) => lower.includes(needle.toLowerCase()));
18
+ }
19
+ function globToRegExp(glob) {
20
+ let pattern = '';
21
+ for (let index = 0; index < glob.length; index += 1) {
22
+ const char = glob[index];
23
+ const next = glob[index + 1];
24
+ if (char === '*' && next === '*') {
25
+ pattern += '.*';
26
+ index += 1;
27
+ }
28
+ else if (char === '*') {
29
+ pattern += '[^/]*';
30
+ }
31
+ else if (char === '?') {
32
+ pattern += '[^/]';
33
+ }
34
+ else {
35
+ pattern += char.replace(/[|\\{}()[\]^$+?.]/g, '\\$&');
36
+ }
37
+ }
38
+ return new RegExp(`^${pattern}$`);
39
+ }
40
+ function matchesGlob(path, glob) {
41
+ return globToRegExp(glob.replace(/\\/g, '/')).test(path.replace(/\\/g, '/'));
42
+ }
43
+ function expressionValue(event, field) {
44
+ if (field === 'event' || field === 'eventName')
45
+ return event.eventName;
46
+ if (field === 'action')
47
+ return event.action;
48
+ if (field === 'backend')
49
+ return event.backend;
50
+ if (field === 'text')
51
+ return event.text;
52
+ if (field === 'diff')
53
+ return event.changes.map((entry) => entry.patch ?? '').join('\n');
54
+ if (field === 'path' || field === 'paths' || field === 'files')
55
+ return event.changes.map((entry) => entry.path);
56
+ if (field === 'branch' || field === 'ref')
57
+ return event.ref ?? event.sourceBranch ?? event.targetBranch;
58
+ if (field === 'label' || field === 'labels')
59
+ return event.labels;
60
+ return undefined;
61
+ }
62
+ function evaluateExpression(event, expression) {
63
+ const clauses = expression.split(/\s+&&\s+/).map((clause) => clause.trim()).filter(Boolean);
64
+ return clauses.every((clause) => {
65
+ const contains = clause.match(/^([a-zA-Z][\w.-]*)\s*~\s*['\"](.+)['\"]$/);
66
+ if (contains) {
67
+ const value = expressionValue(event, contains[1]);
68
+ const haystack = Array.isArray(value) ? value.join('\n') : value ?? '';
69
+ return textIncludes(haystack, [contains[2]]);
70
+ }
71
+ const equals = clause.match(/^([a-zA-Z][\w.-]*)\s*==\s*['\"](.+)['\"]$/);
72
+ if (equals) {
73
+ const value = expressionValue(event, equals[1]);
74
+ return Array.isArray(value) ? value.includes(equals[2]) : value === equals[2];
75
+ }
76
+ throw new Error(`Unsupported trigger expression clause: ${clause}`);
77
+ });
78
+ }
79
+ export function parseQuery(input) {
80
+ if (!input)
81
+ return {};
82
+ if (typeof input !== 'string')
83
+ return input;
84
+ const trimmed = input.trim();
85
+ if (!trimmed)
86
+ return {};
87
+ if (trimmed.startsWith('{'))
88
+ return JSON.parse(trimmed);
89
+ const query = {};
90
+ for (const segment of trimmed.split(/\s+/)) {
91
+ const separator = segment.indexOf(':');
92
+ if (separator === -1) {
93
+ query.text = [...list(query.text), segment];
94
+ continue;
95
+ }
96
+ const key = segment.slice(0, separator);
97
+ const value = segment.slice(separator + 1);
98
+ if (key === 'event')
99
+ query.event = [...list(query.event), value];
100
+ else if (key === 'action')
101
+ query.action = [...list(query.action), value];
102
+ else if (key === 'text' || key === 'contains')
103
+ query.text = [...list(query.text), value];
104
+ else if (key === 'diff')
105
+ query.diff = [...list(query.diff), value];
106
+ else if (key === 'path' || key === 'file')
107
+ query.paths = [...list(query.paths), value];
108
+ else if (key === 'branch')
109
+ query.branch = [...list(query.branch), value];
110
+ else if (key === 'label')
111
+ query.labels = [...list(query.labels), value];
112
+ }
113
+ return query;
114
+ }
115
+ export function evaluateTrigger(event, queryInput) {
116
+ const query = parseQuery(queryInput);
117
+ const reasons = [];
118
+ if (!matchesAny(event.eventName, list(query.event)))
119
+ return { matched: false, reasons: [`event ${event.eventName} did not match`], event };
120
+ if (!matchesAny(event.action, list(query.action)))
121
+ return { matched: false, reasons: [`action ${event.action ?? ''} did not match`], event };
122
+ if (!textIncludes(event.text, list(query.text)))
123
+ return { matched: false, reasons: ['text did not match'], event };
124
+ const diffText = event.changes.map((entry) => entry.patch ?? '').join('\n');
125
+ if (!textIncludes(diffText, list(query.diff)))
126
+ return { matched: false, reasons: ['diff did not match'], event };
127
+ const pathGlobs = [...list(query.paths), ...list(query.files)];
128
+ if (pathGlobs.length > 0 && !event.changes.some((entry) => pathGlobs.some((glob) => matchesGlob(entry.path, glob)))) {
129
+ return { matched: false, reasons: ['changed files did not match'], event };
130
+ }
131
+ if (!matchesAny(event.ref ?? event.sourceBranch ?? event.targetBranch, list(query.branch))) {
132
+ return { matched: false, reasons: ['branch did not match'], event };
133
+ }
134
+ const labelFilters = list(query.labels);
135
+ if (labelFilters.length > 0 && !labelFilters.every((label) => event.labels.includes(label))) {
136
+ return { matched: false, reasons: ['labels did not match'], event };
137
+ }
138
+ if (query.expression && !evaluateExpression(event, query.expression)) {
139
+ return { matched: false, reasons: ['expression did not match'], event };
140
+ }
141
+ reasons.push('trigger matched');
142
+ return { matched: true, reasons, event };
143
+ }
144
+ export { matchesGlob };
145
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export type TriggerBackend = 'github' | 'gitlab' | 'bitbucket' | 'generic-webhook';
2
+ export interface TriggerChange {
3
+ path: string;
4
+ status?: string;
5
+ additions?: number;
6
+ deletions?: number;
7
+ patch?: string;
8
+ }
9
+ export interface NormalizedTriggerEvent {
10
+ backend: TriggerBackend;
11
+ eventName: string;
12
+ action?: string;
13
+ actor?: string;
14
+ repository?: string;
15
+ ref?: string;
16
+ sha?: string;
17
+ title?: string;
18
+ body?: string;
19
+ url?: string;
20
+ sourceBranch?: string;
21
+ targetBranch?: string;
22
+ labels: string[];
23
+ text: string;
24
+ changes: TriggerChange[];
25
+ raw: unknown;
26
+ }
27
+ export interface EnrichmentOptions {
28
+ backend?: TriggerBackend;
29
+ eventName?: string;
30
+ eventPath?: string;
31
+ event?: unknown;
32
+ repository?: string;
33
+ token?: string;
34
+ baseUrl?: string;
35
+ fetchImpl?: typeof fetch;
36
+ cwd?: string;
37
+ includeDiff?: boolean;
38
+ }
39
+ export interface TriggerQuery {
40
+ event?: string | string[];
41
+ action?: string | string[];
42
+ text?: string | string[];
43
+ diff?: string | string[];
44
+ paths?: string | string[];
45
+ files?: string | string[];
46
+ branch?: string | string[];
47
+ labels?: string | string[];
48
+ expression?: string;
49
+ }
50
+ export interface TriggerEvaluation {
51
+ matched: boolean;
52
+ reasons: string[];
53
+ event: NormalizedTriggerEvent;
54
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,sBAAsB,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@a5c-ai/triggers",
3
+ "version": "0.4.9",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "description": "Event trigger normalization, enrichment, and filtering helpers for automation actions",
7
+ "author": "a5c-ai",
8
+ "homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/triggers#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/a5c-ai/babysitter.git",
12
+ "directory": "packages/triggers"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/a5c-ai/babysitter/issues"
16
+ },
17
+ "keywords": [
18
+ "agent-mux",
19
+ "github-actions",
20
+ "gitlab",
21
+ "bitbucket",
22
+ "webhooks",
23
+ "triggers"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20.9.0"
27
+ },
28
+ "bin": {
29
+ "amux-triggers": "./dist/cli.js"
30
+ },
31
+ "main": "./dist/index.js",
32
+ "module": "./dist/index.js",
33
+ "types": "./dist/index.d.ts",
34
+ "exports": {
35
+ ".": {
36
+ "import": {
37
+ "types": "./dist/index.d.ts",
38
+ "default": "./dist/index.js"
39
+ }
40
+ },
41
+ "./action": {
42
+ "import": {
43
+ "types": "./dist/action.d.ts",
44
+ "default": "./dist/action.js"
45
+ }
46
+ }
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "action.yml",
51
+ "README.md",
52
+ "LICENSE"
53
+ ],
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
57
+ "scripts": {
58
+ "build": "tsc --build && tsc --emitDeclarationOnly --declarationMap false -p tsconfig.json",
59
+ "test": "npm run test:unit && npm run test:e2e",
60
+ "prepublishOnly": "npm run build && npm run test",
61
+ "test:unit": "vitest run --root ../.. --config vitest.config.ts packages/triggers/tests/action-helpers.test.ts packages/triggers/tests/action-metadata.test.ts packages/triggers/tests/backend-modules.test.ts packages/triggers/tests/backends.test.ts packages/triggers/tests/cli.test.ts packages/triggers/tests/enrich.test.ts packages/triggers/tests/query.test.ts packages/triggers/tests/readme-examples.test.ts packages/triggers/src",
62
+ "test:e2e": "npm run build && vitest run --root ../.. --config vitest.config.ts packages/triggers/tests/action.test.ts packages/triggers/tests/dist-cli.smoke.test.ts",
63
+ "test:coverage": "vitest run --root ../.. --config vitest.config.ts --coverage --coverage.include=packages/triggers/src/**/*.ts packages/triggers/tests/action-helpers.test.ts packages/triggers/tests/action-metadata.test.ts packages/triggers/tests/action.test.ts packages/triggers/tests/backend-modules.test.ts packages/triggers/tests/backends.test.ts packages/triggers/tests/cli.test.ts packages/triggers/tests/enrich.test.ts packages/triggers/tests/query.test.ts packages/triggers/tests/readme-examples.test.ts packages/triggers/src"
64
+ },
65
+ "devDependencies": {
66
+ "@vitest/coverage-v8": "^4.1.4"
67
+ }
68
+ }