agentera 3.0.0-dev.5 → 3.0.0-dev.6
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 +4 -3
- package/bundle/references/adapters/opencode.md +1 -1
- package/bundle/references/adapters/package-registry.yaml +0 -1
- package/bundle/references/adapters/package-surface-characterization.md +1 -2
- package/bundle/references/analysis/startup-measurement-contract.yaml +11 -11
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +40 -26
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +1 -29
- package/bundle/references/cli/coexistence-probe.yaml +9 -0
- package/bundle/references/cli/single-name-protocol.yaml +42 -0
- package/bundle/references/cli/update-channels.yaml +1 -0
- package/bundle/references/cli/upgrade-repair-wording.md +31 -0
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
- package/bundle/references/cli/vocabulary.md +12 -10
- package/bundle/references/meta/documentation-inventory.md +9 -3
- package/bundle/skills/agentera/SKILL.md +14 -14
- package/dist/analytics/extractCorpus/cli.js +101 -0
- package/dist/analytics/extractCorpus/cli.js.map +1 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +231 -0
- package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/core.js +357 -0
- package/dist/analytics/extractCorpus/core.js.map +1 -0
- package/dist/analytics/extractCorpus/corpus.js +132 -0
- package/dist/analytics/extractCorpus/corpus.js.map +1 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +420 -0
- package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +122 -0
- package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
- package/dist/analytics/extractCorpus/index.js +9 -0
- package/dist/analytics/extractCorpus/index.js.map +1 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +185 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +275 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
- package/dist/analytics/extractCorpus.js +2 -1790
- package/dist/analytics/extractCorpus.js.map +1 -1
- package/dist/analytics/usageStats.js +1 -1
- package/dist/analytics/usageStats.js.map +1 -1
- package/dist/cli/capabilityContext/benchmark.js +557 -0
- package/dist/cli/capabilityContext/benchmark.js.map +1 -0
- package/dist/cli/capabilityContext/bespoke.js +25 -0
- package/dist/cli/capabilityContext/bespoke.js.map +1 -0
- package/dist/cli/capabilityContext/closeout.js +230 -0
- package/dist/cli/capabilityContext/closeout.js.map +1 -0
- package/dist/cli/capabilityContext/contract.js +186 -0
- package/dist/cli/capabilityContext/contract.js.map +1 -0
- package/dist/cli/capabilityContext/evidence.js +446 -0
- package/dist/cli/capabilityContext/evidence.js.map +1 -0
- package/dist/cli/capabilityContext/index.js +4 -0
- package/dist/cli/capabilityContext/index.js.map +1 -0
- package/dist/cli/capabilityContext/orchestration.js +107 -0
- package/dist/cli/capabilityContext/orchestration.js.map +1 -0
- package/dist/cli/capabilityContext/planState.js +271 -0
- package/dist/cli/capabilityContext/planState.js.map +1 -0
- package/dist/cli/capabilityContext/progress.js +96 -0
- package/dist/cli/capabilityContext/progress.js.map +1 -0
- package/dist/cli/capabilityContext/realisera.js +174 -0
- package/dist/cli/capabilityContext/realisera.js.map +1 -0
- package/dist/cli/capabilityContext/shared.js +94 -0
- package/dist/cli/capabilityContext/shared.js.map +1 -0
- package/dist/cli/capabilityContext/slim.js +106 -0
- package/dist/cli/capabilityContext/slim.js.map +1 -0
- package/dist/cli/capabilityContext/startup.js +208 -0
- package/dist/cli/capabilityContext/startup.js.map +1 -0
- package/dist/cli/capabilityContext/types.js +43 -0
- package/dist/cli/capabilityContext/types.js.map +1 -0
- package/dist/cli/capabilityContext.js +1 -2486
- package/dist/cli/capabilityContext.js.map +1 -1
- package/dist/cli/commands/backfill.js +84 -0
- package/dist/cli/commands/backfill.js.map +1 -0
- package/dist/cli/commands/compact.js +1 -1
- package/dist/cli/commands/compact.js.map +1 -1
- package/dist/cli/commands/doctor.js +24 -7
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/lint.js +4 -36
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/query.js +1 -1
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/report.js +11 -2
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/schema.js +1 -2
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/state/decisions.js +397 -0
- package/dist/cli/commands/state/decisions.js.map +1 -0
- package/dist/cli/commands/state/docs.js +93 -0
- package/dist/cli/commands/state/docs.js.map +1 -0
- package/dist/cli/commands/state/experiments.js +67 -0
- package/dist/cli/commands/state/experiments.js.map +1 -0
- package/dist/cli/commands/state/health.js +114 -0
- package/dist/cli/commands/state/health.js.map +1 -0
- package/dist/cli/commands/state/index.js +51 -0
- package/dist/cli/commands/state/index.js.map +1 -0
- package/dist/cli/commands/state/objective.js +68 -0
- package/dist/cli/commands/state/objective.js.map +1 -0
- package/dist/cli/commands/state/plan.js +172 -0
- package/dist/cli/commands/state/plan.js.map +1 -0
- package/dist/cli/commands/state/progress.js +47 -0
- package/dist/cli/commands/state/progress.js.map +1 -0
- package/dist/cli/commands/state/shared.js +15 -0
- package/dist/cli/commands/state/shared.js.map +1 -0
- package/dist/cli/commands/state/todo.js +121 -0
- package/dist/cli/commands/state/todo.js.map +1 -0
- package/dist/cli/commands/state.js +7 -7
- package/dist/cli/commands/state.js.map +1 -1
- package/dist/cli/commands/validate.js +32 -18
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/dispatch/check.js +328 -0
- package/dist/cli/dispatch/check.js.map +1 -0
- package/dist/cli/dispatch/index.js +177 -0
- package/dist/cli/dispatch/index.js.map +1 -0
- package/dist/cli/dispatch/lifecycle.js +492 -0
- package/dist/cli/dispatch/lifecycle.js.map +1 -0
- package/dist/cli/dispatch/prime.js +100 -0
- package/dist/cli/dispatch/prime.js.map +1 -0
- package/dist/cli/dispatch/shared.js +64 -0
- package/dist/cli/dispatch/shared.js.map +1 -0
- package/dist/cli/dispatch/state.js +149 -0
- package/dist/cli/dispatch/state.js.map +1 -0
- package/dist/cli/dispatch.js +1 -1293
- package/dist/cli/dispatch.js.map +1 -1
- package/dist/cli/help.js +0 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/orientation.js +1 -1
- package/dist/cli/orientation.js.map +1 -1
- package/dist/core/git.js +43 -0
- package/dist/core/git.js.map +1 -0
- package/dist/hooks/common.js +8 -23
- package/dist/hooks/common.js.map +1 -1
- package/dist/hooks/compaction/apply.js +244 -0
- package/dist/hooks/compaction/apply.js.map +1 -0
- package/dist/hooks/compaction/dryRun.js +181 -0
- package/dist/hooks/compaction/dryRun.js.map +1 -0
- package/dist/hooks/compaction/index.js +23 -0
- package/dist/hooks/compaction/index.js.map +1 -0
- package/dist/hooks/compaction/parse.js +129 -0
- package/dist/hooks/compaction/parse.js.map +1 -0
- package/dist/hooks/compaction/retention.js +197 -0
- package/dist/hooks/compaction/retention.js.map +1 -0
- package/dist/hooks/compaction/status.js +243 -0
- package/dist/hooks/compaction/status.js.map +1 -0
- package/dist/hooks/compaction/types.js +6 -0
- package/dist/hooks/compaction/types.js.map +1 -0
- package/dist/hooks/compaction.js +20 -20
- package/dist/hooks/compaction.js.map +1 -1
- package/dist/hooks/cursorPreToolUse.js +1 -1
- package/dist/hooks/cursorPreToolUse.js.map +1 -1
- package/dist/hooks/sessionStart.js +4 -4
- package/dist/hooks/sessionStart.js.map +1 -1
- package/dist/hooks/sessionStop.js +3 -12
- package/dist/hooks/sessionStop.js.map +1 -1
- package/dist/hooks/validateArtifact/agentFacing.js +10 -0
- package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
- package/dist/hooks/validateArtifact/index.js +149 -0
- package/dist/hooks/validateArtifact/index.js.map +1 -0
- package/dist/hooks/validateArtifact/markdown.js +95 -0
- package/dist/hooks/validateArtifact/markdown.js.map +1 -0
- package/dist/hooks/validateArtifact/runtime.js +83 -0
- package/dist/hooks/validateArtifact/runtime.js.map +1 -0
- package/dist/hooks/validateArtifact/schema.js +455 -0
- package/dist/hooks/validateArtifact/schema.js.map +1 -0
- package/dist/hooks/validateArtifact/traversal.js +105 -0
- package/dist/hooks/validateArtifact/traversal.js.map +1 -0
- package/dist/hooks/validateArtifact/violations.js +105 -0
- package/dist/hooks/validateArtifact/violations.js.map +1 -0
- package/dist/hooks/validateArtifact.js +29 -40
- package/dist/hooks/validateArtifact.js.map +1 -1
- package/dist/migrate/v2HandoffManifest.js +333 -0
- package/dist/migrate/v2HandoffManifest.js.map +1 -0
- package/dist/registries/artifactProtocolIds.js +77 -0
- package/dist/registries/artifactProtocolIds.js.map +1 -0
- package/dist/release/releaseMetadata.js +235 -0
- package/dist/release/releaseMetadata.js.map +1 -0
- package/dist/setup/codex/agents.js +96 -0
- package/dist/setup/codex/agents.js.map +1 -0
- package/dist/setup/codex/cli.js +161 -0
- package/dist/setup/codex/cli.js.map +1 -0
- package/dist/setup/codex/configToml.js +644 -0
- package/dist/setup/codex/configToml.js.map +1 -0
- package/dist/setup/codex/constants.js +29 -0
- package/dist/setup/codex/constants.js.map +1 -0
- package/dist/setup/codex/installRoot.js +64 -0
- package/dist/setup/codex/installRoot.js.map +1 -0
- package/dist/setup/codex/state.js +270 -0
- package/dist/setup/codex/state.js.map +1 -0
- package/dist/setup/codex.js +11 -1196
- package/dist/setup/codex.js.map +1 -1
- package/dist/setup/doctor/core.js +300 -0
- package/dist/setup/doctor/core.js.map +1 -0
- package/dist/setup/doctor/diagnostics.js +247 -0
- package/dist/setup/doctor/diagnostics.js.map +1 -0
- package/dist/setup/doctor/opencode.js +281 -0
- package/dist/setup/doctor/opencode.js.map +1 -0
- package/dist/setup/doctor/report.js +474 -0
- package/dist/setup/doctor/report.js.map +1 -0
- package/dist/setup/doctor.js +9 -1296
- package/dist/setup/doctor.js.map +1 -1
- package/dist/setup/opencode.js +13 -0
- package/dist/setup/opencode.js.map +1 -0
- package/dist/setup/smokeChecks.js +1 -1
- package/dist/setup/smokeChecks.js.map +1 -1
- package/dist/state/progressCommit.js +289 -0
- package/dist/state/progressCommit.js.map +1 -0
- package/dist/state/startupAnalysis/benchmark.js +367 -0
- package/dist/state/startupAnalysis/benchmark.js.map +1 -0
- package/dist/state/startupAnalysis/contract.js +122 -0
- package/dist/state/startupAnalysis/contract.js.map +1 -0
- package/dist/state/startupAnalysis/helpers.js +332 -0
- package/dist/state/startupAnalysis/helpers.js.map +1 -0
- package/dist/state/startupAnalysis/index.js +7 -0
- package/dist/state/startupAnalysis/index.js.map +1 -0
- package/dist/state/startupAnalysis/metrics.js +334 -0
- package/dist/state/startupAnalysis/metrics.js.map +1 -0
- package/dist/state/startupAnalysis/records.js +195 -0
- package/dist/state/startupAnalysis/records.js.map +1 -0
- package/dist/state/startupAnalysis/report.js +123 -0
- package/dist/state/startupAnalysis/report.js.map +1 -0
- package/dist/state/startupAnalysis/threshold.js +500 -0
- package/dist/state/startupAnalysis/threshold.js.map +1 -0
- package/dist/state/startupAnalysis.js +2 -1952
- package/dist/state/startupAnalysis.js.map +1 -1
- package/dist/upgrade/coexistenceProbe.js +83 -0
- package/dist/upgrade/coexistenceProbe.js.map +1 -0
- package/dist/upgrade/doctor.js +41 -2
- package/dist/upgrade/doctor.js.map +1 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js +5 -83
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
- package/dist/upgrade/nextMajorDoctor.js +16 -1
- package/dist/upgrade/nextMajorDoctor.js.map +1 -1
- package/dist/upgrade/projectIntegration.js +3 -1
- package/dist/upgrade/projectIntegration.js.map +1 -1
- package/dist/upgrade/runtimeMigration.js +13 -2
- package/dist/upgrade/runtimeMigration.js.map +1 -1
- package/dist/upgrade/v3CapabilitySurface.js +15 -0
- package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
- package/dist/upgrade/versionResolution.js +8 -0
- package/dist/upgrade/versionResolution.js.map +1 -1
- package/dist/validate/appHomeContract.js +3 -3
- package/dist/validate/appHomeContract.js.map +1 -1
- package/dist/validate/selfAudit.js +62 -20
- package/dist/validate/selfAudit.js.map +1 -1
- package/dist/validate/vocabularyAuthority.js +298 -0
- package/dist/validate/vocabularyAuthority.js.map +1 -0
- package/package.json +3 -3
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retention primitives for compaction: stable sort, recent-vs-older
|
|
3
|
+
* partitioning, archive sorting, and decision-specific entry
|
|
4
|
+
* selection (satisfaction-aware). The pure helpers here are reused
|
|
5
|
+
* by `apply.ts` (which writes the compacted result back to disk)
|
|
6
|
+
* and by `status.ts` (which counts overflow without writing).
|
|
7
|
+
*/
|
|
8
|
+
import { MAX_FULL_ENTRIES, MAX_ONELINE_ENTRIES, applyRetentionCaps } from "../common.js";
|
|
9
|
+
import { truncateWords } from "./dryRun.js";
|
|
10
|
+
export function overLimitCount(activeCount, archiveCount) {
|
|
11
|
+
const totalCount = activeCount + archiveCount;
|
|
12
|
+
return Math.max(Math.max(activeCount - MAX_FULL_ENTRIES, 0), Math.max(archiveCount - MAX_ONELINE_ENTRIES, 0), Math.max(totalCount - 50, 0));
|
|
13
|
+
}
|
|
14
|
+
export function stableSortBy(arr, key, reverse = false) {
|
|
15
|
+
return arr
|
|
16
|
+
.map((x, i) => [x, i])
|
|
17
|
+
.sort((a, b) => {
|
|
18
|
+
const ka = key(a[0]);
|
|
19
|
+
const kb = key(b[0]);
|
|
20
|
+
let cmp = ka < kb ? -1 : ka > kb ? 1 : 0;
|
|
21
|
+
if (reverse)
|
|
22
|
+
cmp = -cmp;
|
|
23
|
+
return cmp !== 0 ? cmp : a[1] - b[1];
|
|
24
|
+
})
|
|
25
|
+
.map(([x]) => x);
|
|
26
|
+
}
|
|
27
|
+
export function yamlEntryNumber(entry) {
|
|
28
|
+
let summary;
|
|
29
|
+
if (entry && typeof entry === "object" && !Array.isArray(entry)) {
|
|
30
|
+
const number = entry.number;
|
|
31
|
+
if (typeof number === "number" && Number.isInteger(number))
|
|
32
|
+
return number;
|
|
33
|
+
if (typeof number === "string" && /^\d+$/.test(number))
|
|
34
|
+
return parseInt(number, 10);
|
|
35
|
+
summary = String(entry.summary ?? "");
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
summary = String(entry);
|
|
39
|
+
}
|
|
40
|
+
const match = /(?:Cycle|Decision|Audit|Experiment|EXP-)\s*(\d+)/.exec(summary);
|
|
41
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
42
|
+
}
|
|
43
|
+
function yamlEntryTimestamp(entry) {
|
|
44
|
+
if (entry && typeof entry === "object" && !Array.isArray(entry)) {
|
|
45
|
+
return String(entry.timestamp || entry.date || "");
|
|
46
|
+
}
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
function yamlSummaryText(entry, ...fields) {
|
|
50
|
+
for (const field of fields) {
|
|
51
|
+
const value = entry[field];
|
|
52
|
+
if (typeof value === "string" && value.trim()) {
|
|
53
|
+
return truncateWords(value.trim(), 15);
|
|
54
|
+
}
|
|
55
|
+
if (value && typeof value === "object" && !Array.isArray(value) && Object.keys(value).length > 0) {
|
|
56
|
+
return truncateWords(Object.entries(value).map(([k, v]) => `${k}: ${v}`).join(", "), 15);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return "no summary";
|
|
60
|
+
}
|
|
61
|
+
function isEmptyish(v) {
|
|
62
|
+
return (v === null ||
|
|
63
|
+
v === undefined ||
|
|
64
|
+
v === "" ||
|
|
65
|
+
(Array.isArray(v) && v.length === 0) ||
|
|
66
|
+
(typeof v === "object" && v !== null && !Array.isArray(v) && Object.keys(v).length === 0));
|
|
67
|
+
}
|
|
68
|
+
export function yamlArchiveEntry(specName, entry) {
|
|
69
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
70
|
+
return { summary: String(entry) };
|
|
71
|
+
}
|
|
72
|
+
const e = entry;
|
|
73
|
+
if (specName === "progress") {
|
|
74
|
+
const number = e.number ?? "?";
|
|
75
|
+
const date = String(e.timestamp ?? "").split(/\s+/)[0] || "";
|
|
76
|
+
const datePart = date ? ` (${date})` : "";
|
|
77
|
+
const summary = yamlSummaryText(e, "what", "type");
|
|
78
|
+
return { summary: `Cycle ${number}${datePart}: ${summary}` };
|
|
79
|
+
}
|
|
80
|
+
if (specName === "decisions") {
|
|
81
|
+
const number = e.number ?? "?";
|
|
82
|
+
const date = String(e.date ?? "");
|
|
83
|
+
const datePart = date ? ` (${date})` : "";
|
|
84
|
+
const choice = yamlSummaryText(e, "choice", "question");
|
|
85
|
+
const archiveEntry = { summary: `Decision ${number}${datePart}: ${choice}` };
|
|
86
|
+
for (const field of ["number", "date", "choice", "outcome", "feeds_into", "satisfaction"]) {
|
|
87
|
+
const value = e[field];
|
|
88
|
+
if (!isEmptyish(value))
|
|
89
|
+
archiveEntry[field] = value;
|
|
90
|
+
}
|
|
91
|
+
if (!("outcome" in archiveEntry) && !isEmptyish(archiveEntry.choice)) {
|
|
92
|
+
archiveEntry.outcome = archiveEntry.choice;
|
|
93
|
+
}
|
|
94
|
+
return archiveEntry;
|
|
95
|
+
}
|
|
96
|
+
if (specName === "health") {
|
|
97
|
+
const number = e.number ?? "?";
|
|
98
|
+
const date = String(e.date ?? "");
|
|
99
|
+
const datePart = date ? ` (${date})` : "";
|
|
100
|
+
const summary = yamlSummaryText(e, "trajectory", "grades");
|
|
101
|
+
return { summary: `Audit ${number}${datePart}: ${summary}` };
|
|
102
|
+
}
|
|
103
|
+
if (specName === "session") {
|
|
104
|
+
return { timestamp: String(e.timestamp ?? ""), summary: yamlSummaryText(e, "summary") };
|
|
105
|
+
}
|
|
106
|
+
return { summary: yamlSummaryText(e, "summary") };
|
|
107
|
+
}
|
|
108
|
+
export function yamlSortEntries(entries, specName) {
|
|
109
|
+
if (specName === "decisions" || specName === "health") {
|
|
110
|
+
return stableSortBy(entries, yamlEntryNumber);
|
|
111
|
+
}
|
|
112
|
+
if (specName === "session") {
|
|
113
|
+
return stableSortBy(entries, yamlEntryTimestamp, true);
|
|
114
|
+
}
|
|
115
|
+
return stableSortBy(entries, yamlEntryNumber, true);
|
|
116
|
+
}
|
|
117
|
+
export function yamlRecentFullAndOlder(entries, specName) {
|
|
118
|
+
const newestFirst = specName === "session"
|
|
119
|
+
? stableSortBy(entries, yamlEntryTimestamp, true)
|
|
120
|
+
: stableSortBy(entries, yamlEntryNumber, true);
|
|
121
|
+
const recent = newestFirst.slice(0, MAX_FULL_ENTRIES);
|
|
122
|
+
const older = newestFirst.slice(MAX_FULL_ENTRIES);
|
|
123
|
+
return [yamlSortEntries(recent, specName), older];
|
|
124
|
+
}
|
|
125
|
+
function yamlArchiveSortKey(entry) {
|
|
126
|
+
const timestamp = yamlEntryTimestamp(entry);
|
|
127
|
+
if (timestamp)
|
|
128
|
+
return ["timestamp", timestamp];
|
|
129
|
+
return ["number", yamlEntryNumber(entry)];
|
|
130
|
+
}
|
|
131
|
+
export function yamlArchiveEntries(entries) {
|
|
132
|
+
// Sort by (tag, value) descending, mirroring Python tuple comparison.
|
|
133
|
+
return entries
|
|
134
|
+
.map((x, i) => [x, i])
|
|
135
|
+
.sort((a, b) => {
|
|
136
|
+
const ka = yamlArchiveSortKey(a[0]);
|
|
137
|
+
const kb = yamlArchiveSortKey(b[0]);
|
|
138
|
+
let cmp = 0;
|
|
139
|
+
if (ka[0] !== kb[0])
|
|
140
|
+
cmp = ka[0] < kb[0] ? -1 : 1;
|
|
141
|
+
else
|
|
142
|
+
cmp = ka[1] < kb[1] ? -1 : ka[1] > kb[1] ? 1 : 0;
|
|
143
|
+
cmp = -cmp;
|
|
144
|
+
return cmp !== 0 ? cmp : a[1] - b[1];
|
|
145
|
+
})
|
|
146
|
+
.map(([x]) => x);
|
|
147
|
+
}
|
|
148
|
+
function decisionSatisfactionState(entry) {
|
|
149
|
+
if (!entry || typeof entry !== "object")
|
|
150
|
+
return null;
|
|
151
|
+
const satisfaction = entry.satisfaction;
|
|
152
|
+
if (!satisfaction || typeof satisfaction !== "object")
|
|
153
|
+
return null;
|
|
154
|
+
const state = satisfaction.state;
|
|
155
|
+
return typeof state === "string" ? state : null;
|
|
156
|
+
}
|
|
157
|
+
function decisionRequiresUserReview(entry) {
|
|
158
|
+
if (!entry || typeof entry !== "object")
|
|
159
|
+
return true;
|
|
160
|
+
const satisfaction = entry.satisfaction;
|
|
161
|
+
if (!satisfaction || typeof satisfaction !== "object")
|
|
162
|
+
return true;
|
|
163
|
+
const confirmation = satisfaction.user_confirmation;
|
|
164
|
+
return (decisionSatisfactionState(entry) !== "user_confirmed_satisfied" ||
|
|
165
|
+
!confirmation ||
|
|
166
|
+
typeof confirmation !== "object" ||
|
|
167
|
+
Object.keys(confirmation).length === 0);
|
|
168
|
+
}
|
|
169
|
+
export function decisionProtectedOverflowCount(active, archive) {
|
|
170
|
+
const protectedActive = active.filter((e) => decisionRequiresUserReview(e)).length;
|
|
171
|
+
const protectedArchive = archive.filter((e) => decisionRequiresUserReview(e)).length;
|
|
172
|
+
return Math.max(protectedActive - MAX_FULL_ENTRIES, protectedArchive - MAX_ONELINE_ENTRIES, protectedActive + protectedArchive - 50, 0);
|
|
173
|
+
}
|
|
174
|
+
export function selectDecisionActiveEntries(active) {
|
|
175
|
+
const protectedEntries = active.filter((e) => decisionRequiresUserReview(e));
|
|
176
|
+
if (protectedEntries.length > MAX_FULL_ENTRIES) {
|
|
177
|
+
throw new Error("decisions: protected-overflow review pressure; " +
|
|
178
|
+
`${protectedEntries.length} protected active decision(s) exceed ${MAX_FULL_ENTRIES} full-detail slots`);
|
|
179
|
+
}
|
|
180
|
+
const satisfied = active.filter((e) => !decisionRequiresUserReview(e));
|
|
181
|
+
const newestSatisfied = stableSortBy(satisfied, yamlEntryNumber, true);
|
|
182
|
+
const keepSatisfied = newestSatisfied.slice(0, MAX_FULL_ENTRIES - protectedEntries.length);
|
|
183
|
+
const compactSatisfied = newestSatisfied.slice(MAX_FULL_ENTRIES - protectedEntries.length);
|
|
184
|
+
return [yamlSortEntries([...protectedEntries, ...keepSatisfied], "decisions"), compactSatisfied];
|
|
185
|
+
}
|
|
186
|
+
export function selectDecisionArchiveEntries(archiveCandidates) {
|
|
187
|
+
const protectedEntries = archiveCandidates.filter((e) => decisionRequiresUserReview(e));
|
|
188
|
+
if (protectedEntries.length > MAX_ONELINE_ENTRIES) {
|
|
189
|
+
throw new Error("decisions: protected-overflow review pressure; " +
|
|
190
|
+
`${protectedEntries.length} protected archived decision(s) exceed ${MAX_ONELINE_ENTRIES} archive slots`);
|
|
191
|
+
}
|
|
192
|
+
const satisfied = archiveCandidates.filter((e) => !decisionRequiresUserReview(e));
|
|
193
|
+
const keepSatisfied = yamlArchiveEntries(satisfied).slice(0, MAX_ONELINE_ENTRIES - protectedEntries.length);
|
|
194
|
+
return yamlArchiveEntries([...protectedEntries, ...keepSatisfied]);
|
|
195
|
+
}
|
|
196
|
+
export { applyRetentionCaps };
|
|
197
|
+
//# sourceMappingURL=retention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/hooks/compaction/retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compaction status reporting (read-only).
|
|
3
|
+
*
|
|
4
|
+
* Walks each tracked artifact path, counts active/archive entries, and
|
|
5
|
+
* builds a `CompactionStatus` per artifact plus a per-status operation
|
|
6
|
+
* row in `checkCompaction`/`fixCompaction`. The `fixCompaction` path
|
|
7
|
+
* delegates the actual write to `apply.ts`.
|
|
8
|
+
*/
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import { DEFAULT_ARTIFACT_PATHS, parseDocsYamlMapping } from "../common.js";
|
|
12
|
+
import { loadYamlMapping } from "../../core/yaml.js";
|
|
13
|
+
import { COMPACTABLE_YAML_ARTIFACTS, NON_COMPACTABLE_ARTIFACTS } from "./dryRun.js";
|
|
14
|
+
import { decisionProtectedOverflowCount, overLimitCount, yamlArchiveEntries, } from "./retention.js";
|
|
15
|
+
import { compactFile, compactYamlFile } from "./apply.js";
|
|
16
|
+
import { parseEntries } from "./parse.js";
|
|
17
|
+
import { YAML_SPEC_BY_ARTIFACT } from "./dryRun.js";
|
|
18
|
+
function artifactPaths(projectRoot) {
|
|
19
|
+
const paths = { ...DEFAULT_ARTIFACT_PATHS };
|
|
20
|
+
const docsPath = path.join(projectRoot, ".agentera", "docs.yaml");
|
|
21
|
+
if (fs.existsSync(docsPath)) {
|
|
22
|
+
Object.assign(paths, parseDocsYamlMapping(fs.readFileSync(docsPath, "utf8")));
|
|
23
|
+
}
|
|
24
|
+
const resolved = {};
|
|
25
|
+
for (const [artifact, rel] of Object.entries(paths)) {
|
|
26
|
+
resolved[artifact] = path.join(projectRoot, rel);
|
|
27
|
+
}
|
|
28
|
+
return resolved;
|
|
29
|
+
}
|
|
30
|
+
function missingStatus(artifact, p, classification) {
|
|
31
|
+
return {
|
|
32
|
+
artifact,
|
|
33
|
+
path: p,
|
|
34
|
+
classification,
|
|
35
|
+
active_count: 0,
|
|
36
|
+
archive_count: 0,
|
|
37
|
+
total_count: 0,
|
|
38
|
+
over_limit_count: 0,
|
|
39
|
+
reason: "artifact path is not present",
|
|
40
|
+
protected_overflow_count: 0,
|
|
41
|
+
exists: false,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function yamlErrorStatus(artifact, p, message) {
|
|
45
|
+
return {
|
|
46
|
+
artifact,
|
|
47
|
+
path: p,
|
|
48
|
+
classification: "error",
|
|
49
|
+
active_count: null,
|
|
50
|
+
archive_count: null,
|
|
51
|
+
total_count: null,
|
|
52
|
+
over_limit_count: null,
|
|
53
|
+
reason: message.trim() || "invalid YAML mapping root",
|
|
54
|
+
protected_overflow_count: 0,
|
|
55
|
+
exists: true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function yamlCounts(p, activeKey, archiveKey) {
|
|
59
|
+
const data = loadYamlMapping(fs.readFileSync(p, "utf8"));
|
|
60
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
61
|
+
return [0, 0];
|
|
62
|
+
const active = data[activeKey] || [];
|
|
63
|
+
const archive = data[archiveKey] || [];
|
|
64
|
+
return [Array.isArray(active) ? active.length : 0, Array.isArray(archive) ? archive.length : 0];
|
|
65
|
+
}
|
|
66
|
+
function yamlLists(p, activeKey, archiveKey) {
|
|
67
|
+
const data = loadYamlMapping(fs.readFileSync(p, "utf8"));
|
|
68
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
69
|
+
return [[], []];
|
|
70
|
+
const active = data[activeKey] || [];
|
|
71
|
+
const archive = data[archiveKey] || [];
|
|
72
|
+
return [Array.isArray(active) ? active : [], Array.isArray(archive) ? archive : []];
|
|
73
|
+
}
|
|
74
|
+
function countStatus(artifact, p, activeCount, archiveCount, protectedOverflowCount = 0) {
|
|
75
|
+
const totalCount = activeCount + archiveCount;
|
|
76
|
+
return {
|
|
77
|
+
artifact,
|
|
78
|
+
path: p,
|
|
79
|
+
classification: "compactable",
|
|
80
|
+
active_count: activeCount,
|
|
81
|
+
archive_count: archiveCount,
|
|
82
|
+
total_count: totalCount,
|
|
83
|
+
over_limit_count: overLimitCount(activeCount, archiveCount),
|
|
84
|
+
reason: protectedOverflowCount ? "protected-overflow review pressure" : "uniform_10_40_50",
|
|
85
|
+
protected_overflow_count: protectedOverflowCount,
|
|
86
|
+
exists: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function computeCompactionStatus(projectRoot) {
|
|
90
|
+
const paths = artifactPaths(projectRoot);
|
|
91
|
+
const statuses = [];
|
|
92
|
+
const todoPath = paths.todo;
|
|
93
|
+
if (fs.existsSync(todoPath)) {
|
|
94
|
+
const entries = parseEntries(fs.readFileSync(todoPath, "utf8"), "todo-resolved");
|
|
95
|
+
const activeCount = entries.filter((e) => e.kind === "full").length;
|
|
96
|
+
const archiveCount = entries.filter((e) => e.kind === "oneline").length;
|
|
97
|
+
statuses.push(countStatus("todo#Resolved", todoPath, activeCount, archiveCount));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
statuses.push(missingStatus("todo#Resolved", todoPath, "compactable"));
|
|
101
|
+
}
|
|
102
|
+
for (const [artifact, [activeKey, archiveKey]] of Object.entries(COMPACTABLE_YAML_ARTIFACTS)) {
|
|
103
|
+
const p = paths[artifact];
|
|
104
|
+
if (fs.existsSync(p)) {
|
|
105
|
+
let active;
|
|
106
|
+
let archive;
|
|
107
|
+
try {
|
|
108
|
+
[active, archive] = yamlLists(p, activeKey, archiveKey);
|
|
109
|
+
}
|
|
110
|
+
catch (exc) {
|
|
111
|
+
statuses.push(yamlErrorStatus(artifact, p, exc.message));
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const protectedOverflowCount = artifact === "decisions" ? decisionProtectedOverflowCount(active, archive) : 0;
|
|
115
|
+
statuses.push(countStatus(artifact, p, active.length, archive.length, protectedOverflowCount));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
statuses.push(missingStatus(artifact, p, "compactable"));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const [artifact, [classification, reason]] of Object.entries(NON_COMPACTABLE_ARTIFACTS)) {
|
|
122
|
+
const p = paths[artifact];
|
|
123
|
+
statuses.push({
|
|
124
|
+
artifact,
|
|
125
|
+
path: p,
|
|
126
|
+
classification,
|
|
127
|
+
active_count: null,
|
|
128
|
+
archive_count: null,
|
|
129
|
+
total_count: null,
|
|
130
|
+
over_limit_count: null,
|
|
131
|
+
reason,
|
|
132
|
+
protected_overflow_count: 0,
|
|
133
|
+
exists: fs.existsSync(p),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const optimeraDir = path.join(projectRoot, ".agentera", "optimera");
|
|
137
|
+
if (fs.existsSync(optimeraDir) && fs.statSync(optimeraDir).isDirectory()) {
|
|
138
|
+
const experimentPaths = [];
|
|
139
|
+
for (const sub of fs.readdirSync(optimeraDir).sort()) {
|
|
140
|
+
const expPath = path.join(optimeraDir, sub, "experiments.yaml");
|
|
141
|
+
if (fs.existsSync(expPath))
|
|
142
|
+
experimentPaths.push(expPath);
|
|
143
|
+
}
|
|
144
|
+
for (const expPath of experimentPaths) {
|
|
145
|
+
let activeCount;
|
|
146
|
+
let archiveCount;
|
|
147
|
+
try {
|
|
148
|
+
[activeCount, archiveCount] = yamlCounts(expPath, "experiments", "archive");
|
|
149
|
+
}
|
|
150
|
+
catch (exc) {
|
|
151
|
+
statuses.push(yamlErrorStatus("experiments", expPath, exc.message));
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
statuses.push({
|
|
155
|
+
artifact: "experiments",
|
|
156
|
+
path: expPath,
|
|
157
|
+
classification: "protected",
|
|
158
|
+
active_count: activeCount,
|
|
159
|
+
archive_count: archiveCount,
|
|
160
|
+
total_count: activeCount + archiveCount,
|
|
161
|
+
over_limit_count: overLimitCount(activeCount, archiveCount),
|
|
162
|
+
reason: "objective-state experiment files are classified but skipped by default",
|
|
163
|
+
protected_overflow_count: 0,
|
|
164
|
+
exists: true,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Touch yamlArchiveEntries to keep the export alive in dry builds.
|
|
169
|
+
void yamlArchiveEntries;
|
|
170
|
+
return statuses;
|
|
171
|
+
}
|
|
172
|
+
function operationForStatus(status, mode) {
|
|
173
|
+
const base = (action, message) => ({
|
|
174
|
+
status,
|
|
175
|
+
mode,
|
|
176
|
+
action,
|
|
177
|
+
changed: false,
|
|
178
|
+
result: null,
|
|
179
|
+
message,
|
|
180
|
+
});
|
|
181
|
+
if (!status.exists)
|
|
182
|
+
return base("missing", status.reason);
|
|
183
|
+
if (status.classification === "error")
|
|
184
|
+
return base("error", status.reason);
|
|
185
|
+
if (status.classification !== "compactable")
|
|
186
|
+
return base("skipped", status.reason);
|
|
187
|
+
if (status.protected_overflow_count) {
|
|
188
|
+
return base("protected_overflow", `protected-overflow review pressure by ${status.protected_overflow_count}`);
|
|
189
|
+
}
|
|
190
|
+
if (!status.over_limit_count)
|
|
191
|
+
return base("ok", "within uniform_10_40_50 limits");
|
|
192
|
+
return base(mode === "check" ? "over_limit" : "pending_fix", `over uniform_10_40_50 limit by ${status.over_limit_count}`);
|
|
193
|
+
}
|
|
194
|
+
export function checkCompaction(projectRoot) {
|
|
195
|
+
return computeCompactionStatus(projectRoot).map((status) => operationForStatus(status, "check"));
|
|
196
|
+
}
|
|
197
|
+
export function fixCompaction(projectRoot) {
|
|
198
|
+
const operations = [];
|
|
199
|
+
for (const status of computeCompactionStatus(projectRoot)) {
|
|
200
|
+
const baseline = operationForStatus(status, "fix");
|
|
201
|
+
if (baseline.action !== "pending_fix") {
|
|
202
|
+
operations.push(baseline);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const p = status.path;
|
|
206
|
+
let result;
|
|
207
|
+
try {
|
|
208
|
+
if (status.artifact === "todo#Resolved") {
|
|
209
|
+
result = compactFile(p, "todo-resolved");
|
|
210
|
+
}
|
|
211
|
+
else if (status.artifact in YAML_SPEC_BY_ARTIFACT) {
|
|
212
|
+
result = compactYamlFile(p, status.artifact);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
operations.push({ status, mode: "fix", action: "skipped", changed: false, result: null, message: `no fixer registered for ${status.artifact}` });
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch (exc) {
|
|
220
|
+
operations.push({ status, mode: "fix", action: "error", changed: false, result: null, message: exc.message });
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
operations.push({
|
|
224
|
+
status,
|
|
225
|
+
mode: "fix",
|
|
226
|
+
action: result.changed ? "compacted" : "ok",
|
|
227
|
+
changed: result.changed,
|
|
228
|
+
result,
|
|
229
|
+
message: `full ${result.full_before}->${result.full_after}; ` +
|
|
230
|
+
`archive ${result.oneline_before}->${result.oneline_after}; ` +
|
|
231
|
+
`dropped ${result.dropped}`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return operations;
|
|
235
|
+
}
|
|
236
|
+
export function runCompaction(projectRoot, mode = "check") {
|
|
237
|
+
if (mode === "check")
|
|
238
|
+
return checkCompaction(projectRoot);
|
|
239
|
+
if (mode === "fix")
|
|
240
|
+
return fixCompaction(projectRoot);
|
|
241
|
+
throw new Error(`unknown compaction mode: ${mode}`);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/hooks/compaction/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/compaction/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/hooks/compaction.js
CHANGED
|
@@ -159,21 +159,21 @@ export const SPECS = {
|
|
|
159
159
|
},
|
|
160
160
|
};
|
|
161
161
|
export const COMPACTABLE_YAML_ARTIFACTS = {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
progress: ["cycles", "archive"],
|
|
163
|
+
decisions: ["decisions", "archive"],
|
|
164
|
+
health: ["audits", "archive"],
|
|
165
165
|
};
|
|
166
166
|
const YAML_SPEC_BY_ARTIFACT = {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
167
|
+
progress: "progress",
|
|
168
|
+
decisions: "decisions",
|
|
169
|
+
health: "health",
|
|
170
170
|
};
|
|
171
171
|
const NON_COMPACTABLE_ARTIFACTS = {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
172
|
+
changelog: ["exempt", "public release history is not compacted"],
|
|
173
|
+
plan: ["unsupported", "active plan is lifecycle state, not a uniform retained-entry log"],
|
|
174
|
+
docs: ["unsupported", "docs owns artifact mapping and schema metadata"],
|
|
175
|
+
vision: ["protected", "vision state is protected during execution cycles"],
|
|
176
|
+
design: ["unsupported", "design is a human-facing identity artifact, not a uniform retained-entry log"],
|
|
177
177
|
};
|
|
178
178
|
function overLimitCount(activeCount, archiveCount) {
|
|
179
179
|
const totalCount = activeCount + archiveCount;
|
|
@@ -398,7 +398,7 @@ function decisionProtectedOverflowCount(active, archive) {
|
|
|
398
398
|
function selectDecisionActiveEntries(active) {
|
|
399
399
|
const protectedEntries = active.filter((e) => decisionRequiresUserReview(e));
|
|
400
400
|
if (protectedEntries.length > MAX_FULL_ENTRIES) {
|
|
401
|
-
throw new Error("
|
|
401
|
+
throw new Error("decisions: protected-overflow review pressure; " +
|
|
402
402
|
`${protectedEntries.length} protected active decision(s) exceed ${MAX_FULL_ENTRIES} full-detail slots`);
|
|
403
403
|
}
|
|
404
404
|
const satisfied = active.filter((e) => !decisionRequiresUserReview(e));
|
|
@@ -410,7 +410,7 @@ function selectDecisionActiveEntries(active) {
|
|
|
410
410
|
function selectDecisionArchiveEntries(archiveCandidates) {
|
|
411
411
|
const protectedEntries = archiveCandidates.filter((e) => decisionRequiresUserReview(e));
|
|
412
412
|
if (protectedEntries.length > MAX_ONELINE_ENTRIES) {
|
|
413
|
-
throw new Error("
|
|
413
|
+
throw new Error("decisions: protected-overflow review pressure; " +
|
|
414
414
|
`${protectedEntries.length} protected archived decision(s) exceed ${MAX_ONELINE_ENTRIES} archive slots`);
|
|
415
415
|
}
|
|
416
416
|
const satisfied = archiveCandidates.filter((e) => !decisionRequiresUserReview(e));
|
|
@@ -482,15 +482,15 @@ function countStatus(artifact, p, activeCount, archiveCount, protectedOverflowCo
|
|
|
482
482
|
export function computeCompactionStatus(projectRoot) {
|
|
483
483
|
const paths = artifactPaths(projectRoot);
|
|
484
484
|
const statuses = [];
|
|
485
|
-
const todoPath = paths
|
|
485
|
+
const todoPath = paths.todo;
|
|
486
486
|
if (fs.existsSync(todoPath)) {
|
|
487
487
|
const entries = parseEntries(fs.readFileSync(todoPath, "utf8"), "todo-resolved");
|
|
488
488
|
const activeCount = entries.filter((e) => e.kind === "full").length;
|
|
489
489
|
const archiveCount = entries.filter((e) => e.kind === "oneline").length;
|
|
490
|
-
statuses.push(countStatus("
|
|
490
|
+
statuses.push(countStatus("todo#Resolved", todoPath, activeCount, archiveCount));
|
|
491
491
|
}
|
|
492
492
|
else {
|
|
493
|
-
statuses.push(missingStatus("
|
|
493
|
+
statuses.push(missingStatus("todo#Resolved", todoPath, "compactable"));
|
|
494
494
|
}
|
|
495
495
|
for (const [artifact, [activeKey, archiveKey]] of Object.entries(COMPACTABLE_YAML_ARTIFACTS)) {
|
|
496
496
|
const p = paths[artifact];
|
|
@@ -504,7 +504,7 @@ export function computeCompactionStatus(projectRoot) {
|
|
|
504
504
|
statuses.push(yamlErrorStatus(artifact, p, exc.message));
|
|
505
505
|
continue;
|
|
506
506
|
}
|
|
507
|
-
const protectedOverflowCount = artifact === "
|
|
507
|
+
const protectedOverflowCount = artifact === "decisions" ? decisionProtectedOverflowCount(active, archive) : 0;
|
|
508
508
|
statuses.push(countStatus(artifact, p, active.length, archive.length, protectedOverflowCount));
|
|
509
509
|
}
|
|
510
510
|
else {
|
|
@@ -541,11 +541,11 @@ export function computeCompactionStatus(projectRoot) {
|
|
|
541
541
|
[activeCount, archiveCount] = yamlCounts(expPath, "experiments", "archive");
|
|
542
542
|
}
|
|
543
543
|
catch (exc) {
|
|
544
|
-
statuses.push(yamlErrorStatus("
|
|
544
|
+
statuses.push(yamlErrorStatus("experiments", expPath, exc.message));
|
|
545
545
|
continue;
|
|
546
546
|
}
|
|
547
547
|
statuses.push({
|
|
548
|
-
artifact: "
|
|
548
|
+
artifact: "experiments",
|
|
549
549
|
path: expPath,
|
|
550
550
|
classification: "protected",
|
|
551
551
|
active_count: activeCount,
|
|
@@ -596,7 +596,7 @@ export function fixCompaction(projectRoot) {
|
|
|
596
596
|
const p = status.path;
|
|
597
597
|
let result;
|
|
598
598
|
try {
|
|
599
|
-
if (status.artifact === "
|
|
599
|
+
if (status.artifact === "todo#Resolved") {
|
|
600
600
|
result = compactFile(p, "todo-resolved");
|
|
601
601
|
}
|
|
602
602
|
else if (status.artifact in YAML_SPEC_BY_ARTIFACT) {
|