@farmslot/protocol 0.21.0 → 0.26.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 +115 -0
- package/dist/contracts/agents.d.ts +33 -0
- package/dist/contracts/agents.d.ts.map +1 -1
- package/dist/contracts/backlog.d.ts +8 -0
- package/dist/contracts/backlog.d.ts.map +1 -1
- package/dist/contracts/backlog.js.map +1 -1
- package/dist/contracts/device-inventory.d.ts +118 -0
- package/dist/contracts/device-inventory.d.ts.map +1 -0
- package/dist/contracts/device-inventory.js +51 -0
- package/dist/contracts/device-inventory.js.map +1 -0
- package/dist/contracts/dispatch.d.ts +4 -0
- package/dist/contracts/dispatch.d.ts.map +1 -1
- package/dist/contracts/execution-templates.d.ts +16 -0
- package/dist/contracts/execution-templates.d.ts.map +1 -1
- package/dist/contracts/execution-templates.js +6 -0
- package/dist/contracts/execution-templates.js.map +1 -1
- package/dist/contracts/gate-park.d.ts +284 -0
- package/dist/contracts/gate-park.d.ts.map +1 -0
- package/dist/contracts/gate-park.js +415 -0
- package/dist/contracts/gate-park.js.map +1 -0
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/pr-monitoring.d.ts +167 -0
- package/dist/contracts/pr-monitoring.d.ts.map +1 -0
- package/dist/contracts/pr-monitoring.js +2 -0
- package/dist/contracts/pr-monitoring.js.map +1 -0
- package/dist/contracts/pr-rules.d.ts +350 -0
- package/dist/contracts/pr-rules.d.ts.map +1 -0
- package/dist/contracts/pr-rules.js +6 -0
- package/dist/contracts/pr-rules.js.map +1 -0
- package/dist/contracts/pressure-admission.d.ts +175 -0
- package/dist/contracts/pressure-admission.d.ts.map +1 -0
- package/dist/contracts/pressure-admission.js +26 -0
- package/dist/contracts/pressure-admission.js.map +1 -0
- package/dist/contracts/readiness.d.ts +37 -0
- package/dist/contracts/readiness.d.ts.map +1 -0
- package/dist/contracts/readiness.js +8 -0
- package/dist/contracts/readiness.js.map +1 -0
- package/dist/contracts/resource-posture.d.ts +379 -0
- package/dist/contracts/resource-posture.d.ts.map +1 -0
- package/dist/contracts/resource-posture.js +293 -0
- package/dist/contracts/resource-posture.js.map +1 -0
- package/dist/contracts/resources.d.ts +27 -1
- package/dist/contracts/resources.d.ts.map +1 -1
- package/dist/contracts/resources.js +1 -1
- package/dist/contracts/resources.js.map +1 -1
- package/dist/contracts/reviews.d.ts +3 -0
- package/dist/contracts/reviews.d.ts.map +1 -1
- package/dist/contracts/reviews.js.map +1 -1
- package/dist/contracts/runs.d.ts +501 -12
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +148 -5
- package/dist/contracts/runs.js.map +1 -1
- package/dist/contracts/runtime-capabilities.d.ts +255 -3
- package/dist/contracts/runtime-capabilities.d.ts.map +1 -1
- package/dist/contracts/runtime-capabilities.js +113 -1
- package/dist/contracts/runtime-capabilities.js.map +1 -1
- package/dist/contracts/slots.d.ts +53 -1
- package/dist/contracts/slots.d.ts.map +1 -1
- package/dist/contracts/template-placeholders.d.ts +16 -0
- package/dist/contracts/template-placeholders.d.ts.map +1 -0
- package/dist/contracts/template-placeholders.js +39 -0
- package/dist/contracts/template-placeholders.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/pr-monitoring.d.ts +13 -0
- package/dist/integrations/pr-monitoring.d.ts.map +1 -0
- package/dist/integrations/pr-monitoring.js +160 -0
- package/dist/integrations/pr-monitoring.js.map +1 -0
- package/dist/integrations/pr-project-import.d.ts +12 -0
- package/dist/integrations/pr-project-import.d.ts.map +1 -0
- package/dist/integrations/pr-project-import.js +279 -0
- package/dist/integrations/pr-project-import.js.map +1 -0
- package/dist/integrations/pr-review-requirements.d.ts +4 -0
- package/dist/integrations/pr-review-requirements.d.ts.map +1 -0
- package/dist/integrations/pr-review-requirements.js +21 -0
- package/dist/integrations/pr-review-requirements.js.map +1 -0
- package/dist/integrations/pr-rule-config.d.ts +6 -0
- package/dist/integrations/pr-rule-config.d.ts.map +1 -0
- package/dist/integrations/pr-rule-config.js +217 -0
- package/dist/integrations/pr-rule-config.js.map +1 -0
- package/dist/integrations/pr-rule-predicates.d.ts +9 -0
- package/dist/integrations/pr-rule-predicates.d.ts.map +1 -0
- package/dist/integrations/pr-rule-predicates.js +223 -0
- package/dist/integrations/pr-rule-predicates.js.map +1 -0
- package/dist/recipes/step-io.d.ts +10 -1
- package/dist/recipes/step-io.d.ts.map +1 -1
- package/dist/rpc/backlog.d.ts +2 -2
- package/dist/rpc/backlog.d.ts.map +1 -1
- package/dist/rpc/backlog.js +2 -1
- package/dist/rpc/backlog.js.map +1 -1
- package/dist/rpc/config.d.ts +22 -2
- package/dist/rpc/config.d.ts.map +1 -1
- package/dist/rpc/config.js +1 -0
- package/dist/rpc/config.js.map +1 -1
- package/dist/rpc/copilot-runtime.d.ts +17 -0
- package/dist/rpc/copilot-runtime.d.ts.map +1 -1
- package/dist/rpc/copilot-runtime.js +5 -0
- package/dist/rpc/copilot-runtime.js.map +1 -1
- package/dist/rpc/dispatch.d.ts +39 -1
- package/dist/rpc/dispatch.d.ts.map +1 -1
- package/dist/rpc/dispatch.js +2 -0
- package/dist/rpc/dispatch.js.map +1 -1
- package/dist/rpc/git.d.ts +35 -0
- package/dist/rpc/git.d.ts.map +1 -1
- package/dist/rpc/index.d.ts +7 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +7 -0
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/machine-pause.d.ts +158 -0
- package/dist/rpc/machine-pause.d.ts.map +1 -0
- package/dist/rpc/machine-pause.js +8 -0
- package/dist/rpc/machine-pause.js.map +1 -0
- package/dist/rpc/native-session.d.ts +193 -0
- package/dist/rpc/native-session.d.ts.map +1 -0
- package/dist/rpc/native-session.js +2 -0
- package/dist/rpc/native-session.js.map +1 -0
- package/dist/rpc/pr-push.d.ts +56 -0
- package/dist/rpc/pr-push.d.ts.map +1 -0
- package/dist/rpc/pr-push.js +2 -0
- package/dist/rpc/pr-push.js.map +1 -0
- package/dist/rpc/pr-rules.d.ts +72 -0
- package/dist/rpc/pr-rules.d.ts.map +1 -0
- package/dist/rpc/pr-rules.js +2 -0
- package/dist/rpc/pr-rules.js.map +1 -0
- package/dist/rpc/pr-watch.d.ts +43 -0
- package/dist/rpc/pr-watch.d.ts.map +1 -0
- package/dist/rpc/pr-watch.js +2 -0
- package/dist/rpc/pr-watch.js.map +1 -0
- package/dist/rpc/registry.d.ts +56 -0
- package/dist/rpc/registry.d.ts.map +1 -1
- package/dist/rpc/registry.js +57 -0
- package/dist/rpc/registry.js.map +1 -1
- package/dist/rpc/resource-posture.d.ts +36 -0
- package/dist/rpc/resource-posture.d.ts.map +1 -0
- package/dist/rpc/resource-posture.js +7 -0
- package/dist/rpc/resource-posture.js.map +1 -0
- package/dist/rpc/resource-pressure-selection.d.ts +4 -0
- package/dist/rpc/resource-pressure-selection.d.ts.map +1 -0
- package/dist/rpc/resource-pressure-selection.js +21 -0
- package/dist/rpc/resource-pressure-selection.js.map +1 -0
- package/dist/rpc/resources.d.ts +176 -1
- package/dist/rpc/resources.d.ts.map +1 -1
- package/dist/rpc/resources.js +6 -0
- package/dist/rpc/resources.js.map +1 -1
- package/dist/rpc/roadmap.d.ts +1 -1
- package/dist/rpc/roadmap.d.ts.map +1 -1
- package/dist/rpc/roadmap.js +2 -1
- package/dist/rpc/roadmap.js.map +1 -1
- package/dist/rpc/run.d.ts +122 -5
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/run.js +1 -0
- package/dist/rpc/run.js.map +1 -1
- package/dist/rpc/runtime-capabilities.d.ts +73 -3
- package/dist/rpc/runtime-capabilities.d.ts.map +1 -1
- package/dist/rpc/runtime-capabilities.js +11 -0
- package/dist/rpc/runtime-capabilities.js.map +1 -1
- package/dist/rpc/slot.d.ts +9 -1
- package/dist/rpc/slot.d.ts.map +1 -1
- package/dist/rpc/slot.js.map +1 -1
- package/dist/rpc/tmux.d.ts +4 -0
- package/dist/rpc/tmux.d.ts.map +1 -1
- package/dist/rpc/worker-session-history.d.ts +1 -1
- package/dist/rpc/worker-session-history.d.ts.map +1 -1
- package/dist/runs/decision-resolution.d.ts +7 -0
- package/dist/runs/decision-resolution.d.ts.map +1 -1
- package/dist/runs/decision-resolution.js +1 -0
- package/dist/runs/decision-resolution.js.map +1 -1
- package/dist/runs/interactive-handoff.d.ts +14 -0
- package/dist/runs/interactive-handoff.d.ts.map +1 -0
- package/dist/runs/interactive-handoff.js +69 -0
- package/dist/runs/interactive-handoff.js.map +1 -0
- package/dist/runs/portable-bundle.d.ts +2 -0
- package/dist/runs/portable-bundle.d.ts.map +1 -1
- package/dist/runs/portable-bundle.js +14 -1
- package/dist/runs/portable-bundle.js.map +1 -1
- package/dist/runs/review-chain.d.ts +3 -2
- package/dist/runs/review-chain.d.ts.map +1 -1
- package/dist/runs/review-chain.js +4 -2
- package/dist/runs/review-chain.js.map +1 -1
- package/dist/slots/tracking-branch.d.ts +12 -0
- package/dist/slots/tracking-branch.d.ts.map +1 -1
- package/dist/slots/tracking-branch.js +12 -0
- package/dist/slots/tracking-branch.js.map +1 -1
- package/dist/transport/events.d.ts +19 -2
- package/dist/transport/events.d.ts.map +1 -1
- package/dist/transport/events.js +6 -0
- package/dist/transport/events.js.map +1 -1
- package/dist/transport/signal.d.ts +11 -0
- package/dist/transport/signal.d.ts.map +1 -1
- package/dist/transport/signal.js +19 -1
- package/dist/transport/signal.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export * from './agents/roles.js';
|
|
|
3
3
|
export * from './checklist-target.js';
|
|
4
4
|
export * from './contracts/index.js';
|
|
5
5
|
export * from './integrations/github-ref.js';
|
|
6
|
+
export * from './integrations/pr-monitoring.js';
|
|
7
|
+
export * from './integrations/pr-project-import.js';
|
|
8
|
+
export * from './integrations/pr-review-requirements.js';
|
|
9
|
+
export * from './integrations/pr-rule-config.js';
|
|
10
|
+
export * from './integrations/pr-rule-predicates.js';
|
|
6
11
|
export * from './pairing/index.js';
|
|
7
12
|
export * from './recipe/index.js';
|
|
8
13
|
export * from './recipes/step-io.js';
|
|
@@ -12,6 +17,7 @@ export * from './runs/decision-resolution.js';
|
|
|
12
17
|
export * from './runs/evidence-summary.js';
|
|
13
18
|
export * from './runs/family-iteration-ledger.js';
|
|
14
19
|
export * from './runs/family-readiness.js';
|
|
20
|
+
export * from './runs/interactive-handoff.js';
|
|
15
21
|
export * from './runs/review-chain.js';
|
|
16
22
|
export * from './runs/run-mode.js';
|
|
17
23
|
export * from './runs/slot-resolution.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,11 @@ export * from './agents/roles.js';
|
|
|
3
3
|
export * from './checklist-target.js';
|
|
4
4
|
export * from './contracts/index.js';
|
|
5
5
|
export * from './integrations/github-ref.js';
|
|
6
|
+
export * from './integrations/pr-monitoring.js';
|
|
7
|
+
export * from './integrations/pr-project-import.js';
|
|
8
|
+
export * from './integrations/pr-review-requirements.js';
|
|
9
|
+
export * from './integrations/pr-rule-config.js';
|
|
10
|
+
export * from './integrations/pr-rule-predicates.js';
|
|
6
11
|
export * from './pairing/index.js';
|
|
7
12
|
export * from './recipe/index.js';
|
|
8
13
|
export * from './recipes/step-io.js';
|
|
@@ -12,6 +17,7 @@ export * from './runs/decision-resolution.js';
|
|
|
12
17
|
export * from './runs/evidence-summary.js';
|
|
13
18
|
export * from './runs/family-iteration-ledger.js';
|
|
14
19
|
export * from './runs/family-readiness.js';
|
|
20
|
+
export * from './runs/interactive-handoff.js';
|
|
15
21
|
export * from './runs/review-chain.js';
|
|
16
22
|
export * from './runs/run-mode.js';
|
|
17
23
|
export * from './runs/slot-resolution.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MonitoredPRIdentity, PRExecutionChoice, PRExecutionProfile, PRMonitorConfig, PRMonitorPolicy, PRSourceAccount } from '../contracts/pr-monitoring.js';
|
|
2
|
+
export declare function assertMonitoredPRIdentity(value: unknown): asserts value is MonitoredPRIdentity;
|
|
3
|
+
export declare function monitoredPRKey(pr: MonitoredPRIdentity): string;
|
|
4
|
+
export declare function monitoredPRUrl(pr: MonitoredPRIdentity): string;
|
|
5
|
+
export declare function assertPRExecutionProfile(value: unknown): asserts value is PRExecutionProfile;
|
|
6
|
+
export declare function assertPRSourceAccount(value: unknown): asserts value is PRSourceAccount;
|
|
7
|
+
export declare function assertPRMonitorPolicy(value: unknown): asserts value is PRMonitorPolicy;
|
|
8
|
+
export declare function assertPRMonitorConfig(value: unknown): asserts value is PRMonitorConfig;
|
|
9
|
+
/** Preserve declared preference order; the queue still owns availability and admission. */
|
|
10
|
+
export declare function prExecutionChoices(profile: PRExecutionProfile): PRExecutionChoice[];
|
|
11
|
+
/** Overlapping rule constraints intersect; they can never broaden another rule's authority. */
|
|
12
|
+
export declare function intersectPRExecutionProfiles(profiles: PRExecutionProfile[]): PRExecutionChoice[];
|
|
13
|
+
//# sourceMappingURL=pr-monitoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-monitoring.d.ts","sourceRoot":"","sources":["../../src/integrations/pr-monitoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAkCvC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAY9F;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAG9D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAG9D;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAiC5F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAOtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAOtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CA8BtF;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,EAAE,CAgBnF;AAED,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,CAahG"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
function record(value, path) {
|
|
2
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
3
|
+
throw new Error(`${path} must be an object`);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function fields(value, allowed, path) {
|
|
7
|
+
for (const key of Object.keys(value)) {
|
|
8
|
+
if (!allowed.includes(key))
|
|
9
|
+
throw new Error(`${path}.${key} is not supported`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function text(value, path) {
|
|
13
|
+
if (typeof value !== 'string' || !value.trim() || value !== value.trim() || value.length > 256) {
|
|
14
|
+
throw new Error(`${path} must be a non-empty trimmed string of at most 256 characters`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function strings(value, path, allowEmpty = false) {
|
|
18
|
+
if (!Array.isArray(value) || (!allowEmpty && value.length === 0) || value.length > 100) {
|
|
19
|
+
throw new Error(`${path} must be an array with ${allowEmpty ? '0' : '1'} to 100 values`);
|
|
20
|
+
}
|
|
21
|
+
value.forEach((item, index) => text(item, `${path}[${index}]`));
|
|
22
|
+
if (new Set(value).size !== value.length)
|
|
23
|
+
throw new Error(`${path} contains duplicate values`);
|
|
24
|
+
}
|
|
25
|
+
function integer(value, min, max, path) {
|
|
26
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < min || value > max) {
|
|
27
|
+
throw new Error(`${path} must be an integer between ${min} and ${max}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function assertMonitoredPRIdentity(value) {
|
|
31
|
+
record(value, 'pr');
|
|
32
|
+
fields(value, ['host', 'repo', 'number'], 'pr');
|
|
33
|
+
text(value.host, 'pr.host');
|
|
34
|
+
if (!/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/i.test(value.host) || value.host.includes('..')) {
|
|
35
|
+
throw new Error('pr.host must be a hostname without a port or path');
|
|
36
|
+
}
|
|
37
|
+
text(value.repo, 'pr.repo');
|
|
38
|
+
if (!/^[a-z0-9_-][a-z0-9_.-]*\/[a-z0-9_-][a-z0-9_.-]*$/i.test(value.repo)) {
|
|
39
|
+
throw new Error('pr.repo must be owner/repository');
|
|
40
|
+
}
|
|
41
|
+
integer(value.number, 1, Number.MAX_SAFE_INTEGER, 'pr.number');
|
|
42
|
+
}
|
|
43
|
+
export function monitoredPRKey(pr) {
|
|
44
|
+
assertMonitoredPRIdentity(pr);
|
|
45
|
+
return `${pr.host.toLowerCase()}/${pr.repo.toLowerCase()}#${pr.number}`;
|
|
46
|
+
}
|
|
47
|
+
export function monitoredPRUrl(pr) {
|
|
48
|
+
assertMonitoredPRIdentity(pr);
|
|
49
|
+
return `https://${pr.host.toLowerCase()}/${pr.repo}/pull/${pr.number}`;
|
|
50
|
+
}
|
|
51
|
+
export function assertPRExecutionProfile(value) {
|
|
52
|
+
record(value, 'execution');
|
|
53
|
+
fields(value, ['slotPolicy', 'models'], 'execution');
|
|
54
|
+
record(value.slotPolicy, 'execution.slotPolicy');
|
|
55
|
+
const policy = value.slotPolicy;
|
|
56
|
+
let slots;
|
|
57
|
+
if (policy.kind === 'exact') {
|
|
58
|
+
fields(policy, ['kind', 'slotId'], 'execution.slotPolicy');
|
|
59
|
+
text(policy.slotId, 'execution.slotPolicy.slotId');
|
|
60
|
+
slots = [policy.slotId];
|
|
61
|
+
}
|
|
62
|
+
else if (policy.kind === 'pool') {
|
|
63
|
+
fields(policy, ['kind', 'allowedSlots'], 'execution.slotPolicy');
|
|
64
|
+
strings(policy.allowedSlots, 'execution.slotPolicy.allowedSlots');
|
|
65
|
+
slots = policy.allowedSlots;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw new Error('execution.slotPolicy.kind must be exact or pool');
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(value.models) || value.models.length === 0 || value.models.length > 20) {
|
|
71
|
+
throw new Error('execution.models must contain 1 to 20 alternatives');
|
|
72
|
+
}
|
|
73
|
+
for (const model of value.models) {
|
|
74
|
+
record(model, 'execution.models[]');
|
|
75
|
+
fields(model, ['runner', 'model', 'effort', 'allowedSlots'], 'execution.models[]');
|
|
76
|
+
text(model.runner, 'model.runner');
|
|
77
|
+
text(model.model, 'model.model');
|
|
78
|
+
if (model.effort !== undefined)
|
|
79
|
+
text(model.effort, 'model.effort');
|
|
80
|
+
if (model.allowedSlots !== undefined) {
|
|
81
|
+
strings(model.allowedSlots, 'model.allowedSlots');
|
|
82
|
+
if (model.allowedSlots.some((slot) => !slots.includes(slot))) {
|
|
83
|
+
throw new Error('model.allowedSlots must be within the execution slot policy');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function assertPRSourceAccount(value) {
|
|
89
|
+
record(value, 'account');
|
|
90
|
+
fields(value, ['host', 'login'], 'account');
|
|
91
|
+
text(value.host, 'account.host');
|
|
92
|
+
text(value.login, 'account.login');
|
|
93
|
+
if (!/^[a-z0-9][a-z0-9-]*$/i.test(value.login))
|
|
94
|
+
throw new Error('account.login must be a GitHub login');
|
|
95
|
+
}
|
|
96
|
+
export function assertPRMonitorPolicy(value) {
|
|
97
|
+
record(value, 'policy');
|
|
98
|
+
if (value.mode === 'notify-only')
|
|
99
|
+
fields(value, ['mode'], 'policy');
|
|
100
|
+
else if (value.mode === 'automatic-repair') {
|
|
101
|
+
fields(value, ['mode', 'execution'], 'policy');
|
|
102
|
+
assertPRExecutionProfile(value.execution);
|
|
103
|
+
}
|
|
104
|
+
else
|
|
105
|
+
throw new Error('policy.mode must be notify-only or automatic-repair');
|
|
106
|
+
}
|
|
107
|
+
export function assertPRMonitorConfig(value) {
|
|
108
|
+
record(value, 'monitor');
|
|
109
|
+
fields(value, [
|
|
110
|
+
'pr',
|
|
111
|
+
'account',
|
|
112
|
+
'project',
|
|
113
|
+
'teamId',
|
|
114
|
+
'policy',
|
|
115
|
+
'pollIntervalMs',
|
|
116
|
+
'watchedChecks',
|
|
117
|
+
'automaticAttemptLimit',
|
|
118
|
+
'cooldownMs',
|
|
119
|
+
], 'monitor');
|
|
120
|
+
assertMonitoredPRIdentity(value.pr);
|
|
121
|
+
assertPRSourceAccount(value.account);
|
|
122
|
+
if (value.account.host.toLowerCase() !== value.pr.host.toLowerCase()) {
|
|
123
|
+
throw new Error('account.host must match the PR host');
|
|
124
|
+
}
|
|
125
|
+
if (value.project !== undefined)
|
|
126
|
+
text(value.project, 'monitor.project');
|
|
127
|
+
if (value.teamId !== undefined)
|
|
128
|
+
text(value.teamId, 'monitor.teamId');
|
|
129
|
+
assertPRMonitorPolicy(value.policy);
|
|
130
|
+
if (value.policy.mode === 'automatic-repair')
|
|
131
|
+
text(value.project, 'monitor.project');
|
|
132
|
+
integer(value.pollIntervalMs, 60_000, 86_400_000, 'monitor.pollIntervalMs');
|
|
133
|
+
strings(value.watchedChecks, 'monitor.watchedChecks', true);
|
|
134
|
+
integer(value.automaticAttemptLimit, 1, 10, 'monitor.automaticAttemptLimit');
|
|
135
|
+
integer(value.cooldownMs, 60_000, 86_400_000, 'monitor.cooldownMs');
|
|
136
|
+
}
|
|
137
|
+
/** Preserve declared preference order; the queue still owns availability and admission. */
|
|
138
|
+
export function prExecutionChoices(profile) {
|
|
139
|
+
assertPRExecutionProfile(profile);
|
|
140
|
+
const slots = profile.slotPolicy.kind === 'exact'
|
|
141
|
+
? [profile.slotPolicy.slotId]
|
|
142
|
+
: profile.slotPolicy.allowedSlots;
|
|
143
|
+
return profile.models.flatMap((model) => slots
|
|
144
|
+
.filter((slot) => !model.allowedSlots || model.allowedSlots.includes(slot))
|
|
145
|
+
.map((slotId) => ({
|
|
146
|
+
slotId,
|
|
147
|
+
runner: model.runner,
|
|
148
|
+
model: model.model,
|
|
149
|
+
effort: model.effort,
|
|
150
|
+
})));
|
|
151
|
+
}
|
|
152
|
+
/** Overlapping rule constraints intersect; they can never broaden another rule's authority. */
|
|
153
|
+
export function intersectPRExecutionProfiles(profiles) {
|
|
154
|
+
const choices = profiles.map(prExecutionChoices);
|
|
155
|
+
return (choices[0] ?? []).filter((choice) => choices.every((other) => other.some((candidate) => candidate.slotId === choice.slotId &&
|
|
156
|
+
candidate.runner === choice.runner &&
|
|
157
|
+
candidate.model === choice.model &&
|
|
158
|
+
candidate.effort === choice.effort)));
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=pr-monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-monitoring.js","sourceRoot":"","sources":["../../src/integrations/pr-monitoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PRImportedProjectView, PRProjectField, PRProjectFilterTerm } from '../contracts/pr-rules.js';
|
|
2
|
+
export declare function parsePRProjectURL(value: string, host: string): {
|
|
3
|
+
ownerKind: "user" | "organization";
|
|
4
|
+
owner: string;
|
|
5
|
+
number: number;
|
|
6
|
+
viewNumber: number | undefined;
|
|
7
|
+
};
|
|
8
|
+
/** Preserve unsupported syntax as one term so it cannot be partially dropped or regrouped. */
|
|
9
|
+
export declare function splitPRProjectFilter(filter: string): string[];
|
|
10
|
+
export declare function compilePRProjectFilter(filter: string, projectId: string, fields: PRProjectField[]): PRProjectFilterTerm[];
|
|
11
|
+
export declare function assertPRImportedProjectView(value: unknown): asserts value is PRImportedProjectView;
|
|
12
|
+
//# sourceMappingURL=pr-project-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-project-import.d.ts","sourceRoot":"","sources":["../../src/integrations/pr-project-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EAGpB,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;EAgC5D;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA+B7D;AA6ED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EAAE,GACvB,mBAAmB,EAAE,CAkGvB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,qBAAqB,CAsDxC"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { assertPRRulePredicate } from './pr-rule-predicates.js';
|
|
2
|
+
export function parsePRProjectURL(value, host) {
|
|
3
|
+
const url = new URL(value);
|
|
4
|
+
const match = /^\/(orgs|users)\/([a-z0-9-]+)\/projects\/([1-9]\d*)(?:\/views\/([1-9]\d*))?\/?$/i.exec(url.pathname);
|
|
5
|
+
if (url.protocol !== 'https:' ||
|
|
6
|
+
url.hostname.toLowerCase() !== host.toLowerCase() ||
|
|
7
|
+
url.port ||
|
|
8
|
+
url.username ||
|
|
9
|
+
url.password ||
|
|
10
|
+
url.search ||
|
|
11
|
+
url.hash ||
|
|
12
|
+
!match)
|
|
13
|
+
throw new Error('Use a saved GitHub Project or view URL on the selected account host, without temporary query filters');
|
|
14
|
+
const number = Number(match[3]);
|
|
15
|
+
const viewNumber = match[4] ? Number(match[4]) : undefined;
|
|
16
|
+
if (!Number.isSafeInteger(number) ||
|
|
17
|
+
(viewNumber !== undefined && !Number.isSafeInteger(viewNumber)))
|
|
18
|
+
throw new Error('Invalid Project/view number');
|
|
19
|
+
return {
|
|
20
|
+
ownerKind: match[1].toLowerCase() === 'orgs' ? 'organization' : 'user',
|
|
21
|
+
owner: match[2],
|
|
22
|
+
number,
|
|
23
|
+
viewNumber,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Preserve unsupported syntax as one term so it cannot be partially dropped or regrouped. */
|
|
27
|
+
export function splitPRProjectFilter(filter) {
|
|
28
|
+
if (typeof filter !== 'string' || filter.length > 4096)
|
|
29
|
+
throw new Error('Project filters must be strings of at most 4096 characters');
|
|
30
|
+
// Keep unsupported quoting whole so negation and OR grouping cannot change during partial import.
|
|
31
|
+
if (filter.includes("'"))
|
|
32
|
+
return filter.trim() ? [filter.trim()] : [];
|
|
33
|
+
const terms = [];
|
|
34
|
+
let start = 0, quoted = false, escaped = false, grouping = false;
|
|
35
|
+
for (let i = 0; i <= filter.length; i++) {
|
|
36
|
+
const char = filter[i];
|
|
37
|
+
if (escaped) {
|
|
38
|
+
escaped = false;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (char === '\\' && quoted) {
|
|
42
|
+
escaped = true;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (char === '"')
|
|
46
|
+
quoted = !quoted;
|
|
47
|
+
if (!quoted && (char === '(' || char === ')'))
|
|
48
|
+
grouping = true;
|
|
49
|
+
if ((!quoted && /\s/.test(char ?? '')) || i === filter.length) {
|
|
50
|
+
if (i > start)
|
|
51
|
+
terms.push(filter.slice(start, i));
|
|
52
|
+
start = i + 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (quoted || grouping || terms.some((term) => ['OR', 'AND'].includes(term.toUpperCase())))
|
|
56
|
+
return filter.trim() ? [filter.trim()] : [];
|
|
57
|
+
if (terms.length > 100)
|
|
58
|
+
throw new Error('Project filters may contain at most 100 terms');
|
|
59
|
+
return terms;
|
|
60
|
+
}
|
|
61
|
+
function literal(text) {
|
|
62
|
+
if (text.startsWith('"')) {
|
|
63
|
+
const value = JSON.parse(text);
|
|
64
|
+
if (typeof value !== 'string' || !value)
|
|
65
|
+
throw new Error('Expected a non-empty quoted value');
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
if (!text || /["\s]/.test(text))
|
|
69
|
+
throw new Error('Quote filter values containing spaces');
|
|
70
|
+
return text;
|
|
71
|
+
}
|
|
72
|
+
function parseTerm(text) {
|
|
73
|
+
if (text.includes("'"))
|
|
74
|
+
throw new Error('Map single-quoted filters explicitly or re-save the view using double quotes');
|
|
75
|
+
let quoted = false, escaped = false, colon = -1;
|
|
76
|
+
for (let i = 0; i < text.length; i++) {
|
|
77
|
+
if (escaped) {
|
|
78
|
+
escaped = false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (text[i] === '\\' && quoted) {
|
|
82
|
+
escaped = true;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (text[i] === '"')
|
|
86
|
+
quoted = !quoted;
|
|
87
|
+
if (text[i] === ':' && !quoted) {
|
|
88
|
+
colon = i;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (colon < 1)
|
|
93
|
+
throw new Error('Map this filter expression explicitly');
|
|
94
|
+
const negated = text.startsWith('-');
|
|
95
|
+
const key = literal(text.slice(negated ? 1 : 0, colon)).toLowerCase();
|
|
96
|
+
const tail = text.slice(colon + 1);
|
|
97
|
+
const values = [];
|
|
98
|
+
let start = 0;
|
|
99
|
+
quoted = false;
|
|
100
|
+
escaped = false;
|
|
101
|
+
for (let i = 0; i <= tail.length; i++) {
|
|
102
|
+
if (escaped) {
|
|
103
|
+
escaped = false;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (tail[i] === '\\' && quoted) {
|
|
107
|
+
escaped = true;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (tail[i] === '"')
|
|
111
|
+
quoted = !quoted;
|
|
112
|
+
if ((!quoted && tail[i] === ',') || i === tail.length) {
|
|
113
|
+
values.push(literal(tail.slice(start, i)));
|
|
114
|
+
start = i + 1;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (quoted)
|
|
118
|
+
throw new Error('Unclosed filter quote');
|
|
119
|
+
return { key, values, negated };
|
|
120
|
+
}
|
|
121
|
+
function comparison(field, operator, value) {
|
|
122
|
+
return { kind: 'compare', field, operator, value };
|
|
123
|
+
}
|
|
124
|
+
function any(values) {
|
|
125
|
+
if (values.includes(true))
|
|
126
|
+
return true;
|
|
127
|
+
const predicates = values.filter((value) => typeof value !== 'boolean');
|
|
128
|
+
return !predicates.length
|
|
129
|
+
? false
|
|
130
|
+
: predicates.length === 1
|
|
131
|
+
? predicates[0]
|
|
132
|
+
: { kind: 'any', items: predicates };
|
|
133
|
+
}
|
|
134
|
+
export function compilePRProjectFilter(filter, projectId, fields) {
|
|
135
|
+
return splitPRProjectFilter(filter).map((text) => {
|
|
136
|
+
try {
|
|
137
|
+
const { key, values, negated } = parseTerm(text);
|
|
138
|
+
let predicate;
|
|
139
|
+
if (key === 'is') {
|
|
140
|
+
predicate = any(values.map((value) => {
|
|
141
|
+
if (value === 'pr')
|
|
142
|
+
return true;
|
|
143
|
+
if (value === 'issue')
|
|
144
|
+
return false;
|
|
145
|
+
if (value === 'draft')
|
|
146
|
+
return comparison('draft', 'equals', true);
|
|
147
|
+
if (value === 'open' || value === 'merged')
|
|
148
|
+
return comparison('state', 'equals', value);
|
|
149
|
+
if (value === 'closed')
|
|
150
|
+
return comparison('state', 'one-of', ['closed', 'merged']);
|
|
151
|
+
throw new Error(`Unsupported item state/type: ${value}`);
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
else if (key === 'repo') {
|
|
155
|
+
if (values.some((value) => !/^[^/\s*,]+\/[^/\s*,]+$/.test(value)))
|
|
156
|
+
throw new Error('Repository filters require literal owner/repo values');
|
|
157
|
+
predicate = comparison('repository', 'one-of', values);
|
|
158
|
+
}
|
|
159
|
+
else if (key === 'label') {
|
|
160
|
+
if (values.some((value) => value.includes('*')))
|
|
161
|
+
throw new Error('Map label wildcard filters explicitly');
|
|
162
|
+
predicate = comparison('labels', 'contains-any', values);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const fieldKey = key === 'no' || key === 'has' ? values[0].toLowerCase() : key;
|
|
166
|
+
if ((key === 'no' || key === 'has') && values.length !== 1)
|
|
167
|
+
throw new Error('Map combined presence filters explicitly');
|
|
168
|
+
if ((key === 'no' || key === 'has') && fieldKey === 'label') {
|
|
169
|
+
predicate = comparison('labels', 'glob', ['**']);
|
|
170
|
+
if (key === 'no')
|
|
171
|
+
predicate = { kind: 'not', item: predicate };
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const matches = fields.filter((field) => field.name.toLowerCase() === fieldKey ||
|
|
175
|
+
field.name.toLowerCase().replace(/\s+/g, '-') === fieldKey);
|
|
176
|
+
if (matches.length !== 1)
|
|
177
|
+
throw new Error(`Field is unavailable or ambiguous: ${fieldKey}`);
|
|
178
|
+
const field = matches[0];
|
|
179
|
+
const valueType = field.dataType.toLowerCase().replaceAll('_', '-');
|
|
180
|
+
if (!['text', 'number', 'date', 'single-select'].includes(valueType))
|
|
181
|
+
throw new Error(`Unsupported Project field type: ${field.dataType}`);
|
|
182
|
+
const binding = {
|
|
183
|
+
projectId,
|
|
184
|
+
fieldId: field.id,
|
|
185
|
+
valueType: valueType,
|
|
186
|
+
};
|
|
187
|
+
if (key === 'no' || key === 'has')
|
|
188
|
+
predicate = comparison(binding, 'is-set', key === 'has');
|
|
189
|
+
else if (valueType === 'single-select') {
|
|
190
|
+
const ids = values.map((value) => {
|
|
191
|
+
const options = field.options?.filter((option) => option.name.toLowerCase() === value.toLowerCase()) ?? [];
|
|
192
|
+
if (options.length !== 1)
|
|
193
|
+
throw new Error(`Option is unavailable or ambiguous: ${value}`);
|
|
194
|
+
return options[0].id;
|
|
195
|
+
});
|
|
196
|
+
predicate = comparison(binding, 'one-of', [...new Set(ids)]);
|
|
197
|
+
}
|
|
198
|
+
else if (valueType === 'number') {
|
|
199
|
+
predicate = any(values.map((value) => {
|
|
200
|
+
const match = /^(>|<)?(-?(?:\d+(?:\.\d+)?|\.\d+))$/.exec(value);
|
|
201
|
+
if (!match || !Number.isFinite(Number(match[2])))
|
|
202
|
+
throw new Error('Map numeric ranges and inclusive comparisons explicitly');
|
|
203
|
+
return comparison(binding, match[1] === '>' ? 'greater-than' : match[1] === '<' ? 'less-than' : 'equals', Number(match[2]));
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
else if (valueType === 'date') {
|
|
207
|
+
if (values.some((value) => !/^\d{4}-\d{2}-\d{2}$/.test(value)))
|
|
208
|
+
throw new Error('Map date ranges and relative dates explicitly');
|
|
209
|
+
predicate = comparison(binding, 'one-of', values);
|
|
210
|
+
}
|
|
211
|
+
else
|
|
212
|
+
throw new Error('Map text-search filters explicitly; substring search is not exact equality');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (typeof predicate === 'boolean')
|
|
216
|
+
return { text, kind: 'constant', value: negated ? !predicate : predicate };
|
|
217
|
+
if (negated)
|
|
218
|
+
predicate = { kind: 'not', item: predicate };
|
|
219
|
+
assertPRRulePredicate(predicate);
|
|
220
|
+
return { text, kind: 'predicate', predicate };
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
// An unsupported or invalid term stays visible and blocks the source until explicitly mapped.
|
|
224
|
+
return {
|
|
225
|
+
text,
|
|
226
|
+
kind: 'unmapped',
|
|
227
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
export function assertPRImportedProjectView(value) {
|
|
233
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
234
|
+
throw new Error('Imported view must be an object');
|
|
235
|
+
const view = value;
|
|
236
|
+
if (Object.keys(view).some((key) => !['number', 'name', 'filter', 'terms'].includes(key)) ||
|
|
237
|
+
!Number.isSafeInteger(view.number) ||
|
|
238
|
+
Number(view.number) < 1 ||
|
|
239
|
+
typeof view.name !== 'string' ||
|
|
240
|
+
!view.name.trim())
|
|
241
|
+
throw new Error('Invalid imported view identity');
|
|
242
|
+
if (typeof view.filter !== 'string' || !Array.isArray(view.terms))
|
|
243
|
+
throw new Error('Imported view must retain its filter and all terms');
|
|
244
|
+
const terms = splitPRProjectFilter(view.filter);
|
|
245
|
+
if (terms.length !== view.terms.length)
|
|
246
|
+
throw new Error('Imported view cannot discard filter terms');
|
|
247
|
+
for (let i = 0; i < terms.length; i++) {
|
|
248
|
+
const term = view.terms[i];
|
|
249
|
+
if (!term || typeof term !== 'object' || term.text !== terms[i])
|
|
250
|
+
throw new Error('Imported filter term does not match the original filter');
|
|
251
|
+
const allowed = term.kind === 'predicate'
|
|
252
|
+
? ['text', 'kind', 'predicate', 'manuallyMapped']
|
|
253
|
+
: term.kind === 'constant'
|
|
254
|
+
? ['text', 'kind', 'value']
|
|
255
|
+
: ['text', 'kind', 'reason'];
|
|
256
|
+
if (Object.keys(term).some((key) => !allowed.includes(key)))
|
|
257
|
+
throw new Error('Unsupported imported filter property');
|
|
258
|
+
if (term.kind === 'predicate') {
|
|
259
|
+
assertPRRulePredicate(term.predicate);
|
|
260
|
+
if (term.manuallyMapped !== undefined && typeof term.manuallyMapped !== 'boolean')
|
|
261
|
+
throw new Error('manuallyMapped must be explicit boolean');
|
|
262
|
+
}
|
|
263
|
+
else if (term.kind === 'constant') {
|
|
264
|
+
const compiled = compilePRProjectFilter(terms[i], 'unused', []);
|
|
265
|
+
if (compiled.length !== 1 ||
|
|
266
|
+
compiled[0].kind !== 'constant' ||
|
|
267
|
+
compiled[0].value !== term.value)
|
|
268
|
+
throw new Error('Only PR/issue type filters may compile to constants');
|
|
269
|
+
}
|
|
270
|
+
else if (term.kind !== 'unmapped' || typeof term.reason !== 'string' || !term.reason.trim())
|
|
271
|
+
throw new Error('Unsupported filter terms need an actionable reason');
|
|
272
|
+
}
|
|
273
|
+
const predicates = view.terms
|
|
274
|
+
.filter((term) => term.kind === 'predicate')
|
|
275
|
+
.map((term) => term.predicate);
|
|
276
|
+
if (predicates.length)
|
|
277
|
+
assertPRRulePredicate(predicates.length === 1 ? predicates[0] : { kind: 'all', items: predicates });
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=pr-project-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-project-import.js","sourceRoot":"","sources":["../../src/integrations/pr-project-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PRReviewObservation } from '../contracts/pr-rules.js';
|
|
2
|
+
/** A negative gate only: satisfying this check never authorizes a run. */
|
|
3
|
+
export declare function prReviewBlockedReason(observation: PRReviewObservation | undefined): string | undefined;
|
|
4
|
+
//# sourceMappingURL=pr-review-requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-review-requirements.d.ts","sourceRoot":"","sources":["../../src/integrations/pr-review-requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,0EAA0E;AAC1E,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,mBAAmB,GAAG,SAAS,GAC3C,MAAM,GAAG,SAAS,CAgBpB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** A negative gate only: satisfying this check never authorizes a run. */
|
|
2
|
+
export function prReviewBlockedReason(observation) {
|
|
3
|
+
if (!observation)
|
|
4
|
+
return undefined;
|
|
5
|
+
if (observation.state !== 'open')
|
|
6
|
+
return `This PR is ${observation.state}; no review is needed.`;
|
|
7
|
+
if (observation.draft)
|
|
8
|
+
return 'This PR is still a draft.';
|
|
9
|
+
// A fresh, explicit GitHub re-request can ask for another review on the same commit.
|
|
10
|
+
if (observation.requested)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (observation.decision === 'APPROVED')
|
|
13
|
+
return 'GitHub review requirements are already satisfied.';
|
|
14
|
+
const review = observation.review;
|
|
15
|
+
if (review &&
|
|
16
|
+
['APPROVED', 'COMMENTED', 'CHANGES_REQUESTED'].includes(review.state) &&
|
|
17
|
+
review.commit === observation.headSha)
|
|
18
|
+
return `@${observation.reviewer} already reviewed the current commit. A new review is unnecessary until the head changes or GitHub requests another review.`;
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=pr-review-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-review-requirements.js","sourceRoot":"","sources":["../../src/integrations/pr-review-requirements.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CACnC,WAA4C;IAE5C,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO,cAAc,WAAW,CAAC,KAAK,wBAAwB,CAAC;IACjG,IAAI,WAAW,CAAC,KAAK;QAAE,OAAO,2BAA2B,CAAC;IAC1D,qFAAqF;IACrF,IAAI,WAAW,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,WAAW,CAAC,QAAQ,KAAK,UAAU;QACrC,OAAO,mDAAmD,CAAC;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,IACE,MAAM;QACN,CAAC,UAAU,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACrE,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO;QAErC,OAAO,IAAI,WAAW,CAAC,QAAQ,6HAA6H,CAAC;IAC/J,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PRReviewOptions, PRReviewRequest, PRTeamConfig, PRTriggerRuleConfig } from '../contracts/pr-rules.js';
|
|
2
|
+
export declare function assertPRReviewOptions(value: unknown): asserts value is PRReviewOptions;
|
|
3
|
+
export declare function assertPRReviewRequest(value: unknown): asserts value is PRReviewRequest;
|
|
4
|
+
export declare function assertPRTeamConfig(value: unknown): asserts value is PRTeamConfig;
|
|
5
|
+
export declare function assertPRTriggerRuleConfig(value: unknown): asserts value is PRTriggerRuleConfig;
|
|
6
|
+
//# sourceMappingURL=pr-rule-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-rule-config.d.ts","sourceRoot":"","sources":["../../src/integrations/pr-rule-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAgClC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CAetF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,eAAe,CActF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CA+FhF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CA4C9F"}
|