agentera 3.0.0-dev.20 → 3.0.0-dev.21
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 +19 -0
- package/bundle/CHANGELOG.md +63 -70
- package/bundle/README.md +17 -0
- package/bundle/UPGRADE.md +38 -0
- package/bundle/references/adapters/package-surface-characterization.md +7 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +3 -3
- package/bundle/references/artifacts/state-storage-authority.yaml +1446 -0
- package/bundle/references/cli/agent-ready-state-contract.yaml +11 -39
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +30 -15
- package/bundle/references/meta/documentation-inventory.md +1 -0
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +18 -10
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +10 -10
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +11 -6
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +3 -2
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +15 -8
- package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +15 -9
- package/bundle/skills/agentera/references/contract.md +65 -23
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +15 -10
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +134 -3
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +16 -10
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +23 -1
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +16 -10
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +34 -0
- package/dist/capabilities/audit/instructions.js +1 -1
- package/dist/capabilities/audit/instructions.js.map +1 -1
- package/dist/capabilities/build/instructions.js +1 -1
- package/dist/capabilities/build/instructions.js.map +1 -1
- package/dist/capabilities/discuss/instructions.js +1 -1
- package/dist/capabilities/discuss/instructions.js.map +1 -1
- package/dist/capabilities/document/instructions.js +1 -1
- package/dist/capabilities/document/instructions.js.map +1 -1
- package/dist/capabilities/optimize/instructions.js +1 -1
- package/dist/capabilities/optimize/instructions.js.map +1 -1
- package/dist/capabilities/orchestrate/instructions.js +1 -1
- package/dist/capabilities/orchestrate/instructions.js.map +1 -1
- package/dist/capabilities/plan/instructions.js +1 -1
- package/dist/capabilities/plan/instructions.js.map +1 -1
- package/dist/capabilities/profile/instructions.js +1 -1
- package/dist/capabilities/profile/instructions.js.map +1 -1
- package/dist/capabilities/vision/instructions.js +1 -1
- package/dist/capabilities/vision/instructions.js.map +1 -1
- package/dist/cli/appContext.js +14 -6
- package/dist/cli/appContext.js.map +1 -1
- package/dist/cli/capabilityContext/bespoke.js +3 -1
- package/dist/cli/capabilityContext/bespoke.js.map +1 -1
- package/dist/cli/capabilityContext/build.js +5 -4
- package/dist/cli/capabilityContext/build.js.map +1 -1
- package/dist/cli/capabilityContext/closeout.js +2 -1
- package/dist/cli/capabilityContext/closeout.js.map +1 -1
- package/dist/cli/capabilityContext/contract.js +29 -0
- package/dist/cli/capabilityContext/contract.js.map +1 -1
- package/dist/cli/capabilityContext/evidence.js +21 -20
- package/dist/cli/capabilityContext/evidence.js.map +1 -1
- package/dist/cli/capabilityContext/orchestration.js +3 -2
- package/dist/cli/capabilityContext/orchestration.js.map +1 -1
- package/dist/cli/capabilityContext/progress.js +9 -4
- package/dist/cli/capabilityContext/progress.js.map +1 -1
- package/dist/cli/capabilityContext/slim.js +37 -6
- package/dist/cli/capabilityContext/slim.js.map +1 -1
- package/dist/cli/capabilityContext/startup.js +30 -6
- package/dist/cli/capabilityContext/startup.js.map +1 -1
- package/dist/cli/capabilityContext/types.js +14 -4
- package/dist/cli/capabilityContext/types.js.map +1 -1
- package/dist/cli/commands/backfill.js +194 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/compact.js +40 -11
- package/dist/cli/commands/compact.js.map +1 -1
- package/dist/cli/commands/durability.js +85 -0
- package/dist/cli/commands/durability.js.map +1 -0
- package/dist/cli/commands/migrate.js +677 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/prime/collectOrientationState.js +23 -0
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
- package/dist/cli/commands/prime/orientationOutput.js +4 -2
- package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
- package/dist/cli/commands/query.js +20 -2
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/schema.js +247 -69
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/state/decisions.js +28 -10
- package/dist/cli/commands/state/decisions.js.map +1 -1
- package/dist/cli/commands/state/experimentRecords.js +156 -0
- package/dist/cli/commands/state/experimentRecords.js.map +1 -0
- package/dist/cli/commands/state/get.js +141 -0
- package/dist/cli/commands/state/get.js.map +1 -0
- package/dist/cli/commands/state/index.js +2 -2
- package/dist/cli/commands/state/index.js.map +1 -1
- package/dist/cli/commands/state/list.js +159 -0
- package/dist/cli/commands/state/list.js.map +1 -0
- package/dist/cli/commands/state/plan.js +146 -41
- package/dist/cli/commands/state/plan.js.map +1 -1
- package/dist/cli/commands/state/planTasks.js +164 -0
- package/dist/cli/commands/state/planTasks.js.map +1 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/plans.js.map +1 -0
- package/dist/cli/commands/state/write.js +8 -3
- package/dist/cli/commands/state/write.js.map +1 -1
- package/dist/cli/dispatch/check.js +71 -4
- package/dist/cli/dispatch/check.js.map +1 -1
- package/dist/cli/dispatch/index.js +48 -30
- package/dist/cli/dispatch/index.js.map +1 -1
- package/dist/cli/dispatch/lifecycle.js +4 -4
- package/dist/cli/dispatch/lifecycle.js.map +1 -1
- package/dist/cli/dispatch/state.js +23 -3
- package/dist/cli/dispatch/state.js.map +1 -1
- package/dist/cli/errors.js +13 -14
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/help.js +162 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/orientation.js +146 -34
- package/dist/cli/orientation.js.map +1 -1
- package/dist/cli/planArtifacts.js +31 -2
- package/dist/cli/planArtifacts.js.map +1 -1
- package/dist/cli/prime-blob.js +1 -0
- package/dist/cli/prime-blob.js.map +1 -1
- package/dist/cli/startupCompletenessContract.js +3 -2
- package/dist/cli/startupCompletenessContract.js.map +1 -1
- package/dist/cli/stateQuery.js +5 -3
- package/dist/cli/stateQuery.js.map +1 -1
- package/dist/core/text.js +11 -0
- package/dist/core/text.js.map +1 -0
- package/dist/hooks/compaction/apply.js +224 -46
- package/dist/hooks/compaction/apply.js.map +1 -1
- package/dist/hooks/compaction/dryRun.js +2 -0
- package/dist/hooks/compaction/dryRun.js.map +1 -1
- package/dist/hooks/compaction/index.js +4 -4
- package/dist/hooks/compaction/index.js.map +1 -1
- package/dist/hooks/compaction/parse.js +73 -5
- package/dist/hooks/compaction/parse.js.map +1 -1
- package/dist/hooks/compaction/retention.js +22 -21
- package/dist/hooks/compaction/retention.js.map +1 -1
- package/dist/hooks/compaction/status.js +116 -23
- package/dist/hooks/compaction/status.js.map +1 -1
- package/dist/hooks/sessionStart.js +39 -7
- package/dist/hooks/sessionStart.js.map +1 -1
- package/dist/hooks/validateArtifact/index.js +2 -2
- package/dist/hooks/validateArtifact/index.js.map +1 -1
- package/dist/hooks/validateArtifact/markdown.js +9 -9
- package/dist/hooks/validateArtifact/markdown.js.map +1 -1
- package/dist/hooks/validateArtifact/traversal.js +11 -9
- package/dist/hooks/validateArtifact/traversal.js.map +1 -1
- package/dist/registries/artifactRegistry.js +147 -44
- package/dist/registries/artifactRegistry.js.map +1 -1
- package/dist/release/releaseMetadata.js +95 -1
- package/dist/release/releaseMetadata.js.map +1 -1
- package/dist/state/archiveDiscovery.js +589 -0
- package/dist/state/archiveDiscovery.js.map +1 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archivePublication.js.map +1 -0
- package/dist/state/archiveRecovery.js +238 -0
- package/dist/state/archiveRecovery.js.map +1 -0
- package/dist/state/archiveReplay.js +54 -0
- package/dist/state/archiveReplay.js.map +1 -0
- package/dist/state/decisionOverlay.js +255 -0
- package/dist/state/decisionOverlay.js.map +1 -0
- package/dist/state/directRetrieval.js +322 -0
- package/dist/state/directRetrieval.js.map +1 -0
- package/dist/state/durability.js +451 -0
- package/dist/state/durability.js.map +1 -0
- package/dist/state/experimentArchive.js +64 -0
- package/dist/state/experimentArchive.js.map +1 -0
- package/dist/state/experimentIdentity.js +191 -0
- package/dist/state/experimentIdentity.js.map +1 -0
- package/dist/state/experimentRetrieval.js +447 -0
- package/dist/state/experimentRetrieval.js.map +1 -0
- package/dist/state/gitBackfill.js +561 -0
- package/dist/state/gitBackfill.js.map +1 -0
- package/dist/state/gitBackfillAuthority.js +141 -0
- package/dist/state/gitBackfillAuthority.js.map +1 -0
- package/dist/state/gitBackfillHistory.js +278 -0
- package/dist/state/gitBackfillHistory.js.map +1 -0
- package/dist/state/gitBackfillOutput.js +209 -0
- package/dist/state/gitBackfillOutput.js.map +1 -0
- package/dist/state/healthRepair.js +70 -0
- package/dist/state/healthRepair.js.map +1 -0
- package/dist/state/legacyIdentity.js +48 -0
- package/dist/state/legacyIdentity.js.map +1 -0
- package/dist/state/legacyMigration.js +516 -0
- package/dist/state/legacyMigration.js.map +1 -0
- package/dist/state/legacyMigrationParser.js +489 -0
- package/dist/state/legacyMigrationParser.js.map +1 -0
- package/dist/state/listAccounting.js +55 -0
- package/dist/state/listAccounting.js.map +1 -0
- package/dist/state/listClassification.js +18 -0
- package/dist/state/listClassification.js.map +1 -0
- package/dist/state/listRetrieval.js +782 -0
- package/dist/state/listRetrieval.js.map +1 -0
- package/dist/state/migrationAuthority.js +413 -0
- package/dist/state/migrationAuthority.js.map +1 -0
- package/dist/state/migrationEnrichment.js +35 -0
- package/dist/state/migrationEnrichment.js.map +1 -0
- package/dist/state/planIdentity.js +45 -0
- package/dist/state/planIdentity.js.map +1 -0
- package/dist/state/planRetrieval.js +314 -0
- package/dist/state/planRetrieval.js.map +1 -0
- package/dist/state/planTaskRetrieval.js +285 -0
- package/dist/state/planTaskRetrieval.js.map +1 -0
- package/dist/state/projectionPolicy.js +184 -0
- package/dist/state/projectionPolicy.js.map +1 -0
- package/dist/state/retrievalAuthority.js +326 -0
- package/dist/state/retrievalAuthority.js.map +1 -0
- package/dist/state/startupProjection.js +498 -0
- package/dist/state/startupProjection.js.map +1 -0
- package/dist/state/write/experimentPublication.js +193 -0
- package/dist/state/write/experimentPublication.js.map +1 -0
- package/dist/state/write/explain.js +28 -14
- package/dist/state/write/explain.js.map +1 -1
- package/dist/state/write/helpers.js +8 -0
- package/dist/state/write/helpers.js.map +1 -0
- package/dist/state/write/index.js +1 -0
- package/dist/state/write/index.js.map +1 -1
- package/dist/state/write/lock.js +24 -1
- package/dist/state/write/lock.js.map +1 -1
- package/dist/state/write/mutation.js +190 -0
- package/dist/state/write/mutation.js.map +1 -0
- package/dist/state/write/operations.js +36 -2
- package/dist/state/write/operations.js.map +1 -1
- package/dist/state/write/planPublication.js +172 -0
- package/dist/state/write/planPublication.js.map +1 -0
- package/dist/state/write/transaction.js +238 -225
- package/dist/state/write/transaction.js.map +1 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js +2 -2
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
- package/dist/validate/crossCapability.js +9 -6
- package/dist/validate/crossCapability.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
5
|
+
import { dumpYamlMapping, loadYamlMapping } from "../core/yaml.js";
|
|
6
|
+
import { ArtifactSchemaValidator } from "../hooks/validateArtifact/index.js";
|
|
7
|
+
import { assertRealpathBoundary } from "../registries/artifactRegistry.js";
|
|
8
|
+
const AUTHORITY_RELATIVE_PATH = "references/artifacts/state-storage-authority.yaml";
|
|
9
|
+
const EXPECTED_AUTHORITY_SCHEMA = "agentera.stateStorageAuthority.v1";
|
|
10
|
+
function isMapping(value) {
|
|
11
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
function mapping(value) {
|
|
14
|
+
return isMapping(value) ? value : {};
|
|
15
|
+
}
|
|
16
|
+
function requiredString(value, field) {
|
|
17
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
18
|
+
throw new Error(`state storage authority field '${field}' must be a non-empty string`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function requiredStringList(value, field) {
|
|
23
|
+
if (!Array.isArray(value) ||
|
|
24
|
+
value.some((item) => typeof item !== "string" || item.length === 0)) {
|
|
25
|
+
throw new Error(`state storage authority field '${field}' must be a list of non-empty strings`);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function requiredPositiveInteger(value, field) {
|
|
30
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1) {
|
|
31
|
+
throw new Error(`state storage authority field '${field}' must be a positive integer`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function loadAuthority(sourceRoot) {
|
|
36
|
+
const authorityPath = path.join(sourceRoot, AUTHORITY_RELATIVE_PATH);
|
|
37
|
+
const authority = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
|
|
38
|
+
if (authority.schema_version !== EXPECTED_AUTHORITY_SCHEMA) {
|
|
39
|
+
throw new Error(`state storage authority schema_version must be ${EXPECTED_AUTHORITY_SCHEMA}`);
|
|
40
|
+
}
|
|
41
|
+
if (authority.status !== "active_authority") {
|
|
42
|
+
throw new Error("state storage authority must be active_authority");
|
|
43
|
+
}
|
|
44
|
+
const projectRoot = mapping(mapping(authority.storage).project_root);
|
|
45
|
+
if (projectRoot.fixed !== true || projectRoot.path_override !== "forbidden") {
|
|
46
|
+
throw new Error("state storage authority must fix the project-local archive root");
|
|
47
|
+
}
|
|
48
|
+
const archiveRoot = requiredString(projectRoot.archive_root, "storage.project_root.archive_root");
|
|
49
|
+
if (path.isAbsolute(archiveRoot) || archiveRoot.split(/[\\/]/).some((part) => part === "..")) {
|
|
50
|
+
throw new Error("state storage authority archive_root must be a safe project-relative path");
|
|
51
|
+
}
|
|
52
|
+
const archive = mapping(mapping(authority.storage).archive);
|
|
53
|
+
const filename = mapping(archive.filename);
|
|
54
|
+
const extension = requiredString(filename.extension, "storage.archive.filename.extension");
|
|
55
|
+
const acceptedPattern = requiredString(filename.accepted_pattern, "storage.archive.filename.accepted_pattern");
|
|
56
|
+
if (extension !== ".yaml")
|
|
57
|
+
throw new Error("state storage authority archive extension must be .yaml");
|
|
58
|
+
if (acceptedPattern !== "^[1-9][0-9]*$") {
|
|
59
|
+
throw new Error("state storage authority archive filename pattern is unsupported");
|
|
60
|
+
}
|
|
61
|
+
const archivePathTemplate = requiredString(projectRoot.archive_path_template, "storage.project_root.archive_path_template");
|
|
62
|
+
if (archivePathTemplate !== `${archiveRoot}/<artifact-id>/<entry-number>${extension}`) {
|
|
63
|
+
throw new Error("state storage authority archive_path_template does not match the fixed archive root");
|
|
64
|
+
}
|
|
65
|
+
const envelope = mapping(authority.envelope);
|
|
66
|
+
const requiredEnvelopeFields = new Set(requiredStringList(envelope.required_fields, "envelope.required_fields"));
|
|
67
|
+
for (const field of ["schemaVersion", "artifact_id", "entry_number", "record", "record_sha256"]) {
|
|
68
|
+
if (!requiredEnvelopeFields.has(field))
|
|
69
|
+
throw new Error(`state storage authority envelope requires ${field}`);
|
|
70
|
+
}
|
|
71
|
+
const entrySchemaVersion = requiredString(envelope.schema_version, "envelope.schema_version");
|
|
72
|
+
const forbiddenEnvelopeFields = new Set(requiredStringList(envelope.forbidden_fields, "envelope.forbidden_fields"));
|
|
73
|
+
const supportedArtifacts = new Map();
|
|
74
|
+
const supported = mapping(authority.scope).supported_artifacts;
|
|
75
|
+
if (!Array.isArray(supported) || supported.length === 0) {
|
|
76
|
+
throw new Error("state storage authority must declare supported artifacts");
|
|
77
|
+
}
|
|
78
|
+
for (const [index, rawArtifact] of supported.entries()) {
|
|
79
|
+
const artifact = mapping(rawArtifact);
|
|
80
|
+
const artifactId = requiredString(artifact.artifact_id, `scope.supported_artifacts[${index}].artifact_id`);
|
|
81
|
+
if (supportedArtifacts.has(artifactId))
|
|
82
|
+
throw new Error(`duplicate supported artifact ${artifactId}`);
|
|
83
|
+
supportedArtifacts.set(artifactId, {
|
|
84
|
+
artifactId,
|
|
85
|
+
entryCollection: requiredString(artifact.entry_collection, `scope.supported_artifacts[${index}].entry_collection`),
|
|
86
|
+
entryNumberField: requiredString(artifact.entry_number_field, `scope.supported_artifacts[${index}].entry_number_field`),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const unchanged = mapping(authority.scope).unchanged_archive_conventions;
|
|
90
|
+
const ignoredRootNames = new Set();
|
|
91
|
+
if (isMapping(unchanged)) {
|
|
92
|
+
for (const [name, rawConvention] of Object.entries(unchanged)) {
|
|
93
|
+
if (mapping(rawConvention).numbered_entry_discovery === "forbidden")
|
|
94
|
+
ignoredRootNames.add(name);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const overlays = mapping(authority.overlays);
|
|
98
|
+
const overlayLocation = requiredString(overlays.location, "overlays.location");
|
|
99
|
+
if (path.isAbsolute(overlayLocation) ||
|
|
100
|
+
overlayLocation.split(/[\\/]/).some((part) => part === "..")) {
|
|
101
|
+
throw new Error("state storage authority decision overlay location must be project-relative");
|
|
102
|
+
}
|
|
103
|
+
const identityKey = requiredString(overlays.identity_key, "overlays.identity_key");
|
|
104
|
+
const identityPrefix = identityKey.split(":")[0];
|
|
105
|
+
if (!identityPrefix || identityKey !== `${identityPrefix}:<decision-number>`) {
|
|
106
|
+
throw new Error("state storage authority decision overlay identity_key is unsupported");
|
|
107
|
+
}
|
|
108
|
+
const transitionRules = mapping(overlays.transition_rules);
|
|
109
|
+
const stateValues = requiredStringList(overlays.state_values, "overlays.state_values");
|
|
110
|
+
const allowedNext = {};
|
|
111
|
+
for (const state of stateValues) {
|
|
112
|
+
const rule = mapping(transitionRules[state]);
|
|
113
|
+
const next = requiredStringList(rule.allowed_next, `overlays.transition_rules.${state}.allowed_next`);
|
|
114
|
+
if (next.some((value) => !stateValues.includes(value))) {
|
|
115
|
+
throw new Error(`state storage authority transition rule for ${state} contains an unknown state`);
|
|
116
|
+
}
|
|
117
|
+
allowedNext[state] = next;
|
|
118
|
+
}
|
|
119
|
+
const decisionOverlay = {
|
|
120
|
+
location: overlayLocation,
|
|
121
|
+
schemaVersion: requiredString(overlays.schema_version, "overlays.schema_version"),
|
|
122
|
+
identityKey,
|
|
123
|
+
identityPrefix,
|
|
124
|
+
mutablePaths: requiredStringList(overlays.mutable_paths, "overlays.mutable_paths"),
|
|
125
|
+
derivedPaths: requiredStringList(overlays.derived_paths, "overlays.derived_paths"),
|
|
126
|
+
immutablePaths: requiredStringList(overlays.immutable_paths, "overlays.immutable_paths"),
|
|
127
|
+
stateValues,
|
|
128
|
+
allowedNext,
|
|
129
|
+
};
|
|
130
|
+
const currentProjection = mapping(mapping(authority.projections).current);
|
|
131
|
+
const currentProjectionPaths = new Map();
|
|
132
|
+
const declaredProjectionPaths = mapping(currentProjection.paths);
|
|
133
|
+
for (const artifact of supportedArtifacts.values()) {
|
|
134
|
+
const projectionPath = requiredString(declaredProjectionPaths[artifact.artifactId], `projections.current.paths.${artifact.artifactId}`);
|
|
135
|
+
if (path.isAbsolute(projectionPath) ||
|
|
136
|
+
projectionPath.split(/[\\/]/).some((part) => part === "..")) {
|
|
137
|
+
throw new Error(`state storage authority current projection path for ${artifact.artifactId} must be project-relative`);
|
|
138
|
+
}
|
|
139
|
+
currentProjectionPaths.set(artifact.artifactId, projectionPath);
|
|
140
|
+
}
|
|
141
|
+
const capacity = mapping(currentProjection.default_capacity);
|
|
142
|
+
const activeEntries = requiredPositiveInteger(capacity.active_entries, "projections.current.default_capacity.active_entries");
|
|
143
|
+
const summaryEntries = requiredPositiveInteger(capacity.summary_entries, "projections.current.default_capacity.summary_entries");
|
|
144
|
+
const totalEntries = requiredPositiveInteger(capacity.total_entries, "projections.current.default_capacity.total_entries");
|
|
145
|
+
if (activeEntries + summaryEntries !== totalEntries) {
|
|
146
|
+
throw new Error("state storage authority projection capacity must equal active plus summary entries");
|
|
147
|
+
}
|
|
148
|
+
const projectionBudget = mapping(mapping(authority.budgets).projection);
|
|
149
|
+
const maxUtf8Bytes = requiredPositiveInteger(projectionBudget.max_utf8_bytes, "budgets.projection.max_utf8_bytes");
|
|
150
|
+
const durability = mapping(mapping(authority.api).durability);
|
|
151
|
+
const durabilityCommand = requiredString(durability.command, "api.durability.command");
|
|
152
|
+
const durabilityFormats = requiredStringList(durability.formats, "api.durability.formats");
|
|
153
|
+
if (durabilityFormats.join(",") !== "text,json,yaml") {
|
|
154
|
+
throw new Error("state storage authority durability formats must be text, json, yaml");
|
|
155
|
+
}
|
|
156
|
+
const durabilityDefaultLimit = requiredPositiveInteger(durability.default_limit, "api.durability.default_limit");
|
|
157
|
+
const durabilityMaximumLimit = requiredPositiveInteger(durability.maximum_limit, "api.durability.maximum_limit");
|
|
158
|
+
if (durabilityDefaultLimit > durabilityMaximumLimit) {
|
|
159
|
+
throw new Error("state storage authority durability default limit exceeds maximum limit");
|
|
160
|
+
}
|
|
161
|
+
const durabilityStatuses = requiredStringList(durability.status_values, "api.durability.status_values");
|
|
162
|
+
const localStatuses = requiredStringList(durability.local_values, "api.durability.local_values");
|
|
163
|
+
const gitStatuses = requiredStringList(durability.git_values, "api.durability.git_values");
|
|
164
|
+
return {
|
|
165
|
+
archiveRoot,
|
|
166
|
+
archiveExtension: extension,
|
|
167
|
+
entryNamePattern: new RegExp(acceptedPattern),
|
|
168
|
+
requiredEnvelopeFields,
|
|
169
|
+
forbiddenEnvelopeFields,
|
|
170
|
+
entrySchemaVersion,
|
|
171
|
+
supportedArtifacts,
|
|
172
|
+
currentProjectionPaths,
|
|
173
|
+
ignoredRootNames,
|
|
174
|
+
decisionOverlay,
|
|
175
|
+
projection: { activeEntries, summaryEntries, totalEntries, maxUtf8Bytes },
|
|
176
|
+
durability: {
|
|
177
|
+
command: durabilityCommand,
|
|
178
|
+
defaultLimit: durabilityDefaultLimit,
|
|
179
|
+
maximumLimit: durabilityMaximumLimit,
|
|
180
|
+
statusValues: durabilityStatuses,
|
|
181
|
+
localValues: localStatuses,
|
|
182
|
+
gitValues: gitStatuses,
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function rejection(filePath, reason, message, rejectionClass = "corrupt") {
|
|
187
|
+
return { path: filePath, class: rejectionClass, reason, message };
|
|
188
|
+
}
|
|
189
|
+
function escapedPath(projectRoot, candidate) {
|
|
190
|
+
const relative = path.relative(projectRoot, candidate);
|
|
191
|
+
return relative !== "" && (relative.startsWith(".." + path.sep) || path.isAbsolute(relative));
|
|
192
|
+
}
|
|
193
|
+
function pathIssue(projectRoot, candidate, expected) {
|
|
194
|
+
if (escapedPath(projectRoot, candidate)) {
|
|
195
|
+
return { reason: "unsafe_path", message: "archive path escapes the selected project root" };
|
|
196
|
+
}
|
|
197
|
+
const relative = path.relative(projectRoot, candidate);
|
|
198
|
+
let cursor = projectRoot;
|
|
199
|
+
for (const segment of relative.split(path.sep)) {
|
|
200
|
+
if (!segment)
|
|
201
|
+
continue;
|
|
202
|
+
cursor = path.join(cursor, segment);
|
|
203
|
+
let stat;
|
|
204
|
+
try {
|
|
205
|
+
stat = fs.lstatSync(cursor);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
if (stat.isSymbolicLink()) {
|
|
211
|
+
return { reason: "symlink", message: "archive path contains a symbolic link" };
|
|
212
|
+
}
|
|
213
|
+
if (cursor !== candidate && !stat.isDirectory()) {
|
|
214
|
+
return { reason: "unsafe_path", message: "archive path contains a non-directory parent" };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
assertRealpathBoundary(projectRoot, candidate, "numbered archive");
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
return { reason: "unsafe_path", message: error.message };
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const stat = fs.lstatSync(candidate);
|
|
225
|
+
if (stat.isSymbolicLink())
|
|
226
|
+
return { reason: "symlink", message: "archive record is a symbolic link" };
|
|
227
|
+
if (expected === "directory" && !stat.isDirectory()) {
|
|
228
|
+
return { reason: "unsafe_path", message: "archive artifact path is not a directory" };
|
|
229
|
+
}
|
|
230
|
+
if (expected === "file" && !stat.isFile()) {
|
|
231
|
+
return { reason: "unsafe_path", message: "archive record path is not a regular file" };
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
function canonicalJson(value, ancestors = new Set()) {
|
|
240
|
+
if (value === null)
|
|
241
|
+
return "null";
|
|
242
|
+
if (typeof value === "string" || typeof value === "boolean")
|
|
243
|
+
return JSON.stringify(value);
|
|
244
|
+
if (typeof value === "number") {
|
|
245
|
+
if (!Number.isFinite(value))
|
|
246
|
+
throw new Error("record contains a non-finite number");
|
|
247
|
+
return JSON.stringify(value);
|
|
248
|
+
}
|
|
249
|
+
if (Array.isArray(value)) {
|
|
250
|
+
if (ancestors.has(value))
|
|
251
|
+
throw new Error("record contains a cyclic value");
|
|
252
|
+
ancestors.add(value);
|
|
253
|
+
const serialized = `[${value.map((item) => canonicalJson(item, ancestors)).join(",")}]`;
|
|
254
|
+
ancestors.delete(value);
|
|
255
|
+
return serialized;
|
|
256
|
+
}
|
|
257
|
+
if (typeof value === "object") {
|
|
258
|
+
const object = value;
|
|
259
|
+
if (ancestors.has(object))
|
|
260
|
+
throw new Error("record contains a cyclic value");
|
|
261
|
+
ancestors.add(object);
|
|
262
|
+
const serialized = `{${Object.keys(object)
|
|
263
|
+
.sort()
|
|
264
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalJson(object[key], ancestors)}`)
|
|
265
|
+
.join(",")}}`;
|
|
266
|
+
ancestors.delete(object);
|
|
267
|
+
return serialized;
|
|
268
|
+
}
|
|
269
|
+
throw new Error("record contains a value that cannot be represented as canonical JSON");
|
|
270
|
+
}
|
|
271
|
+
export function canonicalRecordJson(value) {
|
|
272
|
+
return canonicalJson(value);
|
|
273
|
+
}
|
|
274
|
+
export function numberedArchiveContract(artifactId, sourceRoot = resolveSourceRoot()) {
|
|
275
|
+
const authority = loadAuthority(sourceRoot);
|
|
276
|
+
const artifact = authority.supportedArtifacts.get(artifactId);
|
|
277
|
+
if (!artifact)
|
|
278
|
+
throw new Error(`unsupported numbered archive artifact '${artifactId}'`);
|
|
279
|
+
return {
|
|
280
|
+
artifactId: artifact.artifactId,
|
|
281
|
+
entryCollection: artifact.entryCollection,
|
|
282
|
+
entryNumberField: artifact.entryNumberField,
|
|
283
|
+
archiveRoot: authority.archiveRoot,
|
|
284
|
+
archiveExtension: authority.archiveExtension,
|
|
285
|
+
entrySchemaVersion: authority.entrySchemaVersion,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
export function numberedArchiveArtifacts(sourceRoot = resolveSourceRoot()) {
|
|
289
|
+
return [...loadAuthority(sourceRoot).supportedArtifacts.keys()];
|
|
290
|
+
}
|
|
291
|
+
export function stateProjectionPolicy(sourceRoot = resolveSourceRoot()) {
|
|
292
|
+
return loadAuthority(sourceRoot).projection;
|
|
293
|
+
}
|
|
294
|
+
export function stateDurabilityContract(sourceRoot = resolveSourceRoot()) {
|
|
295
|
+
return loadAuthority(sourceRoot).durability;
|
|
296
|
+
}
|
|
297
|
+
export function stateCurrentProjectionPath(projectRoot, artifactId, sourceRoot = resolveSourceRoot()) {
|
|
298
|
+
const authority = loadAuthority(sourceRoot);
|
|
299
|
+
if (!authority.supportedArtifacts.has(artifactId)) {
|
|
300
|
+
throw new Error(`unsupported numbered archive artifact '${artifactId}'`);
|
|
301
|
+
}
|
|
302
|
+
const relative = authority.currentProjectionPaths.get(artifactId);
|
|
303
|
+
if (!relative)
|
|
304
|
+
throw new Error(`current projection path is undeclared for '${artifactId}'`);
|
|
305
|
+
return path.resolve(projectRoot, relative);
|
|
306
|
+
}
|
|
307
|
+
export function decisionOverlayContract(sourceRoot = resolveSourceRoot()) {
|
|
308
|
+
return loadAuthority(sourceRoot).decisionOverlay;
|
|
309
|
+
}
|
|
310
|
+
export function validateStateRecord(sourceRoot, artifactId, record) {
|
|
311
|
+
const authority = loadAuthority(sourceRoot);
|
|
312
|
+
const artifact = authority.supportedArtifacts.get(artifactId);
|
|
313
|
+
if (!artifact)
|
|
314
|
+
throw new Error(`unsupported numbered archive artifact '${artifactId}'`);
|
|
315
|
+
return validateRecordSchema(sourceRoot, artifact, record);
|
|
316
|
+
}
|
|
317
|
+
function positiveEntryNumber(value) {
|
|
318
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
319
|
+
}
|
|
320
|
+
function logicalNumber(name, extension) {
|
|
321
|
+
if (!name.endsWith(extension))
|
|
322
|
+
return null;
|
|
323
|
+
const stem = name.slice(0, -extension.length);
|
|
324
|
+
if (!/^[+0-9]+$/.test(stem) || !/[1-9]/.test(stem))
|
|
325
|
+
return null;
|
|
326
|
+
const value = Number(stem.replace(/^\+/, ""));
|
|
327
|
+
return Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
328
|
+
}
|
|
329
|
+
function validateRecordSchema(sourceRoot, artifact, record) {
|
|
330
|
+
const validator = new ArtifactSchemaValidator(path.join(sourceRoot, "skills", "agentera", "schemas", "artifacts"));
|
|
331
|
+
const schema = validator.loadSchema(artifact.artifactId);
|
|
332
|
+
if (schema === null)
|
|
333
|
+
return [`${artifact.artifactId}: schema is unavailable`];
|
|
334
|
+
return validator.validateYaml(dumpYamlMapping({ [artifact.entryCollection]: [record] }), schema, artifact.artifactId);
|
|
335
|
+
}
|
|
336
|
+
function validateCandidate(filePath, artifact, entryNumber, bytes, authority, sourceRoot, seenIds, retainRecords = true) {
|
|
337
|
+
let envelope;
|
|
338
|
+
try {
|
|
339
|
+
envelope = loadYamlMapping(bytes);
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
return rejection(filePath, "invalid_envelope", `cannot parse archive envelope: ${error.message}`);
|
|
343
|
+
}
|
|
344
|
+
const missing = [...authority.requiredEnvelopeFields].filter((field) => !(field in envelope));
|
|
345
|
+
if (missing.length > 0) {
|
|
346
|
+
return rejection(filePath, "invalid_envelope", `archive envelope is missing required fields: ${missing.join(", ")}`);
|
|
347
|
+
}
|
|
348
|
+
const forbidden = [...authority.forbiddenEnvelopeFields].filter((field) => field in envelope);
|
|
349
|
+
if (forbidden.length > 0) {
|
|
350
|
+
return rejection(filePath, "invalid_envelope", `archive envelope contains forbidden fields: ${forbidden.join(", ")}`);
|
|
351
|
+
}
|
|
352
|
+
if (envelope.schemaVersion !== authority.entrySchemaVersion) {
|
|
353
|
+
return rejection(filePath, "invalid_envelope", `schemaVersion must be ${authority.entrySchemaVersion}`);
|
|
354
|
+
}
|
|
355
|
+
if (envelope.artifact_id !== artifact.artifactId) {
|
|
356
|
+
return rejection(filePath, "invalid_envelope", "envelope artifact_id does not match its archive directory");
|
|
357
|
+
}
|
|
358
|
+
if (positiveEntryNumber(envelope.entry_number) !== entryNumber) {
|
|
359
|
+
return rejection(filePath, "invalid_envelope", "envelope entry_number does not match its filename");
|
|
360
|
+
}
|
|
361
|
+
if (!isMapping(envelope.record)) {
|
|
362
|
+
return rejection(filePath, "invalid_envelope", "envelope record must be a mapping");
|
|
363
|
+
}
|
|
364
|
+
const record = envelope.record;
|
|
365
|
+
if (positiveEntryNumber(record[artifact.entryNumberField]) !== entryNumber) {
|
|
366
|
+
return rejection(filePath, "invalid_envelope", "record entry number does not match its filename");
|
|
367
|
+
}
|
|
368
|
+
if (typeof envelope.record_sha256 !== "string" ||
|
|
369
|
+
!/^[0-9a-f]{64}$/.test(envelope.record_sha256)) {
|
|
370
|
+
return rejection(filePath, "invalid_envelope", "record_sha256 must be a lowercase 64-character SHA-256 digest");
|
|
371
|
+
}
|
|
372
|
+
let canonicalRecord;
|
|
373
|
+
try {
|
|
374
|
+
canonicalRecord = canonicalJson(record);
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
return rejection(filePath, "invalid_envelope", error.message);
|
|
378
|
+
}
|
|
379
|
+
const actualHash = createHash("sha256").update(canonicalRecord, "utf8").digest("hex");
|
|
380
|
+
if (actualHash !== envelope.record_sha256) {
|
|
381
|
+
return rejection(filePath, "hash_mismatch", "record_sha256 does not match the canonical record");
|
|
382
|
+
}
|
|
383
|
+
const stableId = `${artifact.artifactId}:${entryNumber}`;
|
|
384
|
+
if (seenIds.has(stableId)) {
|
|
385
|
+
return rejection(filePath, "duplicate_identity", `duplicate archive identity ${stableId}`);
|
|
386
|
+
}
|
|
387
|
+
const schemaViolations = validateRecordSchema(sourceRoot, artifact, record);
|
|
388
|
+
if (schemaViolations.length > 0) {
|
|
389
|
+
return rejection(filePath, "record_schema", schemaViolations.join("; "));
|
|
390
|
+
}
|
|
391
|
+
seenIds.add(stableId);
|
|
392
|
+
return {
|
|
393
|
+
path: filePath,
|
|
394
|
+
stableId,
|
|
395
|
+
artifactId: artifact.artifactId,
|
|
396
|
+
entryNumber,
|
|
397
|
+
...(retainRecords ? { envelope: envelope, record } : {}),
|
|
398
|
+
recordSha256: envelope.record_sha256,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Read one canonical archive path. Direct retrieval intentionally does not
|
|
403
|
+
* enumerate the archive directory or inspect unrelated historical records.
|
|
404
|
+
*/
|
|
405
|
+
export function readNumberedArchiveEntry(projectRoot, artifactId, entryNumber, options = {}) {
|
|
406
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
407
|
+
const authority = loadAuthority(sourceRoot);
|
|
408
|
+
const artifact = authority.supportedArtifacts.get(artifactId);
|
|
409
|
+
if (!artifact)
|
|
410
|
+
throw new Error(`unsupported numbered archive artifact '${artifactId}'`);
|
|
411
|
+
const resolvedProjectRoot = path.resolve(projectRoot);
|
|
412
|
+
const target = path.join(resolvedProjectRoot, authority.archiveRoot, artifactId, `${entryNumber}${authority.archiveExtension}`);
|
|
413
|
+
const issue = pathIssue(resolvedProjectRoot, target, "file");
|
|
414
|
+
if (issue)
|
|
415
|
+
return { path: target, rejection: rejection(target, issue.reason, issue.message) };
|
|
416
|
+
let stat;
|
|
417
|
+
try {
|
|
418
|
+
stat = fs.lstatSync(target);
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
if (error.code === "ENOENT")
|
|
422
|
+
return { path: target };
|
|
423
|
+
return {
|
|
424
|
+
path: target,
|
|
425
|
+
rejection: rejection(target, "read_failure", `cannot read archive record: ${error.message}`),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
if (!stat.isFile()) {
|
|
429
|
+
return {
|
|
430
|
+
path: target,
|
|
431
|
+
rejection: rejection(target, "unsafe_path", "archive record path is not a regular file"),
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
let bytes;
|
|
435
|
+
try {
|
|
436
|
+
bytes = fs.readFileSync(target, "utf8");
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
return {
|
|
440
|
+
path: target,
|
|
441
|
+
rejection: rejection(target, "read_failure", `cannot read archive record: ${error.message}`),
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
const result = validateCandidate(target, artifact, entryNumber, bytes, authority, sourceRoot, new Set(), true);
|
|
445
|
+
return "stableId" in result ? { path: target, entry: result } : { path: target, rejection: result };
|
|
446
|
+
}
|
|
447
|
+
function scanArtifactDirectory(projectRoot, sourceRoot, directory, artifact, authority, entries, rejected, seenIds, retainRecords) {
|
|
448
|
+
const directoryIssue = pathIssue(projectRoot, directory, "directory");
|
|
449
|
+
if (directoryIssue) {
|
|
450
|
+
rejected.push(rejection(directory, directoryIssue.reason, directoryIssue.message));
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
let names;
|
|
454
|
+
try {
|
|
455
|
+
names = fs.readdirSync(directory).sort();
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
rejected.push(rejection(directory, "read_failure", `cannot read archive artifact directory: ${error.message}`));
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
const logicalNumbers = new Map();
|
|
462
|
+
for (const name of names) {
|
|
463
|
+
const number = logicalNumber(name, authority.archiveExtension);
|
|
464
|
+
if (number === null)
|
|
465
|
+
continue;
|
|
466
|
+
const existing = logicalNumbers.get(number);
|
|
467
|
+
const canonicalName = `${number}${authority.archiveExtension}`;
|
|
468
|
+
if (existing === undefined || name === canonicalName)
|
|
469
|
+
logicalNumbers.set(number, name);
|
|
470
|
+
}
|
|
471
|
+
for (const name of names) {
|
|
472
|
+
const number = logicalNumber(name, authority.archiveExtension);
|
|
473
|
+
const canonicalName = number === null ? null : `${number}${authority.archiveExtension}`;
|
|
474
|
+
if (number !== null && logicalNumbers.get(number) !== name && logicalNumbers.has(number)) {
|
|
475
|
+
rejected.push(rejection(path.join(directory, name), "duplicate_identity", `multiple filenames identify ${artifact.artifactId}:${number}; only the canonical filename is eligible`));
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
const stem = name.endsWith(authority.archiveExtension)
|
|
479
|
+
? name.slice(0, -authority.archiveExtension.length)
|
|
480
|
+
: "";
|
|
481
|
+
if (!authority.entryNamePattern.test(stem)) {
|
|
482
|
+
rejected.push(rejection(path.join(directory, name), "malformed_name", `archive filename must be a positive decimal followed by ${authority.archiveExtension}`));
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
const entryNumber = Number(stem);
|
|
486
|
+
const filePath = path.join(directory, name);
|
|
487
|
+
if (!Number.isSafeInteger(entryNumber) || entryNumber <= 0 || canonicalName !== name) {
|
|
488
|
+
rejected.push(rejection(filePath, "malformed_name", `archive filename must use the canonical decimal form followed by ${authority.archiveExtension}`));
|
|
489
|
+
continue;
|
|
490
|
+
}
|
|
491
|
+
const fileIssue = pathIssue(projectRoot, filePath, "file");
|
|
492
|
+
if (fileIssue) {
|
|
493
|
+
rejected.push(rejection(filePath, fileIssue.reason, fileIssue.message));
|
|
494
|
+
continue;
|
|
495
|
+
}
|
|
496
|
+
let bytes;
|
|
497
|
+
try {
|
|
498
|
+
bytes = fs.readFileSync(filePath, "utf8");
|
|
499
|
+
}
|
|
500
|
+
catch (error) {
|
|
501
|
+
rejected.push(rejection(filePath, "read_failure", `cannot read archive record: ${error.message}`));
|
|
502
|
+
continue;
|
|
503
|
+
}
|
|
504
|
+
const result = validateCandidate(filePath, artifact, entryNumber, bytes, authority, sourceRoot, seenIds, retainRecords);
|
|
505
|
+
if ("path" in result && "stableId" in result)
|
|
506
|
+
entries.push(result);
|
|
507
|
+
else
|
|
508
|
+
rejected.push(result);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Discover immutable numbered state records without creating or modifying any
|
|
513
|
+
* project files. The fixed archive root and all validation rules come from the
|
|
514
|
+
* state-storage authority and the existing artifact schemas.
|
|
515
|
+
*/
|
|
516
|
+
export function discoverNumberedArchives(projectRoot, options = {}) {
|
|
517
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
518
|
+
const authority = loadAuthority(sourceRoot);
|
|
519
|
+
const resolvedProjectRoot = path.resolve(projectRoot);
|
|
520
|
+
const archiveRoot = path.join(resolvedProjectRoot, authority.archiveRoot);
|
|
521
|
+
const result = { archiveRoot, entries: [], rejected: [], ignored: [] };
|
|
522
|
+
const archiveRootIssue = pathIssue(resolvedProjectRoot, archiveRoot, "directory");
|
|
523
|
+
if (archiveRootIssue) {
|
|
524
|
+
result.rejected.push(rejection(archiveRoot, archiveRootIssue.reason, archiveRootIssue.message));
|
|
525
|
+
return result;
|
|
526
|
+
}
|
|
527
|
+
let rootStat;
|
|
528
|
+
try {
|
|
529
|
+
rootStat = fs.lstatSync(archiveRoot);
|
|
530
|
+
}
|
|
531
|
+
catch (error) {
|
|
532
|
+
if (error.code === "ENOENT")
|
|
533
|
+
return result;
|
|
534
|
+
result.rejected.push(rejection(archiveRoot, "read_failure", `cannot inspect archive root: ${error.message}`));
|
|
535
|
+
return result;
|
|
536
|
+
}
|
|
537
|
+
if (rootStat.isSymbolicLink()) {
|
|
538
|
+
result.rejected.push(rejection(archiveRoot, "symlink", "archive root is a symbolic link"));
|
|
539
|
+
return result;
|
|
540
|
+
}
|
|
541
|
+
if (!rootStat.isDirectory()) {
|
|
542
|
+
result.rejected.push(rejection(archiveRoot, "unsafe_path", "archive root is not a directory"));
|
|
543
|
+
return result;
|
|
544
|
+
}
|
|
545
|
+
let rootEntries;
|
|
546
|
+
try {
|
|
547
|
+
rootEntries = fs.readdirSync(archiveRoot, { withFileTypes: true });
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
result.rejected.push(rejection(archiveRoot, "read_failure", `cannot read archive root: ${error.message}`));
|
|
551
|
+
return result;
|
|
552
|
+
}
|
|
553
|
+
const seenIds = new Set();
|
|
554
|
+
for (const rootEntry of rootEntries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
555
|
+
const rootPath = path.join(archiveRoot, rootEntry.name);
|
|
556
|
+
if (authority.ignoredRootNames.has(rootEntry.name)) {
|
|
557
|
+
result.ignored.push(rootPath);
|
|
558
|
+
continue;
|
|
559
|
+
}
|
|
560
|
+
if (options.artifactId && rootEntry.name !== options.artifactId) {
|
|
561
|
+
result.ignored.push(rootPath);
|
|
562
|
+
continue;
|
|
563
|
+
}
|
|
564
|
+
const artifact = authority.supportedArtifacts.get(rootEntry.name);
|
|
565
|
+
if (!rootEntry.isDirectory()) {
|
|
566
|
+
if (artifact) {
|
|
567
|
+
const reason = rootEntry.isSymbolicLink() ? "symlink" : "unsafe_path";
|
|
568
|
+
result.rejected.push(rejection(rootPath, reason, rootEntry.isSymbolicLink()
|
|
569
|
+
? "archive artifact directory is a symbolic link"
|
|
570
|
+
: "archive artifact path is not a directory"));
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
result.ignored.push(rootPath);
|
|
574
|
+
}
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
if (!artifact) {
|
|
578
|
+
result.rejected.push(rejection(rootPath, "unsupported_artifact", `unsupported numbered archive directory '${rootEntry.name}'`, "unsupported_artifact"));
|
|
579
|
+
continue;
|
|
580
|
+
}
|
|
581
|
+
scanArtifactDirectory(resolvedProjectRoot, sourceRoot, rootPath, artifact, authority, result.entries, result.rejected, seenIds, options.retainRecords !== false);
|
|
582
|
+
}
|
|
583
|
+
result.entries.sort((a, b) => b.entryNumber - a.entryNumber || a.stableId.localeCompare(b.stableId));
|
|
584
|
+
return result;
|
|
585
|
+
}
|
|
586
|
+
export function stateStorageAuthorityPath(sourceRoot = resolveSourceRoot()) {
|
|
587
|
+
return path.join(sourceRoot, AUTHORITY_RELATIVE_PATH);
|
|
588
|
+
}
|
|
589
|
+
//# sourceMappingURL=archiveDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archiveDiscovery.js","sourceRoot":"","sources":["../../src/state/archiveDiscovery.ts"],"names":[],"mappings":"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"}
|