@inkobytes/nexus 1.0.1 → 1.0.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.2 - 2026-06-03
4
+
5
+ - Collapsed large `nexus doctor` Git Privacy floods into grouped per-root summaries with sample paths.
6
+ - Prioritized `CONTINUITY.md` and `memories/` samples first so agent-local issues stay visible.
7
+
3
8
  ## 1.0.1 - 2026-06-02
4
9
 
5
10
  - Added colorized `nexus help` output for a more readable CLI experience.
package/README.md CHANGED
@@ -166,6 +166,7 @@ Doctor reports grouped issues:
166
166
  - missing Nexus files
167
167
  - package script exfiltration and install-hook risks
168
168
  - package privacy risks for local/private files
169
+ - grouped Git Privacy summaries for tracked private/local trees so large agent folders stay readable
169
170
  - stale nexus locks
170
171
  - missing agent instructions specifically for nexus
171
172
  - missing continuity and memory scaffolds
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkobytes/nexus",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Multi-agent coordination CLI for coding agents sharing a local repository",
5
5
  "type": "module",
6
6
  "bin": {
@@ -93,6 +93,8 @@ This project uses Nexus for multi-agent coordination.
93
93
  ### Nexus Rules
94
94
 
95
95
  - Claim before editing shared project files: \`nexus claim <path> @Agent "intent"\`.
96
+ - Nexus is agent-native and file-native, not feature-native: commit and release by file as soon as the file reaches a coherent checkpoint.
97
+ - Do not hold claims while waiting to bundle related files into one feature commit; that blocks other agents who may need the file next.
96
98
  - Release finished work through Nexus: \`nexus release <path> "commit message"\`.
97
99
  - Use \`nexus next @Agent\` for the next safe queue task.
98
100
  - Do not free-roam into unassigned or \`Auto-flow: no\` work without user approval.
@@ -673,6 +675,11 @@ export default function doctor(args) {
673
675
  for (const entry of entries) {
674
676
  const prefix = entry.ok ? '-' : '!';
675
677
  console.log(` ${prefix} ${entry.issue}`);
678
+ if (entry.details) {
679
+ for (const detail of entry.details) {
680
+ console.log(` ${detail}`);
681
+ }
682
+ }
676
683
  if (entry.fix) console.log(` Fix: ${entry.fix}`);
677
684
  if (!entry.ok) problemCount++;
678
685
  }
@@ -843,6 +850,20 @@ const PRIVATE_GIT_PATHS = [
843
850
  'USER.md',
844
851
  ];
845
852
 
853
+ const GIT_PRIVACY_COLLAPSE_ROOTS = [
854
+ '.agent-session-logs',
855
+ '.agent-*',
856
+ '.agy',
857
+ '.antigravitycli',
858
+ '.claude',
859
+ '.codex',
860
+ '.gemini',
861
+ '.nexus/local',
862
+ 'docs-priv',
863
+ 'scratch',
864
+ 'session-logs',
865
+ ];
866
+
846
867
  function scanPackagePrivacy(root) {
847
868
  const packagePath = join(root, 'package.json');
848
869
  if (!existsSync(packagePath)) return [];
@@ -886,10 +907,66 @@ function scanGitPrivacy(root) {
886
907
  if (result.status !== 0) return [];
887
908
 
888
909
  const tracked = result.stdout.split('\n').filter(Boolean);
889
- return tracked.map((file) => ({
890
- issue: `Git tracks private/local path: ${file}`,
891
- fix: 'Untrack it without deleting local files: `git rm --cached -r -- <path>`, then add an ignore rule.',
892
- }));
910
+ return summarizeGitPrivacyIssues(tracked);
911
+ }
912
+
913
+ function summarizeGitPrivacyIssues(tracked) {
914
+ const grouped = new Map();
915
+ const singles = [];
916
+
917
+ for (const file of tracked) {
918
+ const root = gitPrivacyRoot(file);
919
+ if (!root) {
920
+ singles.push(file);
921
+ continue;
922
+ }
923
+ if (!grouped.has(root)) grouped.set(root, []);
924
+ grouped.get(root).push(file);
925
+ }
926
+
927
+ const issues = [];
928
+
929
+ for (const file of singles.sort()) {
930
+ issues.push({
931
+ issue: `Git tracks private/local path: ${file}`,
932
+ fix: 'Untrack it without deleting local files: `git rm --cached -r -- <path>`, then add an ignore rule.',
933
+ });
934
+ }
935
+
936
+ for (const root of Array.from(grouped.keys()).sort()) {
937
+ const files = grouped.get(root).slice().sort(compareGitPrivacyFiles);
938
+ const samples = files.slice(0, 5);
939
+ const hiddenCount = files.length - samples.length;
940
+ const noun = files.length === 1 ? 'path' : 'paths';
941
+ const issue = `Git tracks private/local ${noun} under ${root}/ (${files.length} files)`;
942
+ const fix = 'Review the sample paths below. If the tree is intentionally tracked in this repo, keep it. Otherwise untrack it without deleting local files: `git rm --cached -r -- <path>`, then add an ignore rule.';
943
+ const details = samples.map((file) => `sample: ${file}`);
944
+ if (hiddenCount > 0) {
945
+ details.push(`...and ${hiddenCount} more tracked paths`);
946
+ }
947
+ issues.push({ issue, fix, details });
948
+ }
949
+
950
+ return issues;
951
+ }
952
+
953
+ function gitPrivacyRoot(file) {
954
+ for (const root of GIT_PRIVACY_COLLAPSE_ROOTS) {
955
+ if (matchesPrivatePath(file, root)) {
956
+ return root.replace(/\/$/, '');
957
+ }
958
+ }
959
+ return '';
960
+ }
961
+
962
+ function compareGitPrivacyFiles(a, b) {
963
+ return gitPrivacyPriority(a) - gitPrivacyPriority(b) || a.localeCompare(b);
964
+ }
965
+
966
+ function gitPrivacyPriority(file) {
967
+ if (/\/(CONTINUITY\.md|memories\/)/.test(file)) return 0;
968
+ if (/\/(AGENTS\.md|CLAUDE\.md|GEMINI\.md)$/.test(file)) return 1;
969
+ return 2;
893
970
  }
894
971
 
895
972
  function scanGeneratedArtifacts(root) {
@@ -379,6 +379,8 @@ This project uses Nexus for multi-agent coordination.
379
379
  ### Nexus Rules
380
380
 
381
381
  - Claim before editing shared project files: \`nexus claim <path> @Agent "intent"\`.
382
+ - Nexus is agent-native and file-native, not feature-native: commit and release by file as soon as the file reaches a coherent checkpoint.
383
+ - Do not hold claims while waiting to bundle related files into one feature commit; that blocks other agents who may need the file next.
382
384
  - Release finished work through Nexus: \`nexus release <path> "commit message"\`.
383
385
  - Use \`nexus next @Agent\` for the next safe queue task.
384
386
  - Do not free-roam into unassigned or \`Auto-flow: no\` work without user approval.
@@ -7,6 +7,8 @@ import { listLocks } from '../lib/lockManager.js';
7
7
  import { getConfig } from '../lib/config.js';
8
8
  import { spawnSync } from 'child_process';
9
9
 
10
+ const FILE_FLOW_WARNING = 'Stale claim. Commit this file now.';
11
+
10
12
  export default function status(args) {
11
13
  const config = getConfig();
12
14
  const locks = listLocks();
@@ -36,6 +38,9 @@ export default function status(args) {
36
38
  const staleTag = stale ? ' ⚠️ STALE' : '';
37
39
  console.log(` 🔒 ${lock.target}`);
38
40
  console.log(` Agent: ${agent} | Age: ${ageStr}${staleTag}`);
41
+ if (stale) {
42
+ console.log(` Warning: ${FILE_FLOW_WARNING}`);
43
+ }
39
44
  }
40
45
 
41
46
  console.log('');