agentera 3.0.0-dev.76 → 3.0.0-dev.78
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 +23 -0
- package/bundle/.agentera-build-source.json +5 -5
- package/bundle/CHANGELOG.md +10 -1
- package/bundle/UPGRADE.md +24 -5
- package/bundle/references/adapters/package-publication.json +4 -4
- package/bundle/references/adapters/package-registry.yaml +153 -151
- package/bundle/references/adapters/product-v1-reset.yaml +101 -0
- package/bundle/references/artifacts/glossary-entry-contract.yaml +163 -9
- package/bundle/references/artifacts/state-storage-authority.yaml +0 -5
- package/bundle/references/cli/update-channels.yaml +1 -1
- package/bundle/references/cli/vocabulary-index.yaml +2 -2
- package/bundle/references/cli/vocabulary.md +2 -3
- package/bundle/references/meta/retained-reference-authority.yaml +5 -0
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +1 -20
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +0 -31
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +0 -25
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +1 -1
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +1 -36
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +0 -31
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +1 -35
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +1 -25
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
- package/dist/.agentera-build-source.json +5 -5
- package/dist/analytics/personalGlossaryAdmission.js +1 -1
- package/dist/analytics/personalGlossaryCandidateProjection.js +96 -0
- package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
- package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
- package/dist/capabilities/status/instructions.js +1 -1
- package/dist/cli/commands/personalGlossaryCandidateReads.js +12 -1
- package/dist/cli/commands/prime/briefOrientation.js +1 -1
- package/dist/cli/commands/prime/collectOrientationState.js +0 -7
- package/dist/cli/commands/prime/orientationOutput.js +3 -9
- package/dist/cli/commands/report.js +98 -8
- package/dist/cli/commands/upgrade.js +30 -0
- package/dist/cli/dispatch/index.js +7 -0
- package/dist/cli/dispatch/lifecycle.js +20 -0
- package/dist/cli/help.js +10 -3
- package/dist/cli/orientation/attention.js +1 -4
- package/dist/cli/productV1Eol.js +55 -0
- package/dist/cli/startupCompletenessContract.js +0 -1
- package/dist/cli/stateQuery.js +1 -1
- package/dist/registries/activationTuples.js +11 -2
- package/dist/registries/glossaryCandidateProjectionAuthority.js +154 -6
- package/dist/registries/glossaryCandidateProjectionContract.js +4 -0
- package/dist/registries/glossaryEntryContract.js +3 -3
- package/dist/registries/packagePublication.js +2 -2
- package/dist/runtime/nativeResourceCleanup.js +1 -0
- package/dist/upgrade/legacyAgentCleanup.js +1 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js +1 -27
- package/dist/upgrade/nextMajorDoctor.js +0 -21
- package/dist/upgrade/productV1Reset.js +515 -0
- package/dist/upgrade/productV1ResetAuthority.js +139 -0
- package/dist/upgrade/projectIntegration.js +4 -6
- package/dist/upgrade/upgradeOrchestrator.js +4 -12
- package/dist/validate/{v1LegacyCruft.js → glossaryVariantGuard.js} +3 -38
- package/package.json +2 -2
- package/dist/cli/commands/prime/v1Migration.js +0 -38
|
@@ -4,7 +4,7 @@ import { APP_MIGRATION_NEEDED, APP_MANUAL_REVIEW_NEEDED, APP_OUTDATED, APP_REPAI
|
|
|
4
4
|
import { resolveNpxPlatformStatus } from "./npxPlatformStatus.js";
|
|
5
5
|
import { classifyInstall, crossMajorBoundaryApplies } from "./compatibility.js";
|
|
6
6
|
import { resolveInvokedUpdateChannel } from "./channels.js";
|
|
7
|
-
import {
|
|
7
|
+
import { planRuntimeRetirementPhase, } from "./migrateArtifactsV2ToV3.js";
|
|
8
8
|
import { projectHasProjectLevelRuntimeHooks, } from "./runtimeMigration.js";
|
|
9
9
|
import { isStableSuccessorAnnounced } from "./nextMajorDoctor.js";
|
|
10
10
|
import { buildUpgradeCommands } from "./upgradeCommands.js";
|
|
@@ -142,7 +142,6 @@ export function summarizeProjectIntegration(args) {
|
|
|
142
142
|
channel,
|
|
143
143
|
})
|
|
144
144
|
: null;
|
|
145
|
-
const v1Artifacts = args.precomputedV1Artifacts ?? detectV1ArtifactPairs(args.project);
|
|
146
145
|
const pendingProjectMigration = pendingRuntimeMigrationItems({
|
|
147
146
|
appHome: integrationTargets.installRoot,
|
|
148
147
|
project: args.project,
|
|
@@ -160,8 +159,7 @@ export function summarizeProjectIntegration(args) {
|
|
|
160
159
|
const needsAppUpgrade = isNpx && integrationTargets.bundleStatus === APP_UP_TO_DATE
|
|
161
160
|
? appNeedsUpgrade(integrationTargets.platformBundleStatus ?? APP_UP_TO_DATE)
|
|
162
161
|
: appNeedsUpgrade(classificationBundleStatus);
|
|
163
|
-
const appPending =
|
|
164
|
-
pendingProjectMigration.length +
|
|
162
|
+
const appPending = pendingProjectMigration.length +
|
|
165
163
|
(needsAppUpgrade ? 1 : 0) +
|
|
166
164
|
(crossMajorMigration ? 1 : 0);
|
|
167
165
|
const appBlockers = appPhaseBlockers(classificationBundleStatus, majorBoundaryBlock);
|
|
@@ -180,7 +178,7 @@ export function summarizeProjectIntegration(args) {
|
|
|
180
178
|
: "stay";
|
|
181
179
|
const scenarioFacts = {
|
|
182
180
|
bundleStatus: classificationBundleStatus,
|
|
183
|
-
pendingArtifactCount:
|
|
181
|
+
pendingArtifactCount: pendingProjectMigration.length,
|
|
184
182
|
crossMajor,
|
|
185
183
|
crossMajorMigration,
|
|
186
184
|
crossMajorNeedsPreview: Boolean(majorBoundaryBlock) || (crossMajor && !crossMajorMigration),
|
|
@@ -209,7 +207,7 @@ export function summarizeProjectIntegration(args) {
|
|
|
209
207
|
return {
|
|
210
208
|
recommendation: aggregateStatus === "upgrade" ? "upgrade" : "stay",
|
|
211
209
|
message,
|
|
212
|
-
pending_artifacts:
|
|
210
|
+
pending_artifacts: pendingProjectMigration.length,
|
|
213
211
|
dry_run_command: cmds?.dryRunCommand ?? null,
|
|
214
212
|
apply_command: cmds?.applyCommand ?? null,
|
|
215
213
|
update_channel: hasUpgradeWork ? cmdsChannel.channel : channel.channel,
|
|
@@ -8,7 +8,7 @@ import { resolveInvokedUpdateChannel } from "./channels.js";
|
|
|
8
8
|
import { buildUpgradeCommands } from "./upgradeCommands.js";
|
|
9
9
|
import { pendingRuntimeMigrationItems } from "./projectIntegration.js";
|
|
10
10
|
import { REMOVE_LEGACY_AGENT_ACTION, planLegacyAgentCleanupItems, planLegacyCapabilityAgentCleanupItems, } from "./legacyAgentCleanup.js";
|
|
11
|
-
import { MIGRATION_STATUSES, applyMigrationPhases, delegatePlanLifecycleToEntityCutover,
|
|
11
|
+
import { MIGRATION_STATUSES, applyMigrationPhases, delegatePlanLifecycleToEntityCutover, dryRunMigration, hasPendingPlanLifecycleMigration, } from "./migrateArtifactsV2ToV3.js";
|
|
12
12
|
import { runLifecycleUpgrade, } from "./lifecycleUpgrade.js";
|
|
13
13
|
import { acquireUpgradeLock, releaseUpgradeLock } from "./upgradeLock.js";
|
|
14
14
|
import { applyPreparedEntityCutover, inspectEntityCutoverForUpgrade, prepareEntityCutoverForUpgrade, } from "../state/entityCutover.js";
|
|
@@ -124,7 +124,7 @@ function migrationPhaseToOrchestrator(phase) {
|
|
|
124
124
|
message: phase.message,
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
|
-
function entityReadinessPhase(project, sourceRoot,
|
|
127
|
+
function entityReadinessPhase(project, sourceRoot, selected, apply, activeUpgradeLockPaths) {
|
|
128
128
|
try {
|
|
129
129
|
const cutover = inspectEntityCutoverForUpgrade(project, sourceRoot, apply && selected, activeUpgradeLockPaths);
|
|
130
130
|
if (cutover.phase === "active") {
|
|
@@ -155,13 +155,6 @@ function entityReadinessPhase(project, sourceRoot, pendingV1Artifacts, selected,
|
|
|
155
155
|
message: "marker-absent projects require one full cross-major upgrade; filtered apply is unavailable",
|
|
156
156
|
}]);
|
|
157
157
|
}
|
|
158
|
-
if (pendingV1Artifacts) {
|
|
159
|
-
return summarizeOrchestratorPhase("entities", [{
|
|
160
|
-
status: "blocked",
|
|
161
|
-
action: "resolve-v1-state",
|
|
162
|
-
message: "pending v1 Markdown state is not a supported automatic source; preserve it and follow the manual v1 recovery instructions in UPGRADE.md",
|
|
163
|
-
}]);
|
|
164
|
-
}
|
|
165
158
|
const empty = cutover.entityCount === 0;
|
|
166
159
|
return summarizeOrchestratorPhase("entities", [{
|
|
167
160
|
status: empty ? "blocked" : "pending",
|
|
@@ -306,7 +299,6 @@ function buildUpgradePlanUnlocked(args, home, project, activeUpgradeLockPaths) {
|
|
|
306
299
|
installAppContentIfMissing: false,
|
|
307
300
|
};
|
|
308
301
|
const pendingRuntimeSync = pendingRuntimeMigrationItems(migrationCtx).length > 0;
|
|
309
|
-
const pendingV1Artifacts = detectV1ArtifactPairs(project).length > 0;
|
|
310
302
|
const pendingPlanLifecycleMigration = hasPendingPlanLifecycleMigration(project);
|
|
311
303
|
const crossMajorMigration = crossMajorBoundary && shouldIncludeCrossMajorPlanItems(channel, upgradeOutcome);
|
|
312
304
|
const entityAuthorityActive = detectStateMode(project, sourceRoot) === "entities";
|
|
@@ -318,7 +310,7 @@ function buildUpgradePlanUnlocked(args, home, project, activeUpgradeLockPaths) {
|
|
|
318
310
|
...planLegacyAgentCleanupItems(migrationCtx),
|
|
319
311
|
...planLegacyCapabilityAgentCleanupItems(migrationCtx),
|
|
320
312
|
].some((item) => item.status !== "noop");
|
|
321
|
-
const runMigration = crossMajorMigration || projectEntityCutover || pendingRuntimeSync ||
|
|
313
|
+
const runMigration = crossMajorMigration || projectEntityCutover || pendingRuntimeSync || pendingPlanLifecycleMigration || pendingCleanup;
|
|
322
314
|
const phases = [];
|
|
323
315
|
if (phaseFilter.has("detect")) {
|
|
324
316
|
phases.push(buildDetectPhase(install, crossMajorBoundary, upgradeOutcome, channel));
|
|
@@ -329,7 +321,7 @@ function buildUpgradePlanUnlocked(args, home, project, activeUpgradeLockPaths) {
|
|
|
329
321
|
const entitySelected = entityBoundary && (!filteredEntityBoundary || (!args.yes && Boolean(args.only?.includes("artifacts"))));
|
|
330
322
|
const partialStateApply = filteredEntityBoundary && !entitySelected;
|
|
331
323
|
let entityPhase = entitySelected || partialStateApply || (entityAuthorityActive && crossMajorMigration)
|
|
332
|
-
? entityReadinessPhase(project, sourceRoot,
|
|
324
|
+
? entityReadinessPhase(project, sourceRoot, entitySelected, Boolean(args.yes), activeUpgradeLockPaths)
|
|
333
325
|
: null;
|
|
334
326
|
const entityCutoverPending = entityPhase?.items.some(({ action }) => action === "entity-cutover") ?? false;
|
|
335
327
|
if (migrationPreview && (entityAuthorityActive || (args.yes && entityCutoverPending))) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import YAML from "yaml";
|
|
5
4
|
import { resolvePath } from "../core/paths.js";
|
|
6
5
|
import { confirmedVariantGuardContract } from "../registries/glossaryEntryContract.js";
|
|
7
6
|
import { containsGlossaryTerm } from "../registries/glossaryTermOccurrence.js";
|
|
@@ -13,41 +12,7 @@ const TEXT_EXTENSIONS = new Set([
|
|
|
13
12
|
".md", ".mjs", ".py", ".rs", ".sh", ".toml", ".ts", ".tsx", ".txt",
|
|
14
13
|
".xml", ".yaml", ".yml",
|
|
15
14
|
]);
|
|
16
|
-
const RERUN = "pnpm -C packages/cli exec vitest run test/cli/
|
|
17
|
-
function fixedLegacyViolations(root) {
|
|
18
|
-
const violations = [];
|
|
19
|
-
if (fs.existsSync(path.join(root, "skills/hej")))
|
|
20
|
-
violations.push("skills/hej/ bridge directory present");
|
|
21
|
-
if (fs.existsSync(path.join(root, "references/v1-section-mapping.md"))) {
|
|
22
|
-
violations.push("references/v1-section-mapping.md present");
|
|
23
|
-
}
|
|
24
|
-
if (fs.existsSync(path.join(root, ".opencode/commands/hej.md"))) {
|
|
25
|
-
violations.push(".opencode/commands/hej.md legacy bridge command present");
|
|
26
|
-
}
|
|
27
|
-
const marketplacePath = path.join(root, ".claude-plugin/marketplace.json");
|
|
28
|
-
if (fs.existsSync(marketplacePath)) {
|
|
29
|
-
const marketplace = JSON.parse(fs.readFileSync(marketplacePath, "utf8"));
|
|
30
|
-
const names = (marketplace.plugins ?? []).map((item) => item.name);
|
|
31
|
-
if (names.includes("status"))
|
|
32
|
-
violations.push(".claude-plugin/marketplace.json still lists hej plugin");
|
|
33
|
-
}
|
|
34
|
-
const codexPath = path.join(root, ".codex-plugin/plugin.json");
|
|
35
|
-
if (fs.existsSync(codexPath)) {
|
|
36
|
-
const codex = JSON.parse(fs.readFileSync(codexPath, "utf8"));
|
|
37
|
-
const names = (codex.skillMetadata ?? []).map((item) => item.name);
|
|
38
|
-
if (names.includes("status"))
|
|
39
|
-
violations.push(".codex-plugin/plugin.json still lists hej skillMetadata");
|
|
40
|
-
}
|
|
41
|
-
const packageRegistryPath = path.join(root, "references/adapters/package-registry.yaml");
|
|
42
|
-
if (fs.existsSync(packageRegistryPath)) {
|
|
43
|
-
const registry = YAML.parse(fs.readFileSync(packageRegistryPath, "utf8"));
|
|
44
|
-
const versionFiles = registry.records?.[0]?.docs_targets?.version_files ?? [];
|
|
45
|
-
if (versionFiles.includes("skills/hej/SKILL.md")) {
|
|
46
|
-
violations.push("package-registry docs_targets still lists skills/hej/SKILL.md");
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return violations;
|
|
50
|
-
}
|
|
15
|
+
const RERUN = "pnpm -C packages/cli exec vitest run test/cli/glossaryVariantGuard.test.ts";
|
|
51
16
|
function confirmedVariants(document) {
|
|
52
17
|
return document.approvals.flatMap((approval, index) => {
|
|
53
18
|
const entry = document.entries[index];
|
|
@@ -115,9 +80,9 @@ function variantViolations(root, document, glossaryPath) {
|
|
|
115
80
|
}
|
|
116
81
|
return violations.sort();
|
|
117
82
|
}
|
|
118
|
-
export function
|
|
83
|
+
export function scanConfirmedVariantViolations(root) {
|
|
119
84
|
const resolved = resolvePath(root);
|
|
120
|
-
const violations =
|
|
85
|
+
const violations = [];
|
|
121
86
|
try {
|
|
122
87
|
const loaded = loadProjectGlossaryDocument(resolved);
|
|
123
88
|
if (loaded)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentera",
|
|
3
|
-
"version": "3.0.0-dev.
|
|
3
|
+
"version": "3.0.0-dev.78",
|
|
4
4
|
"description": "One CLI, many capabilities: project state, artifact validation, and capability routing for AI coding agents",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentera",
|
|
@@ -80,6 +80,6 @@
|
|
|
80
80
|
},
|
|
81
81
|
"agentera": {
|
|
82
82
|
"suiteVersion": "3.0.0",
|
|
83
|
-
"gitRef": "
|
|
83
|
+
"gitRef": "eb1d15be07e52525a9b2bd30590e996bb42dc463"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { resolveInvokedUpdateChannel } from "../../../upgrade/channels.js";
|
|
4
|
-
import { buildUpgradeCommands } from "../../../upgrade/upgradeCommands.js";
|
|
5
|
-
export function isLocalCheckout(root) {
|
|
6
|
-
return ["skills/agentera/SKILL.md", "registry.json"].every((rel) => fs.existsSync(path.join(root, rel)));
|
|
7
|
-
}
|
|
8
|
-
export function v1MigrationSummary(v1Artifacts, opts) {
|
|
9
|
-
const detected = v1Artifacts.length > 0;
|
|
10
|
-
const channel = resolveInvokedUpdateChannel({
|
|
11
|
-
channel: null,
|
|
12
|
-
sourceRoot: opts.sourceRoot,
|
|
13
|
-
home: opts.home,
|
|
14
|
-
env: opts.env,
|
|
15
|
-
});
|
|
16
|
-
const cmds = detected
|
|
17
|
-
? buildUpgradeCommands({
|
|
18
|
-
project: process.cwd(),
|
|
19
|
-
installRoot: null,
|
|
20
|
-
channel,
|
|
21
|
-
only: ["artifacts"],
|
|
22
|
-
cwdDefault: true,
|
|
23
|
-
})
|
|
24
|
-
: null;
|
|
25
|
-
const summary = {
|
|
26
|
-
detected,
|
|
27
|
-
affected_files: v1Artifacts,
|
|
28
|
-
dry_run_command: cmds?.dryRunCommand ?? null,
|
|
29
|
-
apply_command: cmds?.applyCommand ?? null,
|
|
30
|
-
requires_confirmation: detected,
|
|
31
|
-
update_channel: channel.channel,
|
|
32
|
-
};
|
|
33
|
-
if (detected && isLocalCheckout(process.cwd())) {
|
|
34
|
-
summary.local_dry_run_command = cmds?.dryRunCommand ?? null;
|
|
35
|
-
summary.local_apply_command = cmds?.applyCommand ?? null;
|
|
36
|
-
}
|
|
37
|
-
return summary;
|
|
38
|
-
}
|