@whittlelabs/sifter 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/bin.js +25 -2
  2. package/bin.js.map +2 -2
  3. package/package.json +1 -1
package/bin.js CHANGED
@@ -20747,6 +20747,7 @@ var require_shuttle = __commonJS({
20747
20747
  "use strict";
20748
20748
  Object.defineProperty(exports2, "__esModule", { value: true });
20749
20749
  exports2.Shuttle = void 0;
20750
+ exports2.mergeExecutorDefaults = mergeExecutorDefaults;
20750
20751
  var os_1 = require("os");
20751
20752
  var jobs_1 = require_dist2();
20752
20753
  var self_update_1 = require_self_update();
@@ -20806,7 +20807,7 @@ var require_shuttle = __commonJS({
20806
20807
  });
20807
20808
  const registry = new registry_1.ExecutorRegistry(this.brand.executorAllowlist);
20808
20809
  registerBuiltInExecutors(registry, this.brand.executorAllowlist);
20809
- const executors = registry.build(this.config.executors);
20810
+ const executors = registry.build(mergeExecutorDefaults(this.brand.executorDefaults, this.config.executors));
20810
20811
  const byStrategy = /* @__PURE__ */ new Map();
20811
20812
  for (const executor of executors) {
20812
20813
  for (const strategy of executor.strategies)
@@ -20965,6 +20966,15 @@ var require_shuttle = __commonJS({
20965
20966
  }
20966
20967
  };
20967
20968
  exports2.Shuttle = Shuttle;
20969
+ function mergeExecutorDefaults(defaults, userExecutors) {
20970
+ if (!defaults)
20971
+ return userExecutors;
20972
+ const merged = {};
20973
+ for (const [name, userConfig] of Object.entries(userExecutors)) {
20974
+ merged[name] = { ...defaults[name] ?? {}, ...userConfig };
20975
+ }
20976
+ return merged;
20977
+ }
20968
20978
  function registerBuiltInExecutors(registry, allowlist) {
20969
20979
  const all = [
20970
20980
  ["claude-code", claude_code_1.createClaudeCodeExecutor],
@@ -21539,7 +21549,7 @@ var import_shuttle = __toESM(require_dist5());
21539
21549
  // package.json
21540
21550
  var package_default = {
21541
21551
  name: "@whittlelabs/sifter",
21542
- version: "0.13.0",
21552
+ version: "0.14.0",
21543
21553
  description: "Whittle Sifter: paired AI reviewer for Whittle Sift job pools.",
21544
21554
  bin: {
21545
21555
  "whittle-sifter": "./dist/bin.js"
@@ -21598,6 +21608,19 @@ var sifterBrand = {
21598
21608
  configSearchPaths: ["~/.sifter/sifter.yaml"]
21599
21609
  },
21600
21610
  executorAllowlist: ["claude-code", "anthropic-api", "http-api", "webhook", "custom-script"],
21611
+ // Overlay-fetch origins for the signed standards-content URLs each Sift
21612
+ // tier signs (SIFT_PUBLIC_API_URL). Without these, the executor's SSRF
21613
+ // guard silently skips the standards overlay and every review runs
21614
+ // standards-blind (2026-07-13). User config overrides per key.
21615
+ executorDefaults: {
21616
+ "claude-code": {
21617
+ overlayAllowedHosts: [
21618
+ "https://api.sift.whittlelabs.com",
21619
+ "https://api.sift.stage.whittlelabs.com",
21620
+ "http://localhost:3008"
21621
+ ]
21622
+ }
21623
+ },
21601
21624
  keepRegistration: {
21602
21625
  keepApiUrl: process.env.KEEP_API_URL ?? "https://keep.whittlelabs.com",
21603
21626
  jobsApiUrl: process.env.JOBS_API_URL ?? "https://jobs.whittlelabs.com",