@memnexus-ai/mx-agent-cli 0.1.90 → 0.1.91

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.
@@ -1,14 +1,17 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { readFileSync } from 'fs';
2
+ import { readFileSync, readdirSync } from 'fs';
3
3
  import { join } from 'path';
4
- const TEMPLATE_PATH = join(__dirname, '..', '..', '..', 'agent-config', 'CLAUDE.md.template');
5
- const MAX_LINES = 200;
4
+ const AGENT_CONFIG_DIR = join(__dirname, '..', '..', '..', 'agent-config');
5
+ const ROLEGUIDES_DIR = join(__dirname, '..', '..', '..', 'roleguides');
6
+ const TEMPLATE_PATH = join(AGENT_CONFIG_DIR, 'CLAUDE.md.template');
7
+ const CLAUDE_MD_MAX_LINES = 200;
8
+ const ROLEGUIDE_MAX_LINES = 1500;
6
9
  describe('CLAUDE.md template budget', () => {
7
- it(`must be ≤${MAX_LINES} lines (loaded every session across all teams)`, () => {
10
+ it(`must be ≤${CLAUDE_MD_MAX_LINES} lines (loaded every session across all teams)`, () => {
8
11
  const content = readFileSync(TEMPLATE_PATH, 'utf-8');
9
12
  const lineCount = content.split('\n').length;
10
- if (lineCount > MAX_LINES) {
11
- throw new Error(`CLAUDE.md template is ${lineCount} lines — exceeds the ${MAX_LINES}-line budget.\n` +
13
+ if (lineCount > CLAUDE_MD_MAX_LINES) {
14
+ throw new Error(`CLAUDE.md template is ${lineCount} lines — exceeds the ${CLAUDE_MD_MAX_LINES}-line budget.\n` +
12
15
  `Every line costs tokens × sessions × teams. To fix:\n` +
13
16
  ` 1. Move reference material to \`mx agent-help\` (CLI help)\n` +
14
17
  ` 2. Move team-specific content to roleguides or .ai/ instructions\n` +
@@ -16,7 +19,7 @@ describe('CLAUDE.md template budget', () => {
16
19
  ` 4. Consolidate overlapping sections\n` +
17
20
  `See: product/dev-log/platform-team/v1.57-claude-md-re-shrinkage.md`);
18
21
  }
19
- expect(lineCount).toBeLessThanOrEqual(MAX_LINES);
22
+ expect(lineCount).toBeLessThanOrEqual(CLAUDE_MD_MAX_LINES);
20
23
  });
21
24
  it('template file exists and is not empty', () => {
22
25
  const content = readFileSync(TEMPLATE_PATH, 'utf-8');
@@ -24,4 +27,36 @@ describe('CLAUDE.md template budget', () => {
24
27
  expect(content.split('\n').length).toBeGreaterThan(10);
25
28
  });
26
29
  });
30
+ describe('roleguide size budget', () => {
31
+ it(`all roleguides must be ≤${ROLEGUIDE_MAX_LINES} lines (loaded once per session)`, () => {
32
+ let files;
33
+ try {
34
+ files = readdirSync(ROLEGUIDES_DIR).filter(f => f.endsWith('.md'));
35
+ }
36
+ catch {
37
+ // Roleguides dir may not exist in test environment
38
+ return;
39
+ }
40
+ const oversize = [];
41
+ for (const file of files) {
42
+ const content = readFileSync(join(ROLEGUIDES_DIR, file), 'utf-8');
43
+ const lineCount = content.split('\n').length;
44
+ if (lineCount > ROLEGUIDE_MAX_LINES) {
45
+ oversize.push({ file, lines: lineCount });
46
+ }
47
+ }
48
+ if (oversize.length > 0) {
49
+ const details = oversize
50
+ .map(({ file, lines }) => ` - ${file}: ${lines} lines (${Math.round((lines / ROLEGUIDE_MAX_LINES - 1) * 100)}% over)`)
51
+ .join('\n');
52
+ // Warn but don't block — roleguide content is owned by consumer teams.
53
+ // Platform team flags oversize roleguides in known issues.
54
+ console.warn(`⚠ ${oversize.length} roleguide(s) exceed the ${ROLEGUIDE_MAX_LINES}-line budget:\n${details}\n` +
55
+ `Action: flag to respective teams to move details to named memories or appendices.`);
56
+ }
57
+ // Hard gate only for extreme violations (>20% over budget)
58
+ const extremeOversize = oversize.filter(({ lines }) => lines > ROLEGUIDE_MAX_LINES * 1.2);
59
+ expect(extremeOversize).toHaveLength(0);
60
+ });
61
+ });
27
62
  //# sourceMappingURL=template-budget.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-budget.test.js","sourceRoot":"","sources":["../../src/__tests__/template-budget.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;AAC9F,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,YAAY,SAAS,gDAAgD,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAE7C,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,wBAAwB,SAAS,iBAAiB;gBACpF,uDAAuD;gBACvD,gEAAgE;gBAChE,sEAAsE;gBACtE,8BAA8B;gBAC9B,yCAAyC;gBACzC,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"template-budget.test.js","sourceRoot":"","sources":["../../src/__tests__/template-budget.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AACvE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AACnE,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,YAAY,mBAAmB,gDAAgD,EAAE,GAAG,EAAE;QACvF,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAE7C,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,wBAAwB,mBAAmB,iBAAiB;gBAC9F,uDAAuD;gBACvD,gEAAgE;gBAChE,sEAAsE;gBACtE,8BAA8B;gBAC9B,yCAAyC;gBACzC,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,2BAA2B,mBAAmB,kCAAkC,EAAE,GAAG,EAAE;QACxF,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAA2C,EAAE,CAAC;QAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC7C,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,QAAQ;iBACrB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,mBAAmB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;iBACtH,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,uEAAuE;YACvE,2DAA2D;YAC3D,OAAO,CAAC,IAAI,CACV,KAAK,QAAQ,CAAC,MAAM,4BAA4B,mBAAmB,kBAAkB,OAAO,IAAI;gBAChG,mFAAmF,CACpF,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,mBAAmB,GAAG,GAAG,CAAC,CAAC;QAC1F,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memnexus-ai/mx-agent-cli",
3
- "version": "0.1.90",
3
+ "version": "0.1.91",
4
4
  "description": "CLI for creating and managing AI agent teams",
5
5
  "type": "module",
6
6
  "bin": {