@shapeshift-labs/frontier-swarm-codex 0.5.116 → 0.5.118
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/README.md +59 -3
- package/dist/apply.js +1 -1
- package/dist/apply.js.map +1 -1
- package/dist/calibration-feedback.d.ts.map +1 -1
- package/dist/calibration-feedback.js +57 -2
- package/dist/calibration-feedback.js.map +1 -1
- package/dist/cleanup.js +1 -0
- package/dist/cleanup.js.map +1 -1
- package/dist/cli-args.d.ts +72 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +296 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +14 -0
- package/dist/cli-help.js.map +1 -1
- package/dist/cli.js +58 -183
- package/dist/cli.js.map +1 -1
- package/dist/codex-adaptive-feedback.d.ts.map +1 -1
- package/dist/codex-adaptive-feedback.js +98 -3
- package/dist/codex-adaptive-feedback.js.map +1 -1
- package/dist/codex-executor.d.ts.map +1 -1
- package/dist/codex-executor.js +30 -3
- package/dist/codex-executor.js.map +1 -1
- package/dist/codex-prompt.d.ts.map +1 -1
- package/dist/codex-prompt.js +58 -0
- package/dist/codex-prompt.js.map +1 -1
- package/dist/codex-run-metadata.d.ts +34 -0
- package/dist/codex-run-metadata.d.ts.map +1 -0
- package/dist/codex-run-metadata.js +29 -0
- package/dist/codex-run-metadata.js.map +1 -0
- package/dist/codex-run-swarm.d.ts +4 -0
- package/dist/codex-run-swarm.d.ts.map +1 -0
- package/dist/codex-run-swarm.js +69 -0
- package/dist/codex-run-swarm.js.map +1 -0
- package/dist/codex-run.d.ts +3 -3
- package/dist/codex-run.d.ts.map +1 -1
- package/dist/codex-run.js +146 -133
- package/dist/codex-run.js.map +1 -1
- package/dist/codex-tournament-strategy.d.ts +10 -0
- package/dist/codex-tournament-strategy.d.ts.map +1 -1
- package/dist/codex-tournament-strategy.js +39 -0
- package/dist/codex-tournament-strategy.js.map +1 -1
- package/dist/codex-workspace-change-paths.d.ts +20 -0
- package/dist/codex-workspace-change-paths.d.ts.map +1 -0
- package/dist/codex-workspace-change-paths.js +215 -0
- package/dist/codex-workspace-change-paths.js.map +1 -0
- package/dist/codex-workspace-changes.d.ts +12 -12
- package/dist/codex-workspace-changes.d.ts.map +1 -1
- package/dist/codex-workspace-changes.js +19 -122
- package/dist/codex-workspace-changes.js.map +1 -1
- package/dist/codex-workspace-restore.d.ts +15 -0
- package/dist/codex-workspace-restore.d.ts.map +1 -0
- package/dist/codex-workspace-restore.js +66 -0
- package/dist/codex-workspace-restore.js.map +1 -0
- package/dist/codex-workspace-write-fence.d.ts +21 -0
- package/dist/codex-workspace-write-fence.d.ts.map +1 -0
- package/dist/codex-workspace-write-fence.js +155 -0
- package/dist/codex-workspace-write-fence.js.map +1 -0
- package/dist/codex-workspace.d.ts +5 -1
- package/dist/codex-workspace.d.ts.map +1 -1
- package/dist/codex-workspace.js +46 -2
- package/dist/codex-workspace.js.map +1 -1
- package/dist/collect-artifact-store.d.ts +14 -0
- package/dist/collect-artifact-store.d.ts.map +1 -0
- package/dist/collect-artifact-store.js +207 -0
- package/dist/collect-artifact-store.js.map +1 -0
- package/dist/collect-bundle-reasons.d.ts +18 -0
- package/dist/collect-bundle-reasons.d.ts.map +1 -0
- package/dist/collect-bundle-reasons.js +222 -0
- package/dist/collect-bundle-reasons.js.map +1 -0
- package/dist/collect-bundle-staleness.d.ts +10 -0
- package/dist/collect-bundle-staleness.d.ts.map +1 -0
- package/dist/collect-bundle-staleness.js +98 -0
- package/dist/collect-bundle-staleness.js.map +1 -0
- package/dist/collect-bundles.d.ts +8 -10
- package/dist/collect-bundles.d.ts.map +1 -1
- package/dist/collect-bundles.js +28 -115
- package/dist/collect-bundles.js.map +1 -1
- package/dist/collect-dashboard-quality.d.ts +5 -0
- package/dist/collect-dashboard-quality.d.ts.map +1 -0
- package/dist/collect-dashboard-quality.js +256 -0
- package/dist/collect-dashboard-quality.js.map +1 -0
- package/dist/collect-dashboard.d.ts +4 -3
- package/dist/collect-dashboard.d.ts.map +1 -1
- package/dist/collect-dashboard.js +37 -3
- package/dist/collect-dashboard.js.map +1 -1
- package/dist/collect-evidence.d.ts.map +1 -1
- package/dist/collect-evidence.js +13 -2
- package/dist/collect-evidence.js.map +1 -1
- package/dist/collect-finalize.d.ts +15 -0
- package/dist/collect-finalize.d.ts.map +1 -0
- package/dist/collect-finalize.js +75 -0
- package/dist/collect-finalize.js.map +1 -0
- package/dist/collect-landed.d.ts +7 -0
- package/dist/collect-landed.d.ts.map +1 -0
- package/dist/collect-landed.js +171 -0
- package/dist/collect-landed.js.map +1 -0
- package/dist/collect-noise.d.ts +6 -0
- package/dist/collect-noise.d.ts.map +1 -0
- package/dist/collect-noise.js +131 -0
- package/dist/collect-noise.js.map +1 -0
- package/dist/collect-overlaps.d.ts +3 -0
- package/dist/collect-overlaps.d.ts.map +1 -0
- package/dist/collect-overlaps.js +8 -0
- package/dist/collect-overlaps.js.map +1 -0
- package/dist/collect-pids.d.ts +4 -0
- package/dist/collect-pids.d.ts.map +1 -0
- package/dist/collect-pids.js +33 -0
- package/dist/collect-pids.js.map +1 -0
- package/dist/collect-setup.d.ts +4 -0
- package/dist/collect-setup.d.ts.map +1 -0
- package/dist/collect-setup.js +20 -0
- package/dist/collect-setup.js.map +1 -0
- package/dist/collect-terminal-state.d.ts +14 -0
- package/dist/collect-terminal-state.d.ts.map +1 -0
- package/dist/collect-terminal-state.js +113 -0
- package/dist/collect-terminal-state.js.map +1 -0
- package/dist/collect-workspace-only.d.ts +10 -0
- package/dist/collect-workspace-only.d.ts.map +1 -0
- package/dist/collect-workspace-only.js +289 -0
- package/dist/collect-workspace-only.js.map +1 -0
- package/dist/collect-workspace-proof.d.ts +3 -0
- package/dist/collect-workspace-proof.d.ts.map +1 -0
- package/dist/collect-workspace-proof.js +24 -0
- package/dist/collect-workspace-proof.js.map +1 -0
- package/dist/collect-workspace-recovery.d.ts +22 -0
- package/dist/collect-workspace-recovery.d.ts.map +1 -0
- package/dist/collect-workspace-recovery.js +94 -0
- package/dist/collect-workspace-recovery.js.map +1 -0
- package/dist/collect.d.ts +1 -2
- package/dist/collect.d.ts.map +1 -1
- package/dist/collect.js +125 -116
- package/dist/collect.js.map +1 -1
- package/dist/common.d.ts +5 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +54 -1
- package/dist/common.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -1
- package/dist/context-budget.d.ts.map +1 -1
- package/dist/context-budget.js +49 -6
- package/dist/context-budget.js.map +1 -1
- package/dist/continuation-adaptive-routing.d.ts +7 -0
- package/dist/continuation-adaptive-routing.d.ts.map +1 -0
- package/dist/continuation-adaptive-routing.js +129 -0
- package/dist/continuation-adaptive-routing.js.map +1 -0
- package/dist/continuation-child-backlogs.d.ts +11 -0
- package/dist/continuation-child-backlogs.d.ts.map +1 -0
- package/dist/continuation-child-backlogs.js +48 -0
- package/dist/continuation-child-backlogs.js.map +1 -0
- package/dist/continuation-feedback.d.ts +41 -0
- package/dist/continuation-feedback.d.ts.map +1 -0
- package/dist/continuation-feedback.js +294 -0
- package/dist/continuation-feedback.js.map +1 -0
- package/dist/continuation-human-actions.d.ts +15 -0
- package/dist/continuation-human-actions.d.ts.map +1 -0
- package/dist/continuation-human-actions.js +23 -0
- package/dist/continuation-human-actions.js.map +1 -0
- package/dist/continuation-job-routing-summary.d.ts +4 -0
- package/dist/continuation-job-routing-summary.d.ts.map +1 -0
- package/dist/continuation-job-routing-summary.js +47 -0
- package/dist/continuation-job-routing-summary.js.map +1 -0
- package/dist/continuation-task-source.d.ts +10 -0
- package/dist/continuation-task-source.d.ts.map +1 -0
- package/dist/continuation-task-source.js +11 -0
- package/dist/continuation-task-source.js.map +1 -0
- package/dist/continuation-terminal-outcomes.d.ts +27 -0
- package/dist/continuation-terminal-outcomes.d.ts.map +1 -0
- package/dist/continuation-terminal-outcomes.js +215 -0
- package/dist/continuation-terminal-outcomes.js.map +1 -0
- package/dist/continuation.d.ts +3 -0
- package/dist/continuation.d.ts.map +1 -0
- package/dist/continuation.js +266 -0
- package/dist/continuation.js.map +1 -0
- package/dist/dashboard-ui-constants.d.ts +6 -0
- package/dist/dashboard-ui-constants.d.ts.map +1 -0
- package/dist/dashboard-ui-constants.js +6 -0
- package/dist/dashboard-ui-constants.js.map +1 -0
- package/dist/dashboard-ui-health.d.ts +24 -0
- package/dist/dashboard-ui-health.d.ts.map +1 -0
- package/dist/dashboard-ui-health.js +175 -0
- package/dist/dashboard-ui-health.js.map +1 -0
- package/dist/dashboard-ui-human-actions.d.ts +3 -0
- package/dist/dashboard-ui-human-actions.d.ts.map +1 -0
- package/dist/dashboard-ui-human-actions.js +218 -0
- package/dist/dashboard-ui-human-actions.js.map +1 -0
- package/dist/dashboard-ui-jobs.d.ts +7 -0
- package/dist/dashboard-ui-jobs.d.ts.map +1 -0
- package/dist/dashboard-ui-jobs.js +232 -0
- package/dist/dashboard-ui-jobs.js.map +1 -0
- package/dist/dashboard-ui-lanes.d.ts +3 -0
- package/dist/dashboard-ui-lanes.d.ts.map +1 -0
- package/dist/dashboard-ui-lanes.js +17 -0
- package/dist/dashboard-ui-lanes.js.map +1 -0
- package/dist/dashboard-ui-metric-utils.d.ts +13 -0
- package/dist/dashboard-ui-metric-utils.d.ts.map +1 -0
- package/dist/dashboard-ui-metric-utils.js +52 -0
- package/dist/dashboard-ui-metric-utils.js.map +1 -0
- package/dist/dashboard-ui-quality.d.ts +4 -0
- package/dist/dashboard-ui-quality.d.ts.map +1 -0
- package/dist/dashboard-ui-quality.js +106 -0
- package/dist/dashboard-ui-quality.js.map +1 -0
- package/dist/dashboard-ui-semantic.d.ts +6 -0
- package/dist/dashboard-ui-semantic.d.ts.map +1 -0
- package/dist/dashboard-ui-semantic.js +84 -0
- package/dist/dashboard-ui-semantic.js.map +1 -0
- package/dist/dashboard-ui-sources.d.ts +9 -0
- package/dist/dashboard-ui-sources.d.ts.map +1 -0
- package/dist/dashboard-ui-sources.js +39 -0
- package/dist/dashboard-ui-sources.js.map +1 -0
- package/dist/dashboard-ui-steering.d.ts +4 -0
- package/dist/dashboard-ui-steering.d.ts.map +1 -0
- package/dist/dashboard-ui-steering.js +41 -0
- package/dist/dashboard-ui-steering.js.map +1 -0
- package/dist/dashboard-ui-summary.d.ts +6 -0
- package/dist/dashboard-ui-summary.d.ts.map +1 -0
- package/dist/dashboard-ui-summary.js +64 -0
- package/dist/dashboard-ui-summary.js.map +1 -0
- package/dist/dashboard-ui-time-series.d.ts +6 -0
- package/dist/dashboard-ui-time-series.d.ts.map +1 -0
- package/dist/dashboard-ui-time-series.js +191 -0
- package/dist/dashboard-ui-time-series.js.map +1 -0
- package/dist/dashboard-ui-types.d.ts +21 -0
- package/dist/dashboard-ui-types.d.ts.map +1 -0
- package/dist/dashboard-ui-types.js +2 -0
- package/dist/dashboard-ui-types.js.map +1 -0
- package/dist/dashboard-ui-values.d.ts +13 -0
- package/dist/dashboard-ui-values.d.ts.map +1 -0
- package/dist/dashboard-ui-values.js +57 -0
- package/dist/dashboard-ui-values.js.map +1 -0
- package/dist/dashboard-ui-workspace.d.ts +7 -0
- package/dist/dashboard-ui-workspace.d.ts.map +1 -0
- package/dist/dashboard-ui-workspace.js +131 -0
- package/dist/dashboard-ui-workspace.js.map +1 -0
- package/dist/dashboard-ui.d.ts +4 -0
- package/dist/dashboard-ui.d.ts.map +1 -0
- package/dist/dashboard-ui.js +139 -0
- package/dist/dashboard-ui.js.map +1 -0
- package/dist/dashboard.js +59 -3
- package/dist/dashboard.js.map +1 -1
- package/dist/human-actions.d.ts +46 -0
- package/dist/human-actions.d.ts.map +1 -0
- package/dist/human-actions.js +251 -0
- package/dist/human-actions.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -92
- package/dist/index.js.map +1 -1
- package/dist/model-pricing.d.ts +49 -0
- package/dist/model-pricing.d.ts.map +1 -0
- package/dist/model-pricing.js +159 -0
- package/dist/model-pricing.js.map +1 -0
- package/dist/patch-score-semantic.d.ts.map +1 -1
- package/dist/patch-score-semantic.js +34 -30
- package/dist/patch-score-semantic.js.map +1 -1
- package/dist/plan.d.ts +6 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +191 -0
- package/dist/plan.js.map +1 -0
- package/dist/query-io.d.ts +8 -0
- package/dist/query-io.d.ts.map +1 -0
- package/dist/query-io.js +46 -0
- package/dist/query-io.js.map +1 -0
- package/dist/query-landed.d.ts +20 -0
- package/dist/query-landed.d.ts.map +1 -0
- package/dist/query-landed.js +64 -0
- package/dist/query-landed.js.map +1 -0
- package/dist/query-matchers.d.ts +6 -0
- package/dist/query-matchers.d.ts.map +1 -0
- package/dist/query-matchers.js +160 -0
- package/dist/query-matchers.js.map +1 -0
- package/dist/query-signal-types.d.ts +32 -0
- package/dist/query-signal-types.d.ts.map +1 -0
- package/dist/query-signal-types.js +2 -0
- package/dist/query-signal-types.js.map +1 -0
- package/dist/query-signals.d.ts +12 -0
- package/dist/query-signals.d.ts.map +1 -0
- package/dist/query-signals.js +207 -0
- package/dist/query-signals.js.map +1 -0
- package/dist/query-status.d.ts +10 -0
- package/dist/query-status.d.ts.map +1 -0
- package/dist/query-status.js +115 -0
- package/dist/query-status.js.map +1 -0
- package/dist/query-summaries.d.ts +283 -0
- package/dist/query-summaries.d.ts.map +1 -0
- package/dist/query-summaries.js +195 -0
- package/dist/query-summaries.js.map +1 -0
- package/dist/query-types.d.ts +45 -0
- package/dist/query-types.d.ts.map +1 -0
- package/dist/query-types.js +2 -0
- package/dist/query-types.js.map +1 -0
- package/dist/query-values.d.ts +15 -0
- package/dist/query-values.d.ts.map +1 -0
- package/dist/query-values.js +73 -0
- package/dist/query-values.js.map +1 -0
- package/dist/query.d.ts +344 -41
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +38 -157
- package/dist/query.js.map +1 -1
- package/dist/score-calibration.d.ts.map +1 -1
- package/dist/score-calibration.js +52 -3
- package/dist/score-calibration.js.map +1 -1
- package/dist/score.js +1 -1
- package/dist/score.js.map +1 -1
- package/dist/semantic-edit-admission.d.ts +3 -0
- package/dist/semantic-edit-admission.d.ts.map +1 -1
- package/dist/semantic-edit-admission.js +90 -11
- package/dist/semantic-edit-admission.js.map +1 -1
- package/dist/semantic-edit-clean-eligibility.d.ts.map +1 -1
- package/dist/semantic-edit-clean-eligibility.js +22 -4
- package/dist/semantic-edit-clean-eligibility.js.map +1 -1
- package/dist/semantic-edit-script.d.ts.map +1 -1
- package/dist/semantic-edit-script.js +26 -5
- package/dist/semantic-edit-script.js.map +1 -1
- package/dist/semantic-import-layers.d.ts +1 -1
- package/dist/semantic-import-layers.d.ts.map +1 -1
- package/dist/semantic-import-layers.js +22 -6
- package/dist/semantic-import-layers.js.map +1 -1
- package/dist/semantic-import-lineage-signals.d.ts +12 -0
- package/dist/semantic-import-lineage-signals.d.ts.map +1 -0
- package/dist/semantic-import-lineage-signals.js +126 -0
- package/dist/semantic-import-lineage-signals.js.map +1 -0
- package/dist/semantic-import-lineage.d.ts.map +1 -1
- package/dist/semantic-import-lineage.js +120 -18
- package/dist/semantic-import-lineage.js.map +1 -1
- package/dist/semantic-import-proof.d.ts.map +1 -1
- package/dist/semantic-import-proof.js +16 -0
- package/dist/semantic-import-proof.js.map +1 -1
- package/dist/semantic-import-quality.d.ts.map +1 -1
- package/dist/semantic-import-quality.js +8 -0
- package/dist/semantic-import-quality.js.map +1 -1
- package/dist/semantic-import-readiness.d.ts +15 -0
- package/dist/semantic-import-readiness.d.ts.map +1 -0
- package/dist/semantic-import-readiness.js +214 -0
- package/dist/semantic-import-readiness.js.map +1 -0
- package/dist/semantic-import-sidecar.d.ts.map +1 -1
- package/dist/semantic-import-sidecar.js +6 -37
- package/dist/semantic-import-sidecar.js.map +1 -1
- package/dist/semantic-import.d.ts +4 -2
- package/dist/semantic-import.d.ts.map +1 -1
- package/dist/semantic-import.js +27 -10
- package/dist/semantic-import.js.map +1 -1
- package/dist/tournament-bandit-view.d.ts +16 -13
- package/dist/tournament-bandit-view.d.ts.map +1 -1
- package/dist/tournament-bandit-view.js +23 -3
- package/dist/tournament-bandit-view.js.map +1 -1
- package/dist/tournament-query.d.ts +35 -39
- package/dist/tournament-query.d.ts.map +1 -1
- package/dist/tournament-query.js +32 -6
- package/dist/tournament-query.js.map +1 -1
- package/dist/types-collection-quality.d.ts +112 -0
- package/dist/types-collection-quality.d.ts.map +1 -0
- package/dist/types-collection-quality.js +2 -0
- package/dist/types-collection-quality.js.map +1 -0
- package/dist/types-collection-score.d.ts +112 -0
- package/dist/types-collection-score.d.ts.map +1 -0
- package/dist/types-collection-score.js +2 -0
- package/dist/types-collection-score.js.map +1 -0
- package/dist/types-collection.d.ts +107 -112
- package/dist/types-collection.d.ts.map +1 -1
- package/dist/types-continuation.d.ts +151 -0
- package/dist/types-continuation.d.ts.map +1 -0
- package/dist/types-continuation.js +2 -0
- package/dist/types-continuation.js.map +1 -0
- package/dist/types-dashboard-metrics.d.ts +241 -0
- package/dist/types-dashboard-metrics.d.ts.map +1 -0
- package/dist/types-dashboard-metrics.js +2 -0
- package/dist/types-dashboard-metrics.js.map +1 -0
- package/dist/types-dashboard.d.ts +277 -0
- package/dist/types-dashboard.d.ts.map +1 -0
- package/dist/types-dashboard.js +2 -0
- package/dist/types-dashboard.js.map +1 -0
- package/dist/types-evidence.d.ts +3 -0
- package/dist/types-evidence.d.ts.map +1 -1
- package/dist/types-run.d.ts +54 -1
- package/dist/types-run.d.ts.map +1 -1
- package/dist/types-score-calibration.d.ts +15 -0
- package/dist/types-score-calibration.d.ts.map +1 -1
- package/dist/types-semantic.d.ts +21 -12
- package/dist/types-semantic.d.ts.map +1 -1
- package/dist/types-workspace.d.ts +31 -1
- package/dist/types-workspace.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createSwarmQueueOutcomeModel, reconcileSwarmTerminalState } from '@shapeshift-labs/frontier-swarm';
|
|
2
|
+
import { FRONTIER_SWARM_CODEX_COLLECTION_KIND } from './constants.js';
|
|
3
|
+
import { uniqueStrings } from './common.js';
|
|
4
|
+
export function createCodexCollectionQueueOutcomeModel(input) {
|
|
5
|
+
return createSwarmQueueOutcomeModel({
|
|
6
|
+
decisions: createCodexCollectionQueueOutcomeDecisions(input),
|
|
7
|
+
generatedAt: input.generatedAt,
|
|
8
|
+
metadata: {
|
|
9
|
+
source: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
|
|
10
|
+
runId: input.runId
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function createCodexCollectionTerminalState(input) {
|
|
15
|
+
return reconcileSwarmTerminalState({
|
|
16
|
+
collections: createCodexCollectionTerminalStateCollections(input.buckets, input.generatedAt),
|
|
17
|
+
outcomeModel: input.queueOutcomeModel,
|
|
18
|
+
generatedAt: input.generatedAt,
|
|
19
|
+
metadata: {
|
|
20
|
+
source: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
|
|
21
|
+
queueOutcomeModelId: input.queueOutcomeModel.id
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function createCodexCollectionQueueOutcomeDecisions(input) {
|
|
26
|
+
const landed = new Set(input.landedHealth?.landedJobIds ?? []);
|
|
27
|
+
const committed = new Set(input.landedHealth?.committedJobIds ?? []);
|
|
28
|
+
const applied = new Set(input.landedHealth?.appliedJobIds ?? []);
|
|
29
|
+
const decisions = [];
|
|
30
|
+
for (const [bucket, entries] of Object.entries(input.buckets)) {
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const bundle = entry.bundle;
|
|
33
|
+
const base = createCodexCollectionQueueOutcomeBase(bundle, entry, bucket, input.generatedAt);
|
|
34
|
+
if (landed.has(bundle.jobId)) {
|
|
35
|
+
const outcome = committed.has(bundle.jobId) ? 'committed' : applied.has(bundle.jobId) ? 'applied' : 'checked';
|
|
36
|
+
decisions.push({ ...base, decision: outcome, category: 'terminal', outcome, terminal: true, reasons: ['landed by apply ledger'] });
|
|
37
|
+
}
|
|
38
|
+
else if (bucket === 'ready-to-apply') {
|
|
39
|
+
decisions.push({ ...base, decision: 'ready', category: 'continuation', outcome: 'ready', terminal: false, reasons: bundle.reasons });
|
|
40
|
+
}
|
|
41
|
+
else if (bucket === 'needs-human-port') {
|
|
42
|
+
decisions.push({ ...base, decision: 'needs-port', category: 'coordinator-review', outcome: 'needs-port', terminal: false, reasons: bundle.reasons });
|
|
43
|
+
}
|
|
44
|
+
else if (bucket === 'rerun-work' || bucket === 'stale-against-head') {
|
|
45
|
+
decisions.push({ ...base, decision: 'rerun', category: 'stale-rerun', outcome: 'rerun', terminal: true, reasons: bundle.reasons });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
decisions.push({ ...base, decision: 'rejected', category: 'terminal', outcome: 'rejected', terminal: true, reasons: bundle.reasons });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return decisions;
|
|
53
|
+
}
|
|
54
|
+
function createCodexCollectionQueueOutcomeBase(bundle, entry, bucket, generatedAt) {
|
|
55
|
+
return {
|
|
56
|
+
subjectId: codexCollectionSubjectId(bundle),
|
|
57
|
+
subjectAliases: codexCollectionSubjectAliases(bundle),
|
|
58
|
+
jobId: bundle.jobId,
|
|
59
|
+
...(bundle.taskId ? { taskId: bundle.taskId } : {}),
|
|
60
|
+
queueItemIds: [...bundle.queueItemIds],
|
|
61
|
+
...(bundle.lane ? { lane: bundle.lane } : {}),
|
|
62
|
+
disposition: bundle.disposition,
|
|
63
|
+
mergeReadiness: bundle.mergeReadiness,
|
|
64
|
+
status: bundle.status,
|
|
65
|
+
generatedAt,
|
|
66
|
+
metadata: {
|
|
67
|
+
source: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
|
|
68
|
+
bucket,
|
|
69
|
+
generatedByCollector: entry.generatedByCollector === true,
|
|
70
|
+
patchPath: entry.patchPath ?? bundle.patchPath
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function createCodexCollectionTerminalStateCollections(buckets, generatedAt) {
|
|
75
|
+
const collections = {};
|
|
76
|
+
for (const [bucket, entries] of Object.entries(buckets)) {
|
|
77
|
+
collections[bucket] = entries.map((entry) => {
|
|
78
|
+
const bundle = entry.bundle;
|
|
79
|
+
return {
|
|
80
|
+
id: `codex-collection:${bucket}:${bundle.jobId}`,
|
|
81
|
+
subjectId: codexCollectionSubjectId(bundle),
|
|
82
|
+
subjectAliases: codexCollectionSubjectAliases(bundle),
|
|
83
|
+
jobId: bundle.jobId,
|
|
84
|
+
...(bundle.taskId ? { taskId: bundle.taskId } : {}),
|
|
85
|
+
queueItemIds: [...bundle.queueItemIds],
|
|
86
|
+
bucket,
|
|
87
|
+
status: bundle.status,
|
|
88
|
+
generatedAt: bundle.generatedAt ?? generatedAt,
|
|
89
|
+
metadata: {
|
|
90
|
+
disposition: bundle.disposition,
|
|
91
|
+
mergeReadiness: bundle.mergeReadiness,
|
|
92
|
+
staleAgainstHead: bundle.staleAgainstHead,
|
|
93
|
+
generatedByCollector: entry.generatedByCollector === true,
|
|
94
|
+
patchPath: entry.patchPath ?? bundle.patchPath
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return collections;
|
|
100
|
+
}
|
|
101
|
+
function codexCollectionSubjectId(bundle) {
|
|
102
|
+
return bundle.taskId ?? bundle.queueItemIds[0] ?? bundle.jobId;
|
|
103
|
+
}
|
|
104
|
+
function codexCollectionSubjectAliases(bundle) {
|
|
105
|
+
return uniqueStrings([
|
|
106
|
+
bundle.jobId,
|
|
107
|
+
`job:${bundle.jobId}`,
|
|
108
|
+
...(bundle.taskId ? [bundle.taskId, `task:${bundle.taskId}`] : []),
|
|
109
|
+
...bundle.queueItemIds,
|
|
110
|
+
...bundle.queueItemIds.map((id) => `queue:${id}`)
|
|
111
|
+
]);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=collect-terminal-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-terminal-state.js","sourceRoot":"","sources":["../src/collect-terminal-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CodexCollectMergeRecord } from './collect-workspace-recovery.js';
|
|
2
|
+
export declare function collectWorkspaceOnlyMergeRecords(input: {
|
|
3
|
+
runDir: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
outDir: string;
|
|
6
|
+
ignoredCollectionSegments: readonly string[];
|
|
7
|
+
existingJobIds: ReadonlySet<string>;
|
|
8
|
+
generatedAt: number;
|
|
9
|
+
}): Promise<CodexCollectMergeRecord[]>;
|
|
10
|
+
//# sourceMappingURL=collect-workspace-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-only.d.ts","sourceRoot":"","sources":["../src/collect-workspace-only.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG/E,wBAAsB,gCAAgC,CAAC,KAAK,EAAE;IAC5D,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,yBAAyB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1F,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAC1D,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAWrC"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { FRONTIER_SWARM_MERGE_BUNDLE_KIND, FRONTIER_SWARM_MERGE_BUNDLE_VERSION, matchesGlob } from '@shapeshift-labs/frontier-swarm';
|
|
5
|
+
import { FRONTIER_SWARM_CODEX_COLLECTION_KIND } from './constants.js';
|
|
6
|
+
import { isObject, normalizeWorkspacePath, pathExists, pathHasIgnoredSegment, readOptionalText, slug, stableHash, uniqueStrings, uniqueWorkspacePaths } from './common.js';
|
|
7
|
+
import { noIndexWorkspacePatch } from './codex-workspace-changes.js';
|
|
8
|
+
import { discoverCodexHandoffArtifacts } from './handoff-artifacts.js';
|
|
9
|
+
import { readFrontierCodexWorkspaceProof } from './collect-workspace-proof.js';
|
|
10
|
+
export async function collectWorkspaceOnlyMergeRecords(input) {
|
|
11
|
+
const records = [];
|
|
12
|
+
const seenJobIds = new Set(input.existingJobIds);
|
|
13
|
+
const jobDirs = await collectWorkspaceOnlyJobDirs(input.runDir, input.ignoredCollectionSegments);
|
|
14
|
+
for (const jobDir of jobDirs) {
|
|
15
|
+
const record = await synthesizeWorkspaceOnlyMergeRecord({ ...input, jobDir });
|
|
16
|
+
if (!record || seenJobIds.has(record.bundle.jobId))
|
|
17
|
+
continue;
|
|
18
|
+
seenJobIds.add(record.bundle.jobId);
|
|
19
|
+
records.push(record);
|
|
20
|
+
}
|
|
21
|
+
return records;
|
|
22
|
+
}
|
|
23
|
+
async function collectWorkspaceOnlyJobDirs(runDir, ignoredCollectionSegments) {
|
|
24
|
+
const entries = await fs.readdir(runDir, { withFileTypes: true }).catch(() => []);
|
|
25
|
+
const dirs = [];
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (!entry.isDirectory())
|
|
28
|
+
continue;
|
|
29
|
+
const absolute = path.join(runDir, entry.name);
|
|
30
|
+
const relative = path.relative(runDir, absolute);
|
|
31
|
+
if (pathHasIgnoredSegment(relative, ignoredCollectionSegments))
|
|
32
|
+
continue;
|
|
33
|
+
if (entry.name === 'streams' || entry.name === 'generated-by-collector')
|
|
34
|
+
continue;
|
|
35
|
+
if (!await pathExists(path.join(absolute, 'prompt.md')))
|
|
36
|
+
continue;
|
|
37
|
+
if (await pathExists(path.join(absolute, 'evidence', 'merge.json')))
|
|
38
|
+
continue;
|
|
39
|
+
if (await pathExists(path.join(absolute, 'evidence', 'changes.patch')))
|
|
40
|
+
continue;
|
|
41
|
+
dirs.push(absolute);
|
|
42
|
+
}
|
|
43
|
+
return dirs.sort();
|
|
44
|
+
}
|
|
45
|
+
async function synthesizeWorkspaceOnlyMergeRecord(input) {
|
|
46
|
+
const promptPath = path.join(input.jobDir, 'prompt.md');
|
|
47
|
+
const prompt = await readOptionalText(promptPath);
|
|
48
|
+
if (!prompt)
|
|
49
|
+
return undefined;
|
|
50
|
+
const promptTask = readPromptTask(prompt);
|
|
51
|
+
const jobId = readFirstString(promptTask.jobId) ?? path.basename(input.jobDir);
|
|
52
|
+
const workspaceProofPath = path.join(input.jobDir, 'evidence', 'workspace-proof.json');
|
|
53
|
+
const workspaceProof = await readFrontierCodexWorkspaceProof(workspaceProofPath);
|
|
54
|
+
const workspacePath = workspaceProof?.manifest.path ?? readPromptHeader(prompt, 'Workspace');
|
|
55
|
+
if (!workspacePath || !await pathExists(workspacePath))
|
|
56
|
+
return undefined;
|
|
57
|
+
const allowedWrites = uniqueStrings([...stringArray(promptTask.allowedWrites), ...stringArray(promptTask.allowedWriteGlobs)]).sort();
|
|
58
|
+
const candidateGlobs = uniqueStrings([...allowedWrites, ...stringArray(promptTask.targetRefs), ...stringArray(promptTask.sourceRefs)]).sort();
|
|
59
|
+
if (!candidateGlobs.length)
|
|
60
|
+
return undefined;
|
|
61
|
+
const changedPaths = await collectWorkspaceOnlyChangedPaths({ cwd: input.cwd, workspacePath, workspaceProof, candidateGlobs, allowedWrites });
|
|
62
|
+
if (!changedPaths.length)
|
|
63
|
+
return undefined;
|
|
64
|
+
const diff = await noIndexWorkspacePatch(input.cwd, workspacePath, changedPaths);
|
|
65
|
+
if (!diff.trim())
|
|
66
|
+
return undefined;
|
|
67
|
+
const generatedDir = path.join(input.outDir, 'generated-by-collector', slug(jobId));
|
|
68
|
+
await fs.mkdir(generatedDir, { recursive: true });
|
|
69
|
+
const patchPath = path.join(generatedDir, 'changes.patch');
|
|
70
|
+
const mergePath = path.join(generatedDir, 'merge.json');
|
|
71
|
+
await fs.writeFile(patchPath, diff);
|
|
72
|
+
const ownershipViolations = allowedWrites.length ? changedPaths.filter((file) => !allowedWrites.some((glob) => matchesGlob(file, glob))).sort() : [];
|
|
73
|
+
const bundle = await workspaceOnlyMergeBundle({
|
|
74
|
+
...input,
|
|
75
|
+
promptPath,
|
|
76
|
+
promptTask,
|
|
77
|
+
jobId,
|
|
78
|
+
workspacePath,
|
|
79
|
+
workspaceProof,
|
|
80
|
+
workspaceProofPath,
|
|
81
|
+
patchPath,
|
|
82
|
+
diff,
|
|
83
|
+
changedPaths,
|
|
84
|
+
allowedWrites,
|
|
85
|
+
ownershipViolations
|
|
86
|
+
});
|
|
87
|
+
await fs.writeFile(mergePath, JSON.stringify(bundle, null, 2) + '\n');
|
|
88
|
+
return { mergePath, bundle, generatedByCollector: true, patchPath };
|
|
89
|
+
}
|
|
90
|
+
async function workspaceOnlyMergeBundle(input) {
|
|
91
|
+
const taskId = readFirstString(input.promptTask.taskId);
|
|
92
|
+
const handoffArtifacts = await discoverCodexHandoffArtifacts({ root: input.jobDir }).catch(() => []);
|
|
93
|
+
const evidencePaths = uniqueStrings([
|
|
94
|
+
path.join(input.jobDir, 'evidence'),
|
|
95
|
+
input.promptPath,
|
|
96
|
+
input.patchPath,
|
|
97
|
+
...(await pathExists(input.workspaceProofPath) ? [input.workspaceProofPath] : []),
|
|
98
|
+
...(await pathExists(path.join(input.jobDir, 'last-message.md')) ? [path.join(input.jobDir, 'last-message.md')] : []),
|
|
99
|
+
...handoffArtifacts.map((artifact) => artifact.path)
|
|
100
|
+
]).sort();
|
|
101
|
+
const status = input.ownershipViolations.length ? 'failed' : 'completed';
|
|
102
|
+
return {
|
|
103
|
+
kind: FRONTIER_SWARM_MERGE_BUNDLE_KIND,
|
|
104
|
+
version: FRONTIER_SWARM_MERGE_BUNDLE_VERSION,
|
|
105
|
+
id: `swarm-merge-bundle:${stableHash(['workspace-only', input.jobId, input.patchPath, input.diff])}`,
|
|
106
|
+
runId: path.basename(input.runDir),
|
|
107
|
+
jobId: input.jobId,
|
|
108
|
+
...(taskId ? { taskId } : {}),
|
|
109
|
+
...(readFirstString(input.promptTask.lane) ? { lane: readFirstString(input.promptTask.lane) } : {}),
|
|
110
|
+
...(readFirstString(input.promptTask.title) ? { title: readFirstString(input.promptTask.title) } : {}),
|
|
111
|
+
generatedAt: input.generatedAt,
|
|
112
|
+
status,
|
|
113
|
+
mergeReadiness: input.ownershipViolations.length ? 'rejected' : 'patch-candidate',
|
|
114
|
+
disposition: input.ownershipViolations.length ? 'rejected' : 'needs-port',
|
|
115
|
+
riskLevel: input.ownershipViolations.length ? 'high' : 'unknown',
|
|
116
|
+
autoMergeable: false,
|
|
117
|
+
changedPaths: input.changedPaths,
|
|
118
|
+
changedRegions: uniqueStrings([
|
|
119
|
+
...stringArray(input.promptTask.changedRegions),
|
|
120
|
+
...stringArray(input.promptTask.ownedRegions),
|
|
121
|
+
...stringArray(input.promptTask.ownershipRegions)
|
|
122
|
+
]).sort(),
|
|
123
|
+
ownedFilesTouched: input.ownershipViolations.length === 0 ? [...input.changedPaths] : [],
|
|
124
|
+
allowedWrites: input.allowedWrites,
|
|
125
|
+
ownershipViolations: input.ownershipViolations,
|
|
126
|
+
patchPath: input.patchPath,
|
|
127
|
+
patchHash: stableHash(input.diff),
|
|
128
|
+
evidencePaths,
|
|
129
|
+
commandsPassed: [],
|
|
130
|
+
commandsFailed: [],
|
|
131
|
+
queueItemIds: taskId ? [taskId] : [],
|
|
132
|
+
staleAgainstHead: false,
|
|
133
|
+
reasons: uniqueStrings([
|
|
134
|
+
input.ownershipViolations.length ? 'rejected' : 'collector-workspace-only-recovery-needs-coordinator-review',
|
|
135
|
+
'collector-workspace-only-recovery',
|
|
136
|
+
...input.ownershipViolations.map((file) => `ownership-violation:${file}`)
|
|
137
|
+
]).sort(),
|
|
138
|
+
metadata: { frontierSwarmCodex: { workspaceOnlyCollection: workspaceOnlyMetadata(input) } }
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function workspaceOnlyMetadata(input) {
|
|
142
|
+
return {
|
|
143
|
+
source: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
|
|
144
|
+
reason: 'worker checkout changed source files but emitted no merge.json or changes.patch',
|
|
145
|
+
jobDir: input.jobDir,
|
|
146
|
+
promptPath: input.promptPath,
|
|
147
|
+
patchPath: input.patchPath,
|
|
148
|
+
workspacePath: input.workspacePath,
|
|
149
|
+
workspaceMode: input.workspaceProof?.manifest.mode ?? 'unknown',
|
|
150
|
+
changedPathSource: 'worker-checkout',
|
|
151
|
+
changedPaths: input.changedPaths,
|
|
152
|
+
allowedWrites: input.allowedWrites,
|
|
153
|
+
...(input.workspaceProof ? { workspaceProofPath: input.workspaceProofPath } : {}),
|
|
154
|
+
cwd: input.cwd
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function collectWorkspaceOnlyChangedPaths(input) {
|
|
158
|
+
const proofPaths = uniqueWorkspacePaths([
|
|
159
|
+
...(input.workspaceProof?.observedChangedPaths ?? []),
|
|
160
|
+
...(input.workspaceProof?.reportedChangedPaths ?? [])
|
|
161
|
+
]).filter((file) => workspaceOnlyPathIsCandidate(file, input.candidateGlobs, input.allowedWrites));
|
|
162
|
+
if (proofPaths.length)
|
|
163
|
+
return proofPaths.sort();
|
|
164
|
+
const candidates = await workspaceOnlyCandidatePaths(input);
|
|
165
|
+
const changed = [];
|
|
166
|
+
for (const file of candidates) {
|
|
167
|
+
const sourceMarker = await workspaceOnlyFileMarker(path.join(input.cwd, file));
|
|
168
|
+
const targetMarker = await workspaceOnlyFileMarker(path.join(input.workspacePath, file));
|
|
169
|
+
if (sourceMarker !== targetMarker)
|
|
170
|
+
changed.push(file);
|
|
171
|
+
}
|
|
172
|
+
return uniqueWorkspacePaths(changed).sort();
|
|
173
|
+
}
|
|
174
|
+
async function workspaceOnlyCandidatePaths(input) {
|
|
175
|
+
const candidates = new Set();
|
|
176
|
+
for (const glob of input.candidateGlobs) {
|
|
177
|
+
const normalizedGlob = glob.trim().replace(/\\/g, '/');
|
|
178
|
+
if (!normalizedGlob || normalizedGlob.includes('\0'))
|
|
179
|
+
continue;
|
|
180
|
+
if (!globHasMagic(normalizedGlob)) {
|
|
181
|
+
const normalized = normalizeWorkspacePath(normalizedGlob);
|
|
182
|
+
if (normalized)
|
|
183
|
+
candidates.add(normalized);
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const prefix = globStaticPrefix(normalizedGlob);
|
|
187
|
+
if (!prefix)
|
|
188
|
+
continue;
|
|
189
|
+
for (const root of [input.cwd, input.workspacePath]) {
|
|
190
|
+
for (const file of await listWorkspaceOnlyFiles(path.join(root, prefix), root)) {
|
|
191
|
+
if (matchesGlob(file, normalizedGlob))
|
|
192
|
+
candidates.add(file);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return uniqueWorkspacePaths([...candidates]).filter((file) => workspaceOnlyPathIsCandidate(file, input.candidateGlobs, input.allowedWrites)).sort();
|
|
197
|
+
}
|
|
198
|
+
function workspaceOnlyPathIsCandidate(file, candidateGlobs, allowedWrites) {
|
|
199
|
+
if (pathHasIgnoredSegment(file, ['node_modules', 'dist', 'coverage', '.frontier-framework', 'agent-runs']))
|
|
200
|
+
return false;
|
|
201
|
+
if (allowedWrites.length && !allowedWrites.some((glob) => matchesGlob(file, glob)))
|
|
202
|
+
return false;
|
|
203
|
+
return candidateGlobs.some((glob) => matchesGlob(file, glob) || file === normalizeWorkspacePath(glob));
|
|
204
|
+
}
|
|
205
|
+
async function listWorkspaceOnlyFiles(root, base) {
|
|
206
|
+
const out = [];
|
|
207
|
+
async function walk(current) {
|
|
208
|
+
const entries = await fs.readdir(current, { withFileTypes: true }).catch(() => []);
|
|
209
|
+
for (const entry of entries) {
|
|
210
|
+
const absolute = path.join(current, entry.name);
|
|
211
|
+
const relative = path.relative(base, absolute).replace(/\\/g, '/');
|
|
212
|
+
if (pathHasIgnoredSegment(relative, ['node_modules', 'dist', 'coverage', '.frontier-framework', 'agent-runs']))
|
|
213
|
+
continue;
|
|
214
|
+
if (entry.isDirectory())
|
|
215
|
+
await walk(absolute);
|
|
216
|
+
else if (entry.isFile() || entry.isSymbolicLink())
|
|
217
|
+
out.push(relative);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
await walk(root);
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
async function workspaceOnlyFileMarker(file) {
|
|
224
|
+
const stat = await fs.lstat(file).catch(() => undefined);
|
|
225
|
+
if (!stat)
|
|
226
|
+
return 'missing';
|
|
227
|
+
if (stat.isSymbolicLink())
|
|
228
|
+
return `link:${await fs.readlink(file).catch(() => '')}`;
|
|
229
|
+
if (stat.isFile()) {
|
|
230
|
+
const hash = createHash('sha256').update(await fs.readFile(file)).digest('hex');
|
|
231
|
+
return `file:${stat.size}:${hash}`;
|
|
232
|
+
}
|
|
233
|
+
return stat.isDirectory() ? 'directory' : 'other';
|
|
234
|
+
}
|
|
235
|
+
function readPromptTask(prompt) {
|
|
236
|
+
const markerIndex = prompt.indexOf('Raw task JSON:');
|
|
237
|
+
const rawTask = markerIndex >= 0 ? parsePromptRawTaskJson(prompt.slice(markerIndex + 'Raw task JSON:'.length)) : {};
|
|
238
|
+
return {
|
|
239
|
+
...rawTask,
|
|
240
|
+
jobId: readPromptHeader(prompt, 'Job') ?? readStringField(rawTask, ['jobId']),
|
|
241
|
+
taskId: readPromptHeader(prompt, 'Task') ?? readStringField(rawTask, ['id', 'taskId']),
|
|
242
|
+
lane: readPromptHeader(prompt, 'Lane') ?? readStringField(rawTask, ['lane']),
|
|
243
|
+
title: readStringField(rawTask, ['title'])
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function parsePromptRawTaskJson(text) {
|
|
247
|
+
try {
|
|
248
|
+
const value = JSON.parse(text.trim());
|
|
249
|
+
return isObject(value) ? value : {};
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return {};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function readPromptHeader(prompt, name) {
|
|
256
|
+
const match = new RegExp(`^${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}:\\s*(.+)$`, 'm').exec(prompt);
|
|
257
|
+
return match?.[1]?.trim() || undefined;
|
|
258
|
+
}
|
|
259
|
+
function readStringField(value, keys) {
|
|
260
|
+
for (const key of keys) {
|
|
261
|
+
const candidate = value[key];
|
|
262
|
+
if (typeof candidate === 'string' && candidate.trim())
|
|
263
|
+
return candidate.trim();
|
|
264
|
+
}
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
function readFirstString(...values) {
|
|
268
|
+
for (const value of values) {
|
|
269
|
+
if (typeof value === 'string' && value.trim())
|
|
270
|
+
return value.trim();
|
|
271
|
+
}
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
function stringArray(value) {
|
|
275
|
+
if (typeof value === 'string')
|
|
276
|
+
return value.trim() ? [value.trim()] : [];
|
|
277
|
+
return Array.isArray(value) ? value.map((item) => String(item).trim()).filter(Boolean) : [];
|
|
278
|
+
}
|
|
279
|
+
function globHasMagic(value) {
|
|
280
|
+
return /[*?[\]{}]/.test(value);
|
|
281
|
+
}
|
|
282
|
+
function globStaticPrefix(glob) {
|
|
283
|
+
const magic = glob.search(/[*?[\]{}]/);
|
|
284
|
+
const staticPart = magic < 0 ? glob : glob.slice(0, magic);
|
|
285
|
+
const slash = staticPart.lastIndexOf('/');
|
|
286
|
+
const prefix = magic < 0 ? staticPart : slash >= 0 ? staticPart.slice(0, slash) : '';
|
|
287
|
+
return normalizeWorkspacePath(prefix) ?? '';
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=collect-workspace-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-only.js","sourceRoot":"","sources":["../src/collect-workspace-only.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-proof.d.ts","sourceRoot":"","sources":["../src/collect-workspace-proof.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAExE,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAOpH"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_KIND } from './constants.js';
|
|
3
|
+
import { isObject } from './common.js';
|
|
4
|
+
export async function readFrontierCodexWorkspaceProof(file) {
|
|
5
|
+
const value = await readJsonObjectFile(file);
|
|
6
|
+
if (value.kind !== FRONTIER_SWARM_CODEX_WORKSPACE_PROOF_KIND || !isObject(value.manifest))
|
|
7
|
+
return undefined;
|
|
8
|
+
const manifest = value.manifest;
|
|
9
|
+
if (typeof manifest.path !== 'string' || typeof manifest.mode !== 'string')
|
|
10
|
+
return undefined;
|
|
11
|
+
if (!['current', 'git-worktree', 'copy', 'snapshot'].includes(manifest.mode))
|
|
12
|
+
return undefined;
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
async function readJsonObjectFile(file) {
|
|
16
|
+
try {
|
|
17
|
+
const value = JSON.parse(await fs.readFile(file, 'utf8'));
|
|
18
|
+
return isObject(value) ? value : {};
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=collect-workspace-proof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-proof.js","sourceRoot":"","sources":["../src/collect-workspace-proof.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,yCAAyC,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAY;IAChE,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,yCAAyC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5G,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7F,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/F,OAAO,KAA+C,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type FrontierSwarmMergeBundle } from '@shapeshift-labs/frontier-swarm';
|
|
2
|
+
import type { FrontierCodexCollectBucket, FrontierCodexCollectedBundle } from './types-collection.js';
|
|
3
|
+
export type CodexCollectMergeRecord = {
|
|
4
|
+
mergePath: string;
|
|
5
|
+
bundle: FrontierSwarmMergeBundle;
|
|
6
|
+
generatedByCollector?: boolean;
|
|
7
|
+
patchPath?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveOrSynthesizeCollectedPatch(input: {
|
|
10
|
+
runDir: string;
|
|
11
|
+
cwd: string;
|
|
12
|
+
outDir: string;
|
|
13
|
+
mergePath: string;
|
|
14
|
+
bundle: FrontierSwarmMergeBundle;
|
|
15
|
+
generatedAt: number;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
bundle: FrontierSwarmMergeBundle;
|
|
18
|
+
patchPath?: string;
|
|
19
|
+
generatedByCollector?: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function collectedGeneratedPatchCount(buckets: Record<FrontierCodexCollectBucket, FrontierCodexCollectedBundle[]>): number;
|
|
22
|
+
//# sourceMappingURL=collect-workspace-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-recovery.d.ts","sourceRoot":"","sources":["../src/collect-workspace-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAazC,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC7B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,wBAAwB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAMpG;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,CAAC,GAAG,MAAM,CAEhI"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { matchesGlob } from '@shapeshift-labs/frontier-swarm';
|
|
4
|
+
import { FRONTIER_SWARM_CODEX_COLLECTION_KIND } from './constants.js';
|
|
5
|
+
import { isObject, pathExists, resolveBundlePatchPath, slug, stableHash, uniqueStrings, uniqueWorkspacePaths } from './common.js';
|
|
6
|
+
import { noIndexWorkspacePatch } from './codex-workspace-changes.js';
|
|
7
|
+
import { readFrontierCodexWorkspaceProof } from './collect-workspace-proof.js';
|
|
8
|
+
export async function resolveOrSynthesizeCollectedPatch(input) {
|
|
9
|
+
const existingPatchPath = await resolveCollectedBundlePatchPath(input.bundle, input.mergePath);
|
|
10
|
+
if (existingPatchPath)
|
|
11
|
+
return { bundle: input.bundle, patchPath: existingPatchPath };
|
|
12
|
+
const generated = await synthesizeCollectorPatchFromWorkerCheckout(input);
|
|
13
|
+
if (!generated)
|
|
14
|
+
return { bundle: input.bundle };
|
|
15
|
+
return { bundle: generated.bundle, patchPath: generated.patchPath, generatedByCollector: true };
|
|
16
|
+
}
|
|
17
|
+
export function collectedGeneratedPatchCount(buckets) {
|
|
18
|
+
return Object.values(buckets).flat().filter((entry) => entry.generatedByCollector).length;
|
|
19
|
+
}
|
|
20
|
+
async function resolveCollectedBundlePatchPath(bundle, mergePath) {
|
|
21
|
+
const patchPath = resolveBundlePatchPath(bundle, mergePath);
|
|
22
|
+
if (patchPath && await pathExists(patchPath))
|
|
23
|
+
return patchPath;
|
|
24
|
+
const sibling = path.join(path.dirname(mergePath), 'changes.patch');
|
|
25
|
+
return await pathExists(sibling) ? sibling : undefined;
|
|
26
|
+
}
|
|
27
|
+
async function synthesizeCollectorPatchFromWorkerCheckout(input) {
|
|
28
|
+
const changedPaths = uniqueWorkspacePaths(input.bundle.changedPaths);
|
|
29
|
+
const scopedChangedPaths = input.bundle.allowedWrites.length
|
|
30
|
+
? changedPaths.filter((file) => input.bundle.allowedWrites.some((glob) => matchesGlob(file, glob)))
|
|
31
|
+
: changedPaths;
|
|
32
|
+
if (!scopedChangedPaths.length)
|
|
33
|
+
return undefined;
|
|
34
|
+
const workspaceProof = await readCollectedWorkspaceProof(input.bundle, input.mergePath);
|
|
35
|
+
const workspacePath = workspaceProof?.proof.manifest.path;
|
|
36
|
+
if (!workspacePath || !await pathExists(workspacePath))
|
|
37
|
+
return undefined;
|
|
38
|
+
const diff = await noIndexWorkspacePatch(input.cwd, workspacePath, scopedChangedPaths);
|
|
39
|
+
if (!diff.trim())
|
|
40
|
+
return undefined;
|
|
41
|
+
const generatedDir = path.join(input.outDir, 'generated-by-collector', slug(input.bundle.jobId));
|
|
42
|
+
const patchPath = path.join(generatedDir, 'changes.patch');
|
|
43
|
+
await fs.mkdir(generatedDir, { recursive: true });
|
|
44
|
+
await fs.writeFile(patchPath, diff);
|
|
45
|
+
return {
|
|
46
|
+
patchPath,
|
|
47
|
+
bundle: {
|
|
48
|
+
...input.bundle,
|
|
49
|
+
patchPath,
|
|
50
|
+
patchHash: stableHash(diff),
|
|
51
|
+
evidencePaths: uniqueStrings([...input.bundle.evidencePaths, patchPath, ...(workspaceProof?.path ? [workspaceProof.path] : [])]),
|
|
52
|
+
metadata: collectorPatchMetadata(input, workspaceProof, patchPath, scopedChangedPaths)
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function collectorPatchMetadata(input, workspaceProof, patchPath, changedPaths) {
|
|
57
|
+
const metadata = isObject(input.bundle.metadata) ? input.bundle.metadata : {};
|
|
58
|
+
const codex = isObject(metadata.frontierSwarmCodex) ? metadata.frontierSwarmCodex : {};
|
|
59
|
+
return {
|
|
60
|
+
...metadata,
|
|
61
|
+
frontierSwarmCodex: {
|
|
62
|
+
...codex,
|
|
63
|
+
generatedPatch: {
|
|
64
|
+
source: FRONTIER_SWARM_CODEX_COLLECTION_KIND,
|
|
65
|
+
classifier: 'generated-by-collector',
|
|
66
|
+
reason: 'changes.patch missing; synthesized from worker checkout',
|
|
67
|
+
generatedAt: input.generatedAt,
|
|
68
|
+
runDir: input.runDir,
|
|
69
|
+
mergePath: input.mergePath,
|
|
70
|
+
patchPath,
|
|
71
|
+
workspacePath: workspaceProof.proof.manifest.path,
|
|
72
|
+
workspaceMode: workspaceProof.proof.manifest.mode,
|
|
73
|
+
changedPaths: [...changedPaths].sort(),
|
|
74
|
+
allowedWrites: [...input.bundle.allowedWrites],
|
|
75
|
+
...(input.bundle.patchPath ? { originalPatchPath: input.bundle.patchPath } : {}),
|
|
76
|
+
workspaceProofPath: workspaceProof.path
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async function readCollectedWorkspaceProof(bundle, mergePath) {
|
|
82
|
+
const candidates = uniqueStrings([
|
|
83
|
+
...bundle.evidencePaths.filter((entry) => path.basename(entry) === 'workspace-proof.json'),
|
|
84
|
+
path.join(path.dirname(mergePath), 'workspace-proof.json'),
|
|
85
|
+
path.join(path.dirname(path.dirname(mergePath)), 'evidence', 'workspace-proof.json')
|
|
86
|
+
]);
|
|
87
|
+
for (const candidate of candidates) {
|
|
88
|
+
const proof = await readFrontierCodexWorkspaceProof(candidate);
|
|
89
|
+
if (proof)
|
|
90
|
+
return { path: candidate, proof };
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=collect-workspace-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-workspace-recovery.js","sourceRoot":"","sources":["../src/collect-workspace-recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/collect.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { type FrontierSwarmCoordinatorProcessInput } from '@shapeshift-labs/frontier-swarm';
|
|
2
1
|
import type { FrontierCodexCollectInput, FrontierCodexCollectResult } from './index.js';
|
|
2
|
+
export { readCodexPidProcesses } from './collect-pids.js';
|
|
3
3
|
export declare function collectCodexSwarmRun(input: FrontierCodexCollectInput): Promise<FrontierCodexCollectResult>;
|
|
4
|
-
export declare function readCodexPidProcesses(file: string): Promise<FrontierSwarmCoordinatorProcessInput[]>;
|
|
5
4
|
//# sourceMappingURL=collect.d.ts.map
|
package/dist/collect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../src/collect.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAqDpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA8OhH"}
|