@deftai/directive-core 0.77.0 → 0.79.0

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 (126) hide show
  1. package/dist/cache/empty-populate.d.ts +44 -0
  2. package/dist/cache/empty-populate.js +117 -0
  3. package/dist/cache/index.d.ts +1 -0
  4. package/dist/cache/index.js +1 -0
  5. package/dist/check-updates/index.d.ts +10 -0
  6. package/dist/check-updates/index.js +81 -1
  7. package/dist/doctor/main.d.ts +1 -0
  8. package/dist/doctor/main.js +48 -0
  9. package/dist/doctor/payload-staleness.js +7 -1
  10. package/dist/doctor/types.d.ts +3 -0
  11. package/dist/eval/triggers.d.ts +76 -0
  12. package/dist/eval/triggers.js +259 -0
  13. package/dist/eval-triggers-relocation/evaluate.d.ts +36 -0
  14. package/dist/eval-triggers-relocation/evaluate.js +115 -0
  15. package/dist/eval-triggers-relocation/index.d.ts +2 -0
  16. package/dist/eval-triggers-relocation/index.js +2 -0
  17. package/dist/hooks/dispatcher.d.ts +43 -0
  18. package/dist/hooks/dispatcher.js +173 -0
  19. package/dist/hooks/index.d.ts +3 -0
  20. package/dist/hooks/index.js +3 -0
  21. package/dist/hooks/scope.d.ts +12 -0
  22. package/dist/hooks/scope.js +46 -0
  23. package/dist/hooks/tools.d.ts +4 -0
  24. package/dist/hooks/tools.js +23 -0
  25. package/dist/init-deposit/agent-hooks.d.ts +22 -0
  26. package/dist/init-deposit/agent-hooks.js +238 -0
  27. package/dist/init-deposit/hygiene.js +4 -0
  28. package/dist/init-deposit/index.d.ts +1 -0
  29. package/dist/init-deposit/index.js +1 -0
  30. package/dist/init-deposit/init-deposit.js +4 -0
  31. package/dist/init-deposit/prettierignore.d.ts +21 -0
  32. package/dist/init-deposit/prettierignore.js +83 -0
  33. package/dist/init-deposit/refresh.d.ts +3 -1
  34. package/dist/init-deposit/refresh.js +31 -40
  35. package/dist/init-deposit/scaffold.js +6 -12
  36. package/dist/init-deposit/xbrief-projections.d.ts +18 -0
  37. package/dist/init-deposit/xbrief-projections.js +117 -0
  38. package/dist/intake/reconcile-issues.d.ts +11 -0
  39. package/dist/intake/reconcile-issues.js +166 -51
  40. package/dist/issue-sync/index.d.ts +2 -0
  41. package/dist/issue-sync/index.js +2 -0
  42. package/dist/issue-sync/sync-from-xbrief-cli.d.ts +11 -0
  43. package/dist/issue-sync/sync-from-xbrief-cli.js +44 -0
  44. package/dist/issue-sync/sync-from-xbrief.d.ts +46 -0
  45. package/dist/issue-sync/sync-from-xbrief.js +208 -0
  46. package/dist/platform/index.d.ts +1 -0
  47. package/dist/platform/index.js +1 -0
  48. package/dist/platform/platform-capabilities.d.ts +5 -0
  49. package/dist/platform/platform-capabilities.js +9 -0
  50. package/dist/platform/shell-context.d.ts +30 -0
  51. package/dist/platform/shell-context.js +111 -0
  52. package/dist/pr-monitor/cadence.d.ts +6 -0
  53. package/dist/pr-monitor/cadence.js +13 -0
  54. package/dist/pr-monitor/index.d.ts +1 -1
  55. package/dist/pr-monitor/index.js +1 -1
  56. package/dist/pr-monitor/monitor.d.ts +7 -0
  57. package/dist/pr-monitor/monitor.js +59 -13
  58. package/dist/preflight-cache/evaluate.d.ts +3 -8
  59. package/dist/preflight-cache/evaluate.js +19 -19
  60. package/dist/release/build-dist.js +1 -0
  61. package/dist/release/constants.d.ts +2 -0
  62. package/dist/release/constants.js +8 -1
  63. package/dist/release/flags.js +26 -0
  64. package/dist/release/issue-state-fetch.d.ts +27 -0
  65. package/dist/release/issue-state-fetch.js +146 -0
  66. package/dist/release/main.js +1 -0
  67. package/dist/release/native-steps.js +6 -4
  68. package/dist/release/pipeline.js +15 -5
  69. package/dist/release/preflight.d.ts +6 -2
  70. package/dist/release/preflight.js +19 -5
  71. package/dist/release/types.d.ts +3 -1
  72. package/dist/release-e2e/constants.js +6 -6
  73. package/dist/release-e2e/flags.d.ts +2 -0
  74. package/dist/release-e2e/flags.js +8 -4
  75. package/dist/release-e2e/greenfield-python-free-smoke-cli.js +40 -1
  76. package/dist/release-e2e/greenfield-python-free-smoke.d.ts +2 -0
  77. package/dist/release-e2e/greenfield-python-free-smoke.js +28 -8
  78. package/dist/release-e2e/main.js +15 -9
  79. package/dist/release-e2e/types.d.ts +4 -2
  80. package/dist/resolution/classify.d.ts +1 -1
  81. package/dist/resolution/classify.js +36 -11
  82. package/dist/scope/project-definition-sync.js +2 -150
  83. package/dist/scope/registry-artifact-sync.d.ts +3 -0
  84. package/dist/scope/registry-artifact-sync.js +159 -0
  85. package/dist/scope/specification-sync.d.ts +3 -0
  86. package/dist/scope/specification-sync.js +16 -0
  87. package/dist/scope/transition.js +40 -12
  88. package/dist/session/cache-recovery.d.ts +19 -0
  89. package/dist/session/cache-recovery.js +26 -0
  90. package/dist/session/session-start.d.ts +2 -0
  91. package/dist/session/session-start.js +14 -3
  92. package/dist/session/verify-session-ritual.d.ts +17 -0
  93. package/dist/session/verify-session-ritual.js +64 -0
  94. package/dist/triage/help/registry-data.d.ts +12 -1
  95. package/dist/triage/help/registry-data.js +22 -1
  96. package/dist/triage/welcome/default-mode.js +2 -0
  97. package/dist/triage/welcome/onboard.js +2 -0
  98. package/dist/ts-check-lane/run-lane.d.ts +5 -0
  99. package/dist/ts-check-lane/run-lane.js +9 -0
  100. package/dist/vbrief-reconcile/labels.d.ts +3 -0
  101. package/dist/vbrief-reconcile/labels.js +14 -0
  102. package/dist/vbrief-reconcile/main.d.ts +1 -0
  103. package/dist/vbrief-reconcile/main.js +13 -3
  104. package/dist/vbrief-reconcile/parity-scenarios.js +18 -4
  105. package/dist/vbrief-reconcile/repo-guard.d.ts +17 -0
  106. package/dist/vbrief-reconcile/repo-guard.js +33 -0
  107. package/dist/vbrief-reconcile/umbrellas.d.ts +3 -0
  108. package/dist/vbrief-reconcile/umbrellas.js +17 -1
  109. package/dist/verify-env/agent-hooks.d.ts +11 -0
  110. package/dist/verify-env/agent-hooks.js +46 -0
  111. package/dist/verify-env/command-spawn.d.ts +5 -0
  112. package/dist/verify-env/command-spawn.js +28 -9
  113. package/dist/verify-env/index.d.ts +1 -0
  114. package/dist/verify-env/index.js +1 -0
  115. package/dist/verify-env/verify-hooks-installed.js +5 -5
  116. package/dist/vitest-runner/coverage-debt-teardown.d.ts +3 -0
  117. package/dist/vitest-runner/coverage-debt-teardown.js +33 -0
  118. package/dist/vitest-runner/coverage-debt.d.ts +50 -0
  119. package/dist/vitest-runner/coverage-debt.js +155 -0
  120. package/dist/vitest-runner/win32-coverage-tmp-setup.d.ts +12 -0
  121. package/dist/vitest-runner/win32-coverage-tmp-setup.js +24 -0
  122. package/dist/xbrief-migrate/detect.js +46 -1
  123. package/dist/xbrief-migrate/migrate-project.js +19 -4
  124. package/dist/xbrief-migrate/migration-containment.d.ts +6 -0
  125. package/dist/xbrief-migrate/migration-containment.js +37 -0
  126. package/package.json +19 -3
@@ -6,6 +6,7 @@ import { patchAgentsMdHeader, renderHeaderPatchSummary } from "./agents-header.j
6
6
  import { LEGACY_ARTIFACT_DIR, LEGACY_ARTIFACT_SUFFIX, MIGRATED_ARTIFACT_DIR, MIGRATED_ARTIFACT_SUFFIX, VBRIEF_DEPRECATION_MARKER_BODY, VBRIEF_DEPRECATION_MARKER_FILENAME, } from "./constants.js";
7
7
  import { detectLegacyVbriefLayout, detectXbriefConvergence } from "./detect.js";
8
8
  import { hasVbriefDeprecationMarker, isDirectory, isEffectivelyEmptyDir } from "./fs-helpers.js";
9
+ import { assertMigrationSourceSafe } from "./migration-containment.js";
9
10
  import { renderXbriefMigrationLine, xbriefMigrationGuidance } from "./signpost.js";
10
11
  import { rewriteEmbeddedTokens, transformArtifactV06ToV08Transactional } from "./transforms.js";
11
12
  function collectFiles(root, acc = []) {
@@ -45,19 +46,32 @@ function writeMigratedFile(srcPath, destPath) {
45
46
  const raw = readFileSync(srcPath, "utf8");
46
47
  writeFileSync(destPath, rewriteEmbeddedTokens(raw), "utf8");
47
48
  }
48
- function backupLegacyTree(projectRoot, legacyDir) {
49
+ function backupMigrationInputs(projectRoot, legacyDir, migratedDir) {
49
50
  const stamp = new Date().toISOString().replace(/[:.]/g, "-");
50
51
  const backupRoot = join(projectRoot, ".deft", `xbrief-migrate-backup-${stamp}`);
51
52
  mkdirSync(backupRoot, { recursive: true });
52
53
  cpSync(legacyDir, join(backupRoot, LEGACY_ARTIFACT_DIR), { recursive: true });
54
+ if (existsSync(migratedDir)) {
55
+ cpSync(migratedDir, join(backupRoot, MIGRATED_ARTIFACT_DIR), { recursive: true });
56
+ }
53
57
  return backupRoot;
54
58
  }
59
+ /** Overlay the already-canonical cache last so it wins collisions. */
60
+ function overlayCanonicalTriageCache(migratedDir, stagedDir) {
61
+ const source = join(migratedDir, ".triage-cache");
62
+ if (!isDirectory(source))
63
+ return;
64
+ cpSync(source, join(stagedDir, ".triage-cache"), { recursive: true, force: true });
65
+ }
55
66
  function migrateLegacyTree(projectRoot, legacyDir, options) {
56
67
  const migratedDir = join(projectRoot, MIGRATED_ARTIFACT_DIR);
57
- if (existsSync(migratedDir)) {
58
- throw new Error(`refusing to migrate: '${MIGRATED_ARTIFACT_DIR}/' already exists alongside '${LEGACY_ARTIFACT_DIR}/'`);
68
+ const convergence = detectXbriefConvergence(projectRoot);
69
+ const hasCanonicalCache = isDirectory(join(migratedDir, ".triage-cache"));
70
+ if (existsSync(migratedDir) && (convergence.xbriefHasContent || !hasCanonicalCache)) {
71
+ throw new Error(`refusing to migrate: '${MIGRATED_ARTIFACT_DIR}/' already exists alongside '${LEGACY_ARTIFACT_DIR}/' and is not a cache-only support tree`);
59
72
  }
60
- const backupDir = backupLegacyTree(projectRoot, legacyDir);
73
+ assertMigrationSourceSafe(projectRoot, legacyDir);
74
+ const backupDir = backupMigrationInputs(projectRoot, legacyDir, migratedDir);
61
75
  const stagedDir = join(projectRoot, `.${MIGRATED_ARTIFACT_DIR}.migrate-staging`);
62
76
  if (existsSync(stagedDir)) {
63
77
  rmSync(stagedDir, { recursive: true, force: true });
@@ -70,6 +84,7 @@ function migrateLegacyTree(projectRoot, legacyDir, options) {
70
84
  const destPath = join(stagedDir, mapRelativePath(rel));
71
85
  writeMigratedFile(srcPath, destPath);
72
86
  }
87
+ overlayCanonicalTriageCache(migratedDir, stagedDir);
73
88
  renameOrReplace(stagedDir, migratedDir);
74
89
  // Converge to a single unambiguous root: the fully-migrated legacy tree is
75
90
  // either removed (default) or retained for read-compat behind an explicit
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Refuse migrate:xbrief when legacy `vbrief/` (or any traversed entry) escapes
3
+ * the project tree via symlinks (#2601).
4
+ */
5
+ export declare function assertMigrationSourceSafe(projectRoot: string, legacyDir: string): void;
6
+ //# sourceMappingURL=migration-containment.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { lstatSync, readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { assertProjectionContained } from "../fs/projection-containment.js";
4
+ /**
5
+ * Refuse migrate:xbrief when legacy `vbrief/` (or any traversed entry) escapes
6
+ * the project tree via symlinks (#2601).
7
+ */
8
+ export function assertMigrationSourceSafe(projectRoot, legacyDir) {
9
+ assertProjectionContained(projectRoot, legacyDir);
10
+ walkMigrationTreeRejectSymlinks(legacyDir);
11
+ }
12
+ function walkMigrationTreeRejectSymlinks(root) {
13
+ let entries;
14
+ try {
15
+ entries = readdirSync(root, { withFileTypes: true });
16
+ }
17
+ catch {
18
+ return;
19
+ }
20
+ for (const entry of entries) {
21
+ const full = join(root, entry.name);
22
+ let info;
23
+ try {
24
+ info = lstatSync(full);
25
+ }
26
+ catch {
27
+ continue;
28
+ }
29
+ if (info.isSymbolicLink()) {
30
+ throw new Error(`refusing to migrate: symlink on migration path: ${full}`);
31
+ }
32
+ if (info.isDirectory()) {
33
+ walkMigrationTreeRejectSymlinks(full);
34
+ }
35
+ }
36
+ }
37
+ //# sourceMappingURL=migration-containment.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deftai/directive-core",
3
- "version": "0.77.0",
3
+ "version": "0.79.0",
4
4
  "description": "TypeScript engine core for the Directive framework.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,6 +42,10 @@
42
42
  "types": "./dist/eval-health-relocation/index.d.ts",
43
43
  "default": "./dist/eval-health-relocation/index.js"
44
44
  },
45
+ "./eval-triggers-relocation": {
46
+ "types": "./dist/eval-triggers-relocation/index.d.ts",
47
+ "default": "./dist/eval-triggers-relocation/index.js"
48
+ },
45
49
  "./xbrief-migrate": {
46
50
  "types": "./dist/xbrief-migrate/index.d.ts",
47
51
  "default": "./dist/xbrief-migrate/index.js"
@@ -62,6 +66,10 @@
62
66
  "types": "./dist/session/index.d.ts",
63
67
  "default": "./dist/session/index.js"
64
68
  },
69
+ "./hooks": {
70
+ "types": "./dist/hooks/index.d.ts",
71
+ "default": "./dist/hooks/index.js"
72
+ },
65
73
  "./plan-sequence": {
66
74
  "types": "./dist/plan-sequence/index.d.ts",
67
75
  "default": "./dist/plan-sequence/index.js"
@@ -106,6 +114,10 @@
106
114
  "types": "./dist/eval/run.d.ts",
107
115
  "default": "./dist/eval/run.js"
108
116
  },
117
+ "./eval/triggers": {
118
+ "types": "./dist/eval/triggers.d.ts",
119
+ "default": "./dist/eval/triggers.js"
120
+ },
109
121
  "./eval/report": {
110
122
  "types": "./dist/eval/report.d.ts",
111
123
  "default": "./dist/eval/report.js"
@@ -266,6 +278,10 @@
266
278
  "types": "./dist/umbrella-current-shape/index.d.ts",
267
279
  "default": "./dist/umbrella-current-shape/index.js"
268
280
  },
281
+ "./issue-sync": {
282
+ "types": "./dist/issue-sync/index.d.ts",
283
+ "default": "./dist/issue-sync/index.js"
284
+ },
269
285
  "./task-surface": {
270
286
  "types": "./dist/task-surface/index.d.ts",
271
287
  "default": "./dist/task-surface/index.js"
@@ -289,8 +305,8 @@
289
305
  "provenance": true
290
306
  },
291
307
  "dependencies": {
292
- "@deftai/directive-content": "^0.77.0",
293
- "@deftai/directive-types": "^0.77.0",
308
+ "@deftai/directive-content": "^0.79.0",
309
+ "@deftai/directive-types": "^0.79.0",
294
310
  "archiver": "^8.0.0"
295
311
  },
296
312
  "scripts": {