nexus-agents 2.145.1 → 2.146.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 (31) hide show
  1. package/dist/{chunk-IIGRVRKD.js → chunk-256RUC4U.js} +239 -200
  2. package/dist/{chunk-IIGRVRKD.js.map → chunk-256RUC4U.js.map} +1 -1
  3. package/dist/{chunk-QKWS3REM.js → chunk-45QUEZNS.js} +2 -2
  4. package/dist/{chunk-MFTWFPXS.js → chunk-4XQE5A7P.js} +2 -2
  5. package/dist/{chunk-ZRRL3YB6.js → chunk-I5T7GUM7.js} +4 -194
  6. package/dist/chunk-I5T7GUM7.js.map +1 -0
  7. package/dist/chunk-RCQLUJY3.js +208 -0
  8. package/dist/chunk-RCQLUJY3.js.map +1 -0
  9. package/dist/{chunk-J2KMYVWA.js → chunk-RII4VXHO.js} +34 -1
  10. package/dist/{chunk-J2KMYVWA.js.map → chunk-RII4VXHO.js.map} +1 -1
  11. package/dist/{chunk-SDJLXKZZ.js → chunk-XZ4QHFCD.js} +3 -3
  12. package/dist/{chunk-AREFLH3S.js → chunk-Y4NDNQYU.js} +2 -2
  13. package/dist/cli.js +17 -10
  14. package/dist/cli.js.map +1 -1
  15. package/dist/{consensus-vote-6V3JNRXI.js → consensus-vote-IBT3C5YC.js} +4 -3
  16. package/dist/{improvement-review-K7YYYZCJ.js → improvement-review-WMDMS32T.js} +4 -3
  17. package/dist/index.d.ts +33 -1
  18. package/dist/index.js +19 -17
  19. package/dist/index.js.map +1 -1
  20. package/dist/{issue-triage-44OGWBDA.js → issue-triage-R7DMXIEN.js} +3 -2
  21. package/dist/{setup-command-I3U4QK54.js → setup-command-BALYXSMI.js} +3 -3
  22. package/package.json +1 -1
  23. package/dist/chunk-ZRRL3YB6.js.map +0 -1
  24. /package/dist/{chunk-QKWS3REM.js.map → chunk-45QUEZNS.js.map} +0 -0
  25. /package/dist/{chunk-MFTWFPXS.js.map → chunk-4XQE5A7P.js.map} +0 -0
  26. /package/dist/{chunk-SDJLXKZZ.js.map → chunk-XZ4QHFCD.js.map} +0 -0
  27. /package/dist/{chunk-AREFLH3S.js.map → chunk-Y4NDNQYU.js.map} +0 -0
  28. /package/dist/{consensus-vote-6V3JNRXI.js.map → consensus-vote-IBT3C5YC.js.map} +0 -0
  29. /package/dist/{improvement-review-K7YYYZCJ.js.map → improvement-review-WMDMS32T.js.map} +0 -0
  30. /package/dist/{issue-triage-44OGWBDA.js.map → issue-triage-R7DMXIEN.js.map} +0 -0
  31. /package/dist/{setup-command-I3U4QK54.js.map → setup-command-BALYXSMI.js.map} +0 -0
@@ -18,7 +18,7 @@ import {
18
18
  DEFAULT_TASK_TTL_MS,
19
19
  DEFAULT_TOOL_RATE_LIMITS,
20
20
  clampTaskTtl
21
- } from "./chunk-SDJLXKZZ.js";
21
+ } from "./chunk-XZ4QHFCD.js";
22
22
  import {
23
23
  executeExpert
24
24
  } from "./chunk-YJROHCFY.js";
@@ -41,24 +41,21 @@ import {
41
41
  toJobSummary,
42
42
  warnIfSimulatedOutsideTests,
43
43
  writeJobCancelled
44
- } from "./chunk-QKWS3REM.js";
44
+ } from "./chunk-45QUEZNS.js";
45
45
  import {
46
46
  normalizeTopicToCanonical,
47
47
  synthesizeResearch
48
48
  } from "./chunk-SCPAYR65.js";
49
49
  import {
50
- IssueTriage,
51
- createAuditTrail,
52
- createGraphAuditBridge,
53
- emitPipelinePolicyEvent
54
- } from "./chunk-ZRRL3YB6.js";
50
+ IssueTriage
51
+ } from "./chunk-I5T7GUM7.js";
55
52
  import {
56
53
  resolveEnvMode,
57
54
  sanitizeInput
58
55
  } from "./chunk-GEGV6DBO.js";
59
56
  import {
60
57
  withPrerequisite
61
- } from "./chunk-AREFLH3S.js";
58
+ } from "./chunk-Y4NDNQYU.js";
62
59
  import {
63
60
  NOOP_NOTIFIER,
64
61
  RateLimiter,
@@ -78,9 +75,15 @@ import {
78
75
  toolSuccess,
79
76
  toolSuccessStructured,
80
77
  withAccessPolicy,
78
+ withAuditTrail,
81
79
  withProgressHeartbeat,
82
80
  wrapToolWithTimeout
83
- } from "./chunk-J2KMYVWA.js";
81
+ } from "./chunk-RII4VXHO.js";
82
+ import {
83
+ createAuditTrail,
84
+ createGraphAuditBridge,
85
+ emitPipelinePolicyEvent
86
+ } from "./chunk-RCQLUJY3.js";
84
87
  import {
85
88
  addResearchPaper,
86
89
  addSourceToRegistry,
@@ -32577,6 +32580,173 @@ function hashObjective(userObjective) {
32577
32580
  return createHash2("sha256").update(userObjective, "utf8").digest("hex").slice(0, 16);
32578
32581
  }
32579
32582
 
32583
+ // src/security/audit-bridge.ts
32584
+ var logger31 = createLogger({ component: "SecurityAuditBridge" });
32585
+ function systemActor(id, name) {
32586
+ return name !== void 0 ? { type: "system", id, name } : { type: "system", id };
32587
+ }
32588
+ function userActor(username) {
32589
+ return { type: "user", id: username };
32590
+ }
32591
+ function mapTrust(e) {
32592
+ const severity = e.wasDowngraded ? "warning" : "info";
32593
+ return {
32594
+ category: "authorization",
32595
+ severity,
32596
+ outcome: "success",
32597
+ action: "security.trust_classification",
32598
+ actor: userActor(e.username),
32599
+ description: e.reason,
32600
+ metadata: {
32601
+ assignedTier: e.assignedTier,
32602
+ userRole: e.userRole,
32603
+ isAllowlisted: e.isAllowlisted,
32604
+ wasDowngraded: e.wasDowngraded,
32605
+ component: e.component
32606
+ }
32607
+ };
32608
+ }
32609
+ function pipelinePolicyMetadata(e) {
32610
+ return {
32611
+ ...e.actionType !== void 0 ? { actionType: e.actionType } : {},
32612
+ ...e.mode !== void 0 ? { mode: e.mode } : {},
32613
+ ...e.ruleIds !== void 0 ? { ruleIds: e.ruleIds } : {},
32614
+ ...e.stageType !== void 0 ? { stageType: e.stageType } : {},
32615
+ ...e.recordKind !== void 0 ? { recordKind: e.recordKind } : {},
32616
+ ...e.violationCount !== void 0 ? { violationCount: e.violationCount } : {}
32617
+ };
32618
+ }
32619
+ function mapPolicyGate(e) {
32620
+ const outcome = e.allowed ? "success" : "denied";
32621
+ return {
32622
+ category: "authorization",
32623
+ severity: e.allowed ? "info" : "warning",
32624
+ outcome,
32625
+ action: "security.policy_gate",
32626
+ actor: systemActor(e.component),
32627
+ policyName: "security.policy_gate",
32628
+ policyDecision: e.allowed ? "allow" : "deny",
32629
+ ...e.violationRules.length > 0 ? { violationType: e.violationRules.join(",") } : {},
32630
+ metadata: {
32631
+ requiresApproval: e.requiresApproval,
32632
+ inputTrustTier: e.inputTrustTier,
32633
+ violationRules: e.violationRules,
32634
+ ...pipelinePolicyMetadata(e)
32635
+ }
32636
+ };
32637
+ }
32638
+ function mapCorroboration(e) {
32639
+ return {
32640
+ category: "security",
32641
+ severity: e.satisfied ? "info" : "warning",
32642
+ outcome: e.satisfied ? "success" : "denied",
32643
+ action: "security.corroboration",
32644
+ actor: systemActor(e.component),
32645
+ metadata: {
32646
+ actionType: e.actionType,
32647
+ sourceCount: e.sourceCount,
32648
+ missingRequirements: e.missingRequirements
32649
+ }
32650
+ };
32651
+ }
32652
+ function mapReputation(e) {
32653
+ return {
32654
+ category: "security",
32655
+ severity: e.isSuspicious ? "warning" : "info",
32656
+ outcome: "success",
32657
+ action: "security.reputation",
32658
+ actor: userActor(e.username),
32659
+ metadata: {
32660
+ reputationScore: e.reputationScore,
32661
+ isSuspicious: e.isSuspicious,
32662
+ effectiveTier: e.effectiveTier,
32663
+ signalCount: e.signalCount,
32664
+ component: e.component
32665
+ }
32666
+ };
32667
+ }
32668
+ function mapSanitization(e) {
32669
+ return {
32670
+ category: "security",
32671
+ severity: e.injectionFlagCount > 0 ? "warning" : "info",
32672
+ outcome: "success",
32673
+ action: "security.sanitization",
32674
+ actor: systemActor(e.component, e.source),
32675
+ metadata: {
32676
+ source: e.source,
32677
+ wasModified: e.wasModified,
32678
+ strippedCount: e.strippedCount,
32679
+ injectionFlagCount: e.injectionFlagCount,
32680
+ strippedElements: e.strippedElements
32681
+ }
32682
+ };
32683
+ }
32684
+ function mapGraphExecution(e) {
32685
+ return {
32686
+ category: "system",
32687
+ severity: "info",
32688
+ outcome: "success",
32689
+ action: "security.graph_execution",
32690
+ actor: systemActor(e.component),
32691
+ description: e.detail,
32692
+ metadata: {
32693
+ graphEvent: e.graphEvent,
32694
+ ...e.nodeId !== void 0 ? { nodeId: e.nodeId } : {},
32695
+ stepNumber: e.stepNumber
32696
+ }
32697
+ };
32698
+ }
32699
+ function mapClawGuard(e) {
32700
+ return {
32701
+ category: "authorization",
32702
+ severity: "warning",
32703
+ outcome: "success",
32704
+ action: "security.clawguard_violation",
32705
+ actor: systemActor(e.component),
32706
+ metadata: {
32707
+ toolName: e.toolName,
32708
+ warning: e.warning,
32709
+ policySource: e.policySource,
32710
+ mode: e.mode,
32711
+ requestId: e.requestId
32712
+ }
32713
+ };
32714
+ }
32715
+ function securityAuditEventToInput(event) {
32716
+ switch (event.type) {
32717
+ case "trust_classification":
32718
+ return mapTrust(event);
32719
+ case "policy_gate":
32720
+ return mapPolicyGate(event);
32721
+ case "corroboration":
32722
+ return mapCorroboration(event);
32723
+ case "reputation":
32724
+ return mapReputation(event);
32725
+ case "sanitization":
32726
+ return mapSanitization(event);
32727
+ case "graph_execution":
32728
+ return mapGraphExecution(event);
32729
+ case "clawguard_violation":
32730
+ return mapClawGuard(event);
32731
+ }
32732
+ }
32733
+ function createDurableAuditSink(auditLogger) {
32734
+ return (event) => {
32735
+ try {
32736
+ auditLogger.log(securityAuditEventToInput(event));
32737
+ } catch (error) {
32738
+ logger31.warn("Failed to mirror security event to durable audit log", {
32739
+ type: event.type,
32740
+ error: getErrorMessage(error)
32741
+ });
32742
+ }
32743
+ };
32744
+ }
32745
+ function createDurableAuditTrail(auditLogger) {
32746
+ if (auditLogger === void 0) return void 0;
32747
+ return createAuditTrail(createDurableAuditSink(auditLogger));
32748
+ }
32749
+
32580
32750
  // src/context/structured-task-state.ts
32581
32751
  import * as fs4 from "fs";
32582
32752
  import * as path3 from "path";
@@ -32772,7 +32942,7 @@ var StructuredTaskLogEntrySchema = z54.discriminatedUnion("event", [
32772
32942
  ]);
32773
32943
 
32774
32944
  // src/context/structured-task-state.ts
32775
- var logger31 = createLogger({ component: "structured-task-state" });
32945
+ var logger32 = createLogger({ component: "structured-task-state" });
32776
32946
  var TASKS_SUBDIR = "tasks";
32777
32947
  var FILE_MODE2 = 384;
32778
32948
  var DIR_MODE3 = 448;
@@ -32790,7 +32960,7 @@ function listTaskStateIds(customDir) {
32790
32960
  try {
32791
32961
  entries = fs4.readdirSync(dir);
32792
32962
  } catch (cause) {
32793
- logger31.warn("tasks directory unreadable", {
32963
+ logger32.warn("tasks directory unreadable", {
32794
32964
  dir,
32795
32965
  error: cause instanceof Error ? cause.message : String(cause)
32796
32966
  });
@@ -32863,7 +33033,7 @@ function appendResult(taskId, result, ts, customDir) {
32863
33033
  maxBytes: TASK_RESULT_MAX_BYTES,
32864
33034
  note: "Result exceeded TASK_RESULT_MAX_BYTES \u2014 original dropped at write time."
32865
33035
  };
32866
- logger31.warn("Task result truncated at write", {
33036
+ logger32.warn("Task result truncated at write", {
32867
33037
  taskId,
32868
33038
  bytes,
32869
33039
  max: TASK_RESULT_MAX_BYTES
@@ -32894,14 +33064,14 @@ function readTaskState(taskId, customDir) {
32894
33064
  if (validated.success) {
32895
33065
  entries.push(validated.data);
32896
33066
  } else {
32897
- logger31.warn("Skipping malformed task-state log entry", {
33067
+ logger32.warn("Skipping malformed task-state log entry", {
32898
33068
  taskId,
32899
33069
  error: validated.error.message
32900
33070
  });
32901
33071
  }
32902
33072
  } catch (cause) {
32903
33073
  const msg = cause instanceof Error ? cause.message : String(cause);
32904
- logger31.warn("Skipping unparseable task-state log entry", { taskId, error: msg });
33074
+ logger32.warn("Skipping unparseable task-state log entry", { taskId, error: msg });
32905
33075
  }
32906
33076
  }
32907
33077
  return reduceLogEntries(taskId, entries);
@@ -33376,6 +33546,7 @@ async function executeOrchestration(input, deps, opts = {}) {
33376
33546
  const definition = { type: "task", task };
33377
33547
  const hb = startHeartbeatTracking(`orchestrate-${taskId}`, logger58);
33378
33548
  const policy = await deriveOrchestratePolicy(input.task, deps, logger58, trustTier);
33549
+ const auditTrail = createDurableAuditTrail(deps.auditLogger);
33379
33550
  try {
33380
33551
  return await runOrchestratorWithStateTracking({
33381
33552
  taskId,
@@ -33386,7 +33557,8 @@ async function executeOrchestration(input, deps, opts = {}) {
33386
33557
  decision,
33387
33558
  workflowRouter,
33388
33559
  startTime,
33389
- logger: logger58
33560
+ logger: logger58,
33561
+ ...auditTrail !== void 0 ? { auditTrail } : {}
33390
33562
  });
33391
33563
  } catch (error) {
33392
33564
  recordTaskStateBlocker(taskId, error instanceof Error ? error.message : String(error), logger58);
@@ -33397,9 +33569,13 @@ async function executeOrchestration(input, deps, opts = {}) {
33397
33569
  }
33398
33570
  }
33399
33571
  async function runOrchestratorWithStateTracking(params) {
33400
- const { taskId, taskInput, definition, orchestrator, policy, logger: logger58 } = params;
33572
+ const { taskId, taskInput, definition, orchestrator, policy, logger: logger58, auditTrail } = params;
33401
33573
  recordTaskStateStage(taskId, "executing", logger58);
33402
- const result = await withAccessPolicy(policy, () => orchestrator.execute(definition, {}));
33574
+ const runOrchestrator = () => orchestrator.execute(definition, {});
33575
+ const result = await withAccessPolicy(
33576
+ policy,
33577
+ auditTrail !== void 0 ? () => withAuditTrail(auditTrail, runOrchestrator) : runOrchestrator
33578
+ );
33403
33579
  if (!result.ok) {
33404
33580
  recordTaskStateBlocker(taskId, result.error.message, logger58);
33405
33581
  recordTaskStateStage(taskId, "failed", logger58);
@@ -36043,6 +36219,15 @@ async function classifyExpertResult(opts) {
36043
36219
  })
36044
36220
  };
36045
36221
  }
36222
+ async function executeExpertUnderPolicy(deps, expert, task, policyObjective) {
36223
+ const policy = await deriveExpertAccessPolicy(policyObjective, deps.logger, void 0);
36224
+ const auditTrail = createDurableAuditTrail(deps.auditLogger);
36225
+ const runExpert2 = () => expert.execute(task);
36226
+ return withAccessPolicy(
36227
+ policy,
36228
+ auditTrail !== void 0 ? () => withAuditTrail(auditTrail, runExpert2) : runExpert2
36229
+ );
36230
+ }
36046
36231
  async function runExpertTask(deps, args, expert) {
36047
36232
  const { expertId } = args;
36048
36233
  const contextPrefix = await maybeFetchContextPrefix(args.task, deps.logger);
@@ -36068,8 +36253,7 @@ async function runExpertTask(deps, args, expert) {
36068
36253
  }, HEARTBEAT_TIMEOUTS.heartbeatIntervalMs);
36069
36254
  let result;
36070
36255
  try {
36071
- const policy = await deriveExpertAccessPolicy(policyObjective, deps.logger, void 0);
36072
- result = await withAccessPolicy(policy, () => expert.execute(task));
36256
+ result = await executeExpertUnderPolicy(deps, expert, task, policyObjective);
36073
36257
  } finally {
36074
36258
  clearInterval(heartbeatTimer);
36075
36259
  monitor.endSession(sessionId);
@@ -39697,7 +39881,7 @@ function registerQueryTraceTool(server, deps) {
39697
39881
  import { z as z82 } from "zod";
39698
39882
 
39699
39883
  // src/mcp/jobs/task-state-source.ts
39700
- var logger32 = createLogger({ component: "task-state-source" });
39884
+ var logger33 = createLogger({ component: "task-state-source" });
39701
39885
  var TOOL_NAME_BY_PREFIX = {
39702
39886
  orch: "orchestrate",
39703
39887
  // run_workflow mints `job-rw-<uuid>`; consensus_vote mints `job-vote-<uuid>`.
@@ -39779,7 +39963,7 @@ function resolveJobResult(jobId, customDir) {
39779
39963
  if (isTaskStateJobSource()) {
39780
39964
  const fromState = readJobResultFromTaskState(jobId, customDir);
39781
39965
  if (fromState !== null) {
39782
- logger32.debug("Resolved job result from task-state", { jobId, status: fromState.status });
39966
+ logger33.debug("Resolved job result from task-state", { jobId, status: fromState.status });
39783
39967
  return fromState;
39784
39968
  }
39785
39969
  }
@@ -40921,7 +41105,7 @@ function createAuditLogger(config, storage, logger58, onPersistFailure) {
40921
41105
  }
40922
41106
 
40923
41107
  // src/pipeline/research-trigger.ts
40924
- var logger33 = createLogger({ component: "research-trigger" });
41108
+ var logger34 = createLogger({ component: "research-trigger" });
40925
41109
  var DEFAULT_QUALITY_THRESHOLD = 7;
40926
41110
  var DEFAULT_MAX_TRIGGERS = 3;
40927
41111
  function parseDiscoveries(text) {
@@ -40960,7 +41144,7 @@ function checkForCapabilityGapTriggers(config = {}) {
40960
41144
  status: "pending"
40961
41145
  }));
40962
41146
  if (tasks.length > 0) {
40963
- logger33.info("Capability-gap triggers created", {
41147
+ logger34.info("Capability-gap triggers created", {
40964
41148
  qualified: qualified.length,
40965
41149
  triggered: tasks.length
40966
41150
  });
@@ -40978,7 +41162,7 @@ async function checkForResearchTriggers(config = {}) {
40978
41162
  `Use research_discover to find recent papers and repos about "${topic}". For each result, include: title, quality score (1-10), and source URL.`
40979
41163
  );
40980
41164
  if (!result.success) {
40981
- logger33.debug("Research trigger: expert unavailable", { error: result.error });
41165
+ logger34.debug("Research trigger: expert unavailable", { error: result.error });
40982
41166
  return [];
40983
41167
  }
40984
41168
  const discoveries = parseDiscoveries(result.text);
@@ -40994,7 +41178,7 @@ Assess this research for applicability to nexus-agents.`,
40994
41178
  status: "pending"
40995
41179
  }));
40996
41180
  if (tasks.length > 0) {
40997
- logger33.info("Research triggers created", {
41181
+ logger34.info("Research triggers created", {
40998
41182
  total: discoveries.length,
40999
41183
  qualified: qualified.length,
41000
41184
  triggered: tasks.length
@@ -41002,7 +41186,7 @@ Assess this research for applicability to nexus-agents.`,
41002
41186
  }
41003
41187
  return tasks;
41004
41188
  } catch (error) {
41005
- logger33.debug("Research trigger failed gracefully", { error: String(error) });
41189
+ logger34.debug("Research trigger failed gracefully", { error: String(error) });
41006
41190
  return [];
41007
41191
  }
41008
41192
  }
@@ -41026,7 +41210,7 @@ var PIPELINE_STATE_KEYS = {
41026
41210
  };
41027
41211
 
41028
41212
  // src/pipeline/pipeline-graph.ts
41029
- var logger34 = createLogger({ component: "pipeline-graph" });
41213
+ var logger35 = createLogger({ component: "pipeline-graph" });
41030
41214
  function compilePipelineGraph(template, stages) {
41031
41215
  const missing = findMissingStages(template, stages);
41032
41216
  if (missing.length > 0) {
@@ -41043,10 +41227,10 @@ function compilePipelineGraph(template, stages) {
41043
41227
  const result = builder.compile();
41044
41228
  if (!result.ok) {
41045
41229
  const errMsg = formatCompileError(result.error);
41046
- logger34.warn("Pipeline graph compilation failed", { error: errMsg });
41230
+ logger35.warn("Pipeline graph compilation failed", { error: errMsg });
41047
41231
  return { ok: false, error: errMsg };
41048
41232
  }
41049
- logger34.info("Pipeline graph compiled", {
41233
+ logger35.info("Pipeline graph compiled", {
41050
41234
  template: template.id,
41051
41235
  stages: template.stages.length
41052
41236
  });
@@ -41123,7 +41307,7 @@ function registerLinearEdges(builder, stages) {
41123
41307
  }
41124
41308
 
41125
41309
  // src/pipeline/graph-pipeline-runner.ts
41126
- var logger35 = createLogger({ component: "graph-pipeline-runner" });
41310
+ var logger36 = createLogger({ component: "graph-pipeline-runner" });
41127
41311
  var DEFAULT_MAX_STEPS2 = 20;
41128
41312
  async function runGraphPipeline(task, template, stages, options) {
41129
41313
  const startTime = getTimeProvider().now();
@@ -41142,7 +41326,7 @@ function compileEffectiveGraph(template, stages, options) {
41142
41326
  return { graph: compiled.graph };
41143
41327
  }
41144
41328
  async function executeAndReport(task, template, graph, options, startTime) {
41145
- logger35.info("Executing graph pipeline", {
41329
+ logger36.info("Executing graph pipeline", {
41146
41330
  template: template.id,
41147
41331
  dryRun: options?.dryRun === true
41148
41332
  });
@@ -41248,7 +41432,7 @@ function listTemplateIds() {
41248
41432
  }
41249
41433
 
41250
41434
  // src/pipeline/adaptive-orchestrator.ts
41251
- var logger36 = createLogger({ component: "adaptive-orchestrator" });
41435
+ var logger37 = createLogger({ component: "adaptive-orchestrator" });
41252
41436
  var PIPELINE_TYPE_KEYWORDS = {
41253
41437
  dev: [
41254
41438
  "implement",
@@ -41387,7 +41571,7 @@ async function tryIssueTriage(task) {
41387
41571
  try {
41388
41572
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41389
41573
  if (issueMatch === null) return null;
41390
- const { createIssueTriage } = await import("./issue-triage-44OGWBDA.js");
41574
+ const { createIssueTriage } = await import("./issue-triage-R7DMXIEN.js");
41391
41575
  const triage = createIssueTriage();
41392
41576
  const owner = issueMatch[1] ?? "";
41393
41577
  const num = issueMatch[2] ?? "";
@@ -41431,7 +41615,7 @@ async function classifyWithLLM(task) {
41431
41615
  const lower = result.text.toLowerCase().trim();
41432
41616
  for (const template of VALID_TEMPLATES) {
41433
41617
  if (lower.includes(template)) {
41434
- logger36.info("LLM classification refinement", { task: task.slice(0, 60), template });
41618
+ logger37.info("LLM classification refinement", { task: task.slice(0, 60), template });
41435
41619
  return {
41436
41620
  pipelineType: template,
41437
41621
  complexity: "moderate",
@@ -41449,14 +41633,14 @@ async function classifyWithLLM(task) {
41449
41633
  async function runAdaptiveOrchestrator(task, options) {
41450
41634
  const sanitized = sanitizeInput(task, "collaborator", "pipeline");
41451
41635
  if (sanitized.strippedElements.length > 0) {
41452
- logger36.warn("Pipeline input sanitized", { stripped: sanitized.strippedElements.length });
41636
+ logger37.warn("Pipeline input sanitized", { stripped: sanitized.strippedElements.length });
41453
41637
  }
41454
41638
  const cleanTask = sanitized.content;
41455
41639
  let classification = classifyTask(cleanTask);
41456
41640
  if (classification.confidence < LLM_REFINEMENT_THRESHOLD && options.templateId === void 0) {
41457
41641
  const enriched = await tryIssueTriage(cleanTask);
41458
41642
  if (enriched !== null) {
41459
- logger36.info("Classification enriched via issue_triage", {
41643
+ logger37.info("Classification enriched via issue_triage", {
41460
41644
  original: classification.pipelineType,
41461
41645
  enriched: enriched.pipelineType
41462
41646
  });
@@ -41464,7 +41648,7 @@ async function runAdaptiveOrchestrator(task, options) {
41464
41648
  } else {
41465
41649
  const llmResult = await classifyWithLLM(cleanTask);
41466
41650
  if (llmResult !== null) {
41467
- logger36.info("Classification refined via LLM", {
41651
+ logger37.info("Classification refined via LLM", {
41468
41652
  original: classification.pipelineType,
41469
41653
  refined: llmResult.pipelineType
41470
41654
  });
@@ -41475,7 +41659,7 @@ async function runAdaptiveOrchestrator(task, options) {
41475
41659
  const templateId = options.templateId ?? classification.pipelineType;
41476
41660
  const selectionMethod = options.templateId !== void 0 ? "explicit" : "auto-detected";
41477
41661
  const template = ensureRunnableTemplate(resolveTemplate(templateId), options.stages);
41478
- logger36.info("Adaptive orchestrator routing", {
41662
+ logger37.info("Adaptive orchestrator routing", {
41479
41663
  templateId: template.id,
41480
41664
  selectionMethod,
41481
41665
  classification: classification.pipelineType,
@@ -41490,7 +41674,7 @@ function resolveTemplate(templateId) {
41490
41674
  const resolvedId = RETIRED_TEMPLATE_ALIASES[templateId] ?? templateId;
41491
41675
  const template = getTemplate(resolvedId);
41492
41676
  if (template !== void 0) return template;
41493
- logger36.warn("Unknown template, falling back to dev", { templateId });
41677
+ logger37.warn("Unknown template, falling back to dev", { templateId });
41494
41678
  const fallback = PIPELINE_TEMPLATES.get("dev");
41495
41679
  if (fallback !== void 0) return fallback;
41496
41680
  return { id: "dev", name: "Development", stages: [] };
@@ -41502,7 +41686,7 @@ function ensureRunnableTemplate(template, stages) {
41502
41686
  for (const id of RUNNABLE_FALLBACK_TEMPLATES) {
41503
41687
  const candidate = PIPELINE_TEMPLATES.get(id);
41504
41688
  if (candidate !== void 0 && findMissingStages(candidate, stages).length === 0) {
41505
- logger36.warn("Selected template is not runnable in this registry \u2014 falling back", {
41689
+ logger37.warn("Selected template is not runnable in this registry \u2014 falling back", {
41506
41690
  requested: template.id,
41507
41691
  missingStages: missing,
41508
41692
  fallback: id
@@ -41510,7 +41694,7 @@ function ensureRunnableTemplate(template, stages) {
41510
41694
  return candidate;
41511
41695
  }
41512
41696
  }
41513
- logger36.warn(
41697
+ logger37.warn(
41514
41698
  "No runnable fallback template for this registry; compile will report missing stages",
41515
41699
  {
41516
41700
  requested: template.id,
@@ -41524,7 +41708,7 @@ function ensureRunnableTemplate(template, stages) {
41524
41708
  import * as fs7 from "fs";
41525
41709
  import * as path5 from "path";
41526
41710
  import { z as z86 } from "zod";
41527
- var logger37 = createLogger({ component: "pipeline-checkpoint" });
41711
+ var logger38 = createLogger({ component: "pipeline-checkpoint" });
41528
41712
  var SESSION_ID_REGEX = /^[a-zA-Z0-9_-]{1,128}$/;
41529
41713
  function validateSessionId(sessionId) {
41530
41714
  return SESSION_ID_REGEX.test(sessionId);
@@ -41532,14 +41716,14 @@ function validateSessionId(sessionId) {
41532
41716
  function getCheckpointPath(sessionId, customDir) {
41533
41717
  const dirResult = ensureCheckpointDir(customDir);
41534
41718
  if (!dirResult.ok) {
41535
- logger37.warn("Checkpoint directory unavailable", { error: dirResult.error.message });
41719
+ logger38.warn("Checkpoint directory unavailable", { error: dirResult.error.message });
41536
41720
  return null;
41537
41721
  }
41538
41722
  return path5.join(dirResult.value, `pipeline-${sessionId}.jsonl`);
41539
41723
  }
41540
41724
  function saveStageCheckpoint(sessionId, stage, data, customDir) {
41541
41725
  if (!validateSessionId(sessionId)) {
41542
- logger37.warn("Invalid session ID for checkpoint", { sessionId });
41726
+ logger38.warn("Invalid session ID for checkpoint", { sessionId });
41543
41727
  return false;
41544
41728
  }
41545
41729
  const entry = {
@@ -41554,7 +41738,7 @@ function saveStageCheckpoint(sessionId, stage, data, customDir) {
41554
41738
  fs7.appendFileSync(filePath, JSON.stringify(entry) + "\n", { mode: 384 });
41555
41739
  return true;
41556
41740
  } catch (error) {
41557
- logger37.debug("Failed to save checkpoint", { stage, error: String(error) });
41741
+ logger38.debug("Failed to save checkpoint", { stage, error: String(error) });
41558
41742
  return false;
41559
41743
  }
41560
41744
  }
@@ -41567,7 +41751,7 @@ function loadCheckpointState(sessionId, customDir) {
41567
41751
  const lines = content.trim().split("\n").filter(Boolean);
41568
41752
  return rebuildState(lines);
41569
41753
  } catch (error) {
41570
- logger37.debug("Failed to load checkpoints", { error: String(error) });
41754
+ logger38.debug("Failed to load checkpoints", { error: String(error) });
41571
41755
  return null;
41572
41756
  }
41573
41757
  }
@@ -41624,7 +41808,7 @@ function rebuildState(lines) {
41624
41808
  applyEntry(state, result.data);
41625
41809
  }
41626
41810
  if (skippedCount > 0) {
41627
- logger37.warn("Skipped malformed checkpoint lines during state rebuild", {
41811
+ logger38.warn("Skipped malformed checkpoint lines during state rebuild", {
41628
41812
  skippedCount,
41629
41813
  totalLines: lines.length,
41630
41814
  firstSkipReason,
@@ -41679,20 +41863,20 @@ function checkpointToResult(state) {
41679
41863
  }
41680
41864
 
41681
41865
  // src/orchestration/qa-loop.ts
41682
- var logger38 = createLogger({ component: "qa-loop" });
41866
+ var logger39 = createLogger({ component: "qa-loop" });
41683
41867
  var DEFAULT_MAX_QA_ITERATIONS = 3;
41684
41868
  async function runQaLoop(implement, review, maxIterations = DEFAULT_MAX_QA_ITERATIONS) {
41685
41869
  let feedback;
41686
41870
  let lastOutput;
41687
41871
  let lastVerdict = "needs_work";
41688
41872
  for (let i = 1; i <= maxIterations; i++) {
41689
- logger38.info("QA loop iteration", { iteration: i, hasFeedback: feedback !== void 0 });
41873
+ logger39.info("QA loop iteration", { iteration: i, hasFeedback: feedback !== void 0 });
41690
41874
  const output2 = await implement(feedback);
41691
41875
  lastOutput = output2;
41692
41876
  const reviewResult = await review(output2);
41693
41877
  lastVerdict = reviewResult.verdict;
41694
41878
  if (reviewResult.verdict === "pass") {
41695
- logger38.info("QA loop passed", { iteration: i });
41879
+ logger39.info("QA loop passed", { iteration: i });
41696
41880
  return {
41697
41881
  output: output2,
41698
41882
  approved: true,
@@ -41701,14 +41885,14 @@ async function runQaLoop(implement, review, maxIterations = DEFAULT_MAX_QA_ITERA
41701
41885
  feedback: reviewResult.feedback
41702
41886
  };
41703
41887
  }
41704
- logger38.warn("QA loop rejected", {
41888
+ logger39.warn("QA loop rejected", {
41705
41889
  iteration: i,
41706
41890
  verdict: reviewResult.verdict,
41707
41891
  issues: reviewResult.issues.length
41708
41892
  });
41709
41893
  feedback = reviewResult.feedback;
41710
41894
  }
41711
- logger38.warn("QA loop exhausted iterations", { maxIterations, lastVerdict });
41895
+ logger39.warn("QA loop exhausted iterations", { maxIterations, lastVerdict });
41712
41896
  return {
41713
41897
  output: lastOutput,
41714
41898
  approved: false,
@@ -41718,151 +41902,6 @@ async function runQaLoop(implement, review, maxIterations = DEFAULT_MAX_QA_ITERA
41718
41902
  };
41719
41903
  }
41720
41904
 
41721
- // src/security/audit-bridge.ts
41722
- var logger39 = createLogger({ component: "SecurityAuditBridge" });
41723
- function systemActor(id, name) {
41724
- return name !== void 0 ? { type: "system", id, name } : { type: "system", id };
41725
- }
41726
- function userActor(username) {
41727
- return { type: "user", id: username };
41728
- }
41729
- function mapTrust(e) {
41730
- const severity = e.wasDowngraded ? "warning" : "info";
41731
- return {
41732
- category: "authorization",
41733
- severity,
41734
- outcome: "success",
41735
- action: "security.trust_classification",
41736
- actor: userActor(e.username),
41737
- description: e.reason,
41738
- metadata: {
41739
- assignedTier: e.assignedTier,
41740
- userRole: e.userRole,
41741
- isAllowlisted: e.isAllowlisted,
41742
- wasDowngraded: e.wasDowngraded,
41743
- component: e.component
41744
- }
41745
- };
41746
- }
41747
- function pipelinePolicyMetadata(e) {
41748
- return {
41749
- ...e.actionType !== void 0 ? { actionType: e.actionType } : {},
41750
- ...e.mode !== void 0 ? { mode: e.mode } : {},
41751
- ...e.ruleIds !== void 0 ? { ruleIds: e.ruleIds } : {},
41752
- ...e.stageType !== void 0 ? { stageType: e.stageType } : {},
41753
- ...e.recordKind !== void 0 ? { recordKind: e.recordKind } : {},
41754
- ...e.violationCount !== void 0 ? { violationCount: e.violationCount } : {}
41755
- };
41756
- }
41757
- function mapPolicyGate(e) {
41758
- const outcome = e.allowed ? "success" : "denied";
41759
- return {
41760
- category: "authorization",
41761
- severity: e.allowed ? "info" : "warning",
41762
- outcome,
41763
- action: "security.policy_gate",
41764
- actor: systemActor(e.component),
41765
- policyName: "security.policy_gate",
41766
- policyDecision: e.allowed ? "allow" : "deny",
41767
- ...e.violationRules.length > 0 ? { violationType: e.violationRules.join(",") } : {},
41768
- metadata: {
41769
- requiresApproval: e.requiresApproval,
41770
- inputTrustTier: e.inputTrustTier,
41771
- violationRules: e.violationRules,
41772
- ...pipelinePolicyMetadata(e)
41773
- }
41774
- };
41775
- }
41776
- function mapCorroboration(e) {
41777
- return {
41778
- category: "security",
41779
- severity: e.satisfied ? "info" : "warning",
41780
- outcome: e.satisfied ? "success" : "denied",
41781
- action: "security.corroboration",
41782
- actor: systemActor(e.component),
41783
- metadata: {
41784
- actionType: e.actionType,
41785
- sourceCount: e.sourceCount,
41786
- missingRequirements: e.missingRequirements
41787
- }
41788
- };
41789
- }
41790
- function mapReputation(e) {
41791
- return {
41792
- category: "security",
41793
- severity: e.isSuspicious ? "warning" : "info",
41794
- outcome: "success",
41795
- action: "security.reputation",
41796
- actor: userActor(e.username),
41797
- metadata: {
41798
- reputationScore: e.reputationScore,
41799
- isSuspicious: e.isSuspicious,
41800
- effectiveTier: e.effectiveTier,
41801
- signalCount: e.signalCount,
41802
- component: e.component
41803
- }
41804
- };
41805
- }
41806
- function mapSanitization(e) {
41807
- return {
41808
- category: "security",
41809
- severity: e.injectionFlagCount > 0 ? "warning" : "info",
41810
- outcome: "success",
41811
- action: "security.sanitization",
41812
- actor: systemActor(e.component, e.source),
41813
- metadata: {
41814
- source: e.source,
41815
- wasModified: e.wasModified,
41816
- strippedCount: e.strippedCount,
41817
- injectionFlagCount: e.injectionFlagCount,
41818
- strippedElements: e.strippedElements
41819
- }
41820
- };
41821
- }
41822
- function mapGraphExecution(e) {
41823
- return {
41824
- category: "system",
41825
- severity: "info",
41826
- outcome: "success",
41827
- action: "security.graph_execution",
41828
- actor: systemActor(e.component),
41829
- description: e.detail,
41830
- metadata: {
41831
- graphEvent: e.graphEvent,
41832
- ...e.nodeId !== void 0 ? { nodeId: e.nodeId } : {},
41833
- stepNumber: e.stepNumber
41834
- }
41835
- };
41836
- }
41837
- function securityAuditEventToInput(event) {
41838
- switch (event.type) {
41839
- case "trust_classification":
41840
- return mapTrust(event);
41841
- case "policy_gate":
41842
- return mapPolicyGate(event);
41843
- case "corroboration":
41844
- return mapCorroboration(event);
41845
- case "reputation":
41846
- return mapReputation(event);
41847
- case "sanitization":
41848
- return mapSanitization(event);
41849
- case "graph_execution":
41850
- return mapGraphExecution(event);
41851
- }
41852
- }
41853
- function createDurableAuditSink(auditLogger) {
41854
- return (event) => {
41855
- try {
41856
- auditLogger.log(securityAuditEventToInput(event));
41857
- } catch (error) {
41858
- logger39.warn("Failed to mirror security event to durable audit log", {
41859
- type: event.type,
41860
- error: getErrorMessage(error)
41861
- });
41862
- }
41863
- };
41864
- }
41865
-
41866
41905
  // src/pipeline/dev-pipeline.ts
41867
41906
  var logger40 = createLogger({ component: "dev-pipeline" });
41868
41907
  function isApproved(result) {
@@ -43407,7 +43446,7 @@ ${contextBlock}`;
43407
43446
  const strategy = config.votingStrategy ?? "higher_order";
43408
43447
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
43409
43448
  try {
43410
- const { executeVoting } = await import("./consensus-vote-6V3JNRXI.js");
43449
+ const { executeVoting } = await import("./consensus-vote-IBT3C5YC.js");
43411
43450
  const votingResult = await executeVoting(
43412
43451
  {
43413
43452
  proposal: buildVoteProposal(plan, research),
@@ -51024,6 +51063,7 @@ export {
51024
51063
  OrchestrationError,
51025
51064
  OrchestrationUnavailableError,
51026
51065
  createMockOrchestrator,
51066
+ createDurableAuditSink,
51027
51067
  registerOrchestrateTool,
51028
51068
  MODEL_CAPABILITIES2 as MODEL_CAPABILITIES,
51029
51069
  DelegateInputSchema,
@@ -51136,7 +51176,6 @@ export {
51136
51176
  loadCheckpointState,
51137
51177
  cleanupCheckpoint2 as cleanupCheckpoint,
51138
51178
  checkpointToResult,
51139
- createDurableAuditSink,
51140
51179
  runDevPipeline,
51141
51180
  flushPipelineMemory,
51142
51181
  createAgentStages,
@@ -51189,4 +51228,4 @@ export {
51189
51228
  shutdownFeedbackSubscriber,
51190
51229
  createEventBusBridge
51191
51230
  };
51192
- //# sourceMappingURL=chunk-IIGRVRKD.js.map
51231
+ //# sourceMappingURL=chunk-256RUC4U.js.map