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.
Files changed (57) hide show
  1. package/README.md +23 -0
  2. package/bundle/.agentera-build-source.json +5 -5
  3. package/bundle/CHANGELOG.md +10 -1
  4. package/bundle/UPGRADE.md +24 -5
  5. package/bundle/references/adapters/package-publication.json +4 -4
  6. package/bundle/references/adapters/package-registry.yaml +153 -151
  7. package/bundle/references/adapters/product-v1-reset.yaml +101 -0
  8. package/bundle/references/artifacts/glossary-entry-contract.yaml +163 -9
  9. package/bundle/references/artifacts/state-storage-authority.yaml +0 -5
  10. package/bundle/references/cli/update-channels.yaml +1 -1
  11. package/bundle/references/cli/vocabulary-index.yaml +2 -2
  12. package/bundle/references/cli/vocabulary.md +2 -3
  13. package/bundle/references/meta/retained-reference-authority.yaml +5 -0
  14. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +1 -20
  15. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +0 -31
  16. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +0 -25
  17. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +1 -1
  18. package/bundle/skills/agentera/schemas/artifacts/health.yaml +1 -36
  19. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +0 -31
  20. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +1 -35
  21. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +1 -25
  22. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
  23. package/dist/.agentera-build-source.json +5 -5
  24. package/dist/analytics/personalGlossaryAdmission.js +1 -1
  25. package/dist/analytics/personalGlossaryCandidateProjection.js +96 -0
  26. package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
  27. package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
  28. package/dist/capabilities/status/instructions.js +1 -1
  29. package/dist/cli/commands/personalGlossaryCandidateReads.js +12 -1
  30. package/dist/cli/commands/prime/briefOrientation.js +1 -1
  31. package/dist/cli/commands/prime/collectOrientationState.js +0 -7
  32. package/dist/cli/commands/prime/orientationOutput.js +3 -9
  33. package/dist/cli/commands/report.js +98 -8
  34. package/dist/cli/commands/upgrade.js +30 -0
  35. package/dist/cli/dispatch/index.js +7 -0
  36. package/dist/cli/dispatch/lifecycle.js +20 -0
  37. package/dist/cli/help.js +10 -3
  38. package/dist/cli/orientation/attention.js +1 -4
  39. package/dist/cli/productV1Eol.js +55 -0
  40. package/dist/cli/startupCompletenessContract.js +0 -1
  41. package/dist/cli/stateQuery.js +1 -1
  42. package/dist/registries/activationTuples.js +11 -2
  43. package/dist/registries/glossaryCandidateProjectionAuthority.js +154 -6
  44. package/dist/registries/glossaryCandidateProjectionContract.js +4 -0
  45. package/dist/registries/glossaryEntryContract.js +3 -3
  46. package/dist/registries/packagePublication.js +2 -2
  47. package/dist/runtime/nativeResourceCleanup.js +1 -0
  48. package/dist/upgrade/legacyAgentCleanup.js +1 -1
  49. package/dist/upgrade/migrateArtifactsV2ToV3.js +1 -27
  50. package/dist/upgrade/nextMajorDoctor.js +0 -21
  51. package/dist/upgrade/productV1Reset.js +515 -0
  52. package/dist/upgrade/productV1ResetAuthority.js +139 -0
  53. package/dist/upgrade/projectIntegration.js +4 -6
  54. package/dist/upgrade/upgradeOrchestrator.js +4 -12
  55. package/dist/validate/{v1LegacyCruft.js → glossaryVariantGuard.js} +3 -38
  56. package/package.json +2 -2
  57. 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 { detectV1ArtifactPairs, planRuntimeRetirementPhase, } from "./migrateArtifactsV2ToV3.js";
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 = v1Artifacts.length +
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: v1Artifacts.length + pendingProjectMigration.length,
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: v1Artifacts.length + pendingProjectMigration.length,
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, detectV1ArtifactPairs, dryRunMigration, hasPendingPlanLifecycleMigration, } from "./migrateArtifactsV2ToV3.js";
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, pendingV1Artifacts, selected, apply, activeUpgradeLockPaths) {
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 || pendingV1Artifacts || pendingPlanLifecycleMigration || pendingCleanup;
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, pendingV1Artifacts, entitySelected, Boolean(args.yes), activeUpgradeLockPaths)
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/v1LegacyCruft.test.ts";
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 scanPost30CruftViolations(root) {
83
+ export function scanConfirmedVariantViolations(root) {
119
84
  const resolved = resolvePath(root);
120
- const violations = fixedLegacyViolations(resolved);
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.76",
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": "70aed21badb985087fd79371fabb61b1ec31ddde"
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
- }