ctxloom-pro 1.3.1 → 1.4.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.
package/dist/index.js CHANGED
@@ -49,7 +49,7 @@ import {
49
49
  validateDefaultRoot,
50
50
  wrapWithIndexingEnvelope,
51
51
  writeCODEOWNERS
52
- } from "./chunk-TIYTPWYN.js";
52
+ } from "./chunk-7GZVGIQL.js";
53
53
  import {
54
54
  VectorStore
55
55
  } from "./chunk-DVI2RWJR.js";
@@ -1019,7 +1019,7 @@ try {
1019
1019
  } catch {
1020
1020
  }
1021
1021
  var args = process.argv.slice(2);
1022
- var ctxloomVersion = "1.3.1".length > 0 ? "1.3.1" : "dev";
1022
+ var ctxloomVersion = "1.4.0".length > 0 ? "1.4.0" : "dev";
1023
1023
  if (args.includes("--version") || args.includes("-v")) {
1024
1024
  process.stdout.write(`ctxloom ${ctxloomVersion}
1025
1025
  `);
@@ -1092,7 +1092,7 @@ async function checkLicense() {
1092
1092
  if (command !== void 0 && LICENSE_GATE_BYPASS_COMMANDS.has(command)) return;
1093
1093
  const ciKey = process.env["CTXLOOM_LICENSE_KEY"];
1094
1094
  if (ciKey) {
1095
- const { ApiClient } = await import("./src-KTFHRVTO.js");
1095
+ const { ApiClient } = await import("./src-CH2OSHKF.js");
1096
1096
  const client = new ApiClient(process.env["CTXLOOM_API_BASE"]);
1097
1097
  try {
1098
1098
  const result = await client.validate(ciKey, "ci-ephemeral");
@@ -1444,6 +1444,9 @@ async function main() {
1444
1444
  process.stdout.write(` ${style.dim("Root:")} ${initRoot}
1445
1445
 
1446
1446
  `);
1447
+ const skipHarness = process.argv.includes("--skip-harness");
1448
+ const dryRun = process.argv.includes("--dry-run");
1449
+ const force = process.argv.includes("--force");
1447
1450
  try {
1448
1451
  const result = runInit(initRoot);
1449
1452
  const mcpLabel = result.mcpJson.created ? `${style.bold("Created")} ${result.mcpJson.path}` : result.mcpJson.merged ? `${style.bold("Merged ctxloom entry into")} ${result.mcpJson.path}` : `${style.dim("Already up to date:")} ${result.mcpJson.path}`;
@@ -1456,10 +1459,33 @@ async function main() {
1456
1459
  process.stdout.write(` ${warn(w)}
1457
1460
  `);
1458
1461
  }
1462
+ if (!skipHarness) {
1463
+ process.stdout.write("\n");
1464
+ const { installHarness } = await import("./src-CH2OSHKF.js");
1465
+ const h = installHarness({ cwd: initRoot, dryRun, force });
1466
+ const harnessFiles = [
1467
+ h.claudeMd,
1468
+ h.agentsMd,
1469
+ h.geminiMd,
1470
+ h.hooksJson,
1471
+ h.sessionStartSh,
1472
+ ...h.skills
1473
+ ];
1474
+ for (const fr of harnessFiles) {
1475
+ const rel = path4.relative(initRoot, fr.path);
1476
+ const label = fr.alreadyCorrect ? `${style.dim("Already up to date:")} ${rel}` : fr.created ? `${style.bold(dryRun ? "Would create" : "Created")} ${rel}` : `${style.bold(dryRun ? "Would update" : "Updated")} ${rel}`;
1477
+ process.stdout.write(` ${success(label)}
1478
+ `);
1479
+ }
1480
+ for (const w of h.warnings) {
1481
+ process.stdout.write(` ${warn(w)}
1482
+ `);
1483
+ }
1484
+ }
1459
1485
  process.stdout.write("\n");
1460
1486
  process.stdout.write(nextStep("Build the index", "ctxloom index"));
1461
1487
  process.stdout.write(
1462
- ` ${style.dim("Then reopen your AI tool in this directory to pick up the new .mcp.json.")}
1488
+ ` ${style.dim("Then reopen your AI tool in this directory to pick up the new .mcp.json + hooks.")}
1463
1489
 
1464
1490
  `
1465
1491
  );
@@ -1497,7 +1523,7 @@ async function main() {
1497
1523
  process.exit(1);
1498
1524
  }
1499
1525
  if (alias !== void 0) {
1500
- const { validateAlias } = await import("./src-KTFHRVTO.js");
1526
+ const { validateAlias } = await import("./src-CH2OSHKF.js");
1501
1527
  const v = validateAlias(alias);
1502
1528
  if (!v.ok) {
1503
1529
  console.error(`[ctxloom] Invalid alias: ${v.reason}`);
@@ -1761,7 +1787,7 @@ Suggested reviewers for ${files.length} file(s):`);
1761
1787
  process.stderr.write("[ctxloom] --limit must be a non-negative integer (0 for unlimited)\n");
1762
1788
  process.exit(2);
1763
1789
  }
1764
- const { loadRulesConfig, RulesChecker, formatText, formatJson, RulesConfigError } = await import("./src-KTFHRVTO.js");
1790
+ const { loadRulesConfig, RulesChecker, formatText, formatJson, RulesConfigError } = await import("./src-CH2OSHKF.js");
1765
1791
  let config;
1766
1792
  try {
1767
1793
  config = await loadRulesConfig(root);
@@ -1785,7 +1811,7 @@ Suggested reviewers for ${files.length} file(s):`);
1785
1811
  }
1786
1812
  let graph;
1787
1813
  if (useSnapshot) {
1788
- const { DependencyGraph: DG } = await import("./src-KTFHRVTO.js");
1814
+ const { DependencyGraph: DG } = await import("./src-CH2OSHKF.js");
1789
1815
  graph = new DG();
1790
1816
  const loaded = await graph.loadSnapshotOnly(root);
1791
1817
  if (!loaded) {
@@ -1794,7 +1820,7 @@ Suggested reviewers for ${files.length} file(s):`);
1794
1820
  }
1795
1821
  } else {
1796
1822
  process.stderr.write("[ctxloom] Building dependency graph...\n");
1797
- const { ASTParser: ASTParser2, DependencyGraph: DependencyGraph2 } = await import("./src-KTFHRVTO.js");
1823
+ const { ASTParser: ASTParser2, DependencyGraph: DependencyGraph2 } = await import("./src-CH2OSHKF.js");
1798
1824
  let parser;
1799
1825
  try {
1800
1826
  parser = new ASTParser2();
@@ -3,10 +3,13 @@ import {
3
3
  ApiClient,
4
4
  AuthorResolver,
5
5
  BAND_PCT,
6
+ CTXLOOM_HOOK_ENTRIES,
7
+ CTXLOOM_SKILLS,
6
8
  CallGraphIndex,
7
9
  ChurnIndex,
8
10
  CoChangeIndex,
9
11
  CommunityDetector,
12
+ DEFAULT_HMAC_KEY,
10
13
  DEFAULT_REVIEW_CONFIG,
11
14
  DependencyGraph,
12
15
  EmailAlreadyUsedError,
@@ -30,11 +33,14 @@ import {
30
33
  PathValidator,
31
34
  ProjectStateManager,
32
35
  RISK_WEIGHTS,
36
+ RULES_BLOCK_CONTENT,
37
+ RULES_BLOCK_NAME,
33
38
  RepoRegistry,
34
39
  RuleManager,
35
40
  RulesChecker,
36
41
  RulesConfigError,
37
42
  SCORE_FLOOR,
43
+ SESSION_START_FULL,
38
44
  SILO_BUS_FACTOR,
39
45
  SeatLimitError,
40
46
  Skeletonizer,
@@ -48,6 +54,7 @@ import {
48
54
  buildBlastRadiusXml,
49
55
  buildCodeownersBlock,
50
56
  captureError,
57
+ computeBlockHmac,
51
58
  computeRiskBreakdown,
52
59
  computeRiskCaps,
53
60
  createProjectState,
@@ -56,6 +63,7 @@ import {
56
63
  detectChanges,
57
64
  disposeProjectState,
58
65
  ensureVectorsInitialized,
66
+ extractBlock,
59
67
  extractImports,
60
68
  extractNotebookLanguage,
61
69
  extractNotebookPythonSource,
@@ -70,6 +78,7 @@ import {
70
78
  getOrCreateDistinctId,
71
79
  getTelemetryLevel,
72
80
  hashProjectRoot,
81
+ installHarness,
73
82
  isActive,
74
83
  isSiloed,
75
84
  listNamedSnapshots,
@@ -87,6 +96,7 @@ import {
87
96
  recordTrendSnapshot,
88
97
  renderStatusXml,
89
98
  requireActive,
99
+ resolveHmacKey,
90
100
  resolveImport,
91
101
  resolveProjectRoot,
92
102
  resolveViaGitHubApi,
@@ -97,13 +107,17 @@ import {
97
107
  shouldEmitFirstReviewRun,
98
108
  shouldEmitInstallCompleted,
99
109
  shouldShowTelemetryNotice,
110
+ skillFilePath,
100
111
  startTrial,
101
112
  track,
113
+ upsertBlock,
102
114
  validateAlias,
103
115
  validateDefaultRoot,
116
+ verifyBlock,
117
+ wrapBlock,
104
118
  wrapWithIndexingEnvelope,
105
119
  writeCODEOWNERS
106
- } from "./chunk-TIYTPWYN.js";
120
+ } from "./chunk-7GZVGIQL.js";
107
121
  import {
108
122
  VectorStore
109
123
  } from "./chunk-DVI2RWJR.js";
@@ -122,10 +136,13 @@ export {
122
136
  ApiClient,
123
137
  AuthorResolver,
124
138
  BAND_PCT,
139
+ CTXLOOM_HOOK_ENTRIES,
140
+ CTXLOOM_SKILLS,
125
141
  CallGraphIndex,
126
142
  ChurnIndex,
127
143
  CoChangeIndex,
128
144
  CommunityDetector,
145
+ DEFAULT_HMAC_KEY,
129
146
  DEFAULT_REVIEW_CONFIG,
130
147
  DependencyGraph,
131
148
  EMBEDDING_DIMENSION,
@@ -150,11 +167,14 @@ export {
150
167
  PathValidator,
151
168
  ProjectStateManager,
152
169
  RISK_WEIGHTS,
170
+ RULES_BLOCK_CONTENT,
171
+ RULES_BLOCK_NAME,
153
172
  RepoRegistry,
154
173
  RuleManager,
155
174
  RulesChecker,
156
175
  RulesConfigError,
157
176
  SCORE_FLOOR,
177
+ SESSION_START_FULL,
158
178
  SILO_BUS_FACTOR,
159
179
  SeatLimitError,
160
180
  Skeletonizer,
@@ -170,6 +190,7 @@ export {
170
190
  buildCodeownersBlock,
171
191
  captureError,
172
192
  collectFiles,
193
+ computeBlockHmac,
173
194
  computeRiskBreakdown,
174
195
  computeRiskCaps,
175
196
  createProjectState,
@@ -178,6 +199,7 @@ export {
178
199
  detectChanges,
179
200
  disposeProjectState,
180
201
  ensureVectorsInitialized,
202
+ extractBlock,
181
203
  extractImports,
182
204
  extractNotebookLanguage,
183
205
  extractNotebookPythonSource,
@@ -194,6 +216,7 @@ export {
194
216
  getTelemetryLevel,
195
217
  hashProjectRoot,
196
218
  indexDirectory,
219
+ installHarness,
197
220
  isActive,
198
221
  isSiloed,
199
222
  listNamedSnapshots,
@@ -212,6 +235,7 @@ export {
212
235
  recordTrendSnapshot,
213
236
  renderStatusXml,
214
237
  requireActive,
238
+ resolveHmacKey,
215
239
  resolveImport,
216
240
  resolveProjectRoot,
217
241
  resolveViaGitHubApi,
@@ -222,11 +246,15 @@ export {
222
246
  shouldEmitFirstReviewRun,
223
247
  shouldEmitInstallCompleted,
224
248
  shouldShowTelemetryNotice,
249
+ skillFilePath,
225
250
  startTrial,
226
251
  track,
252
+ upsertBlock,
227
253
  validateAlias,
228
254
  validateDefaultRoot,
255
+ verifyBlock,
256
+ wrapBlock,
229
257
  wrapWithIndexingEnvelope,
230
258
  writeCODEOWNERS
231
259
  };
232
- //# sourceMappingURL=src-KTFHRVTO.js.map
260
+ //# sourceMappingURL=src-CH2OSHKF.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ctxloom-pro",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "ctxloom — The Universal Code Context Engine. A local-first MCP server providing intelligent code context via hybrid Vector + AST + Graph search with Skeletonization (92% token reduction).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",