repo-nexus 0.2.9 → 0.2.11

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/README.md CHANGED
@@ -202,7 +202,7 @@ rnex plugin disable karpathy-llm
202
202
  ### Built-in Plugin: `karpathy-llm`
203
203
  The `karpathy-llm` plugin packages Andrej Karpathy's verified LLM agent design patterns, context engineering principles, and the autonomous **Karpathy LLM Wiki** architecture (based on [`setup-karpathy-wiki.md`](https://github.com/nu-nenoi/ai-toolkit/blob/main/prompts/setup-karpathy-wiki.md), available locally in `toolkit/prompts/setup-karpathy-wiki.md`):
204
204
  * **Step 0 — Configuration Interview:** Guides setup decisions including target agent instruction file (`AGENTS.md`, `CLAUDE.md`, `.cursor/rules/wiki.mdc`, etc.), wiki purpose (codebase, second brain, research, content archive), organization layout (flat vs structured), and automation enablement.
205
- * **The 4 Cardinal Agent Rules** (`.agents/rules/KARPATHY_RULES.md`):
205
+ * **The 4 Cardinal Agent Rules** (`.rnex/rules/KARPATHY_RULES.md`):
206
206
  1. *Think Before Coding:* Formulate explicit assumptions, boundary checks, and trade-offs before writing code.
207
207
  2. *Simplicity First:* Minimal abstractions, readable implementations, zero speculative boilerplate.
208
208
  3. *Surgical Changes:* Minimal blast radius, preserved comments/docstrings, and tight diffs.
@@ -213,9 +213,9 @@ The `karpathy-llm` plugin packages Andrej Karpathy's verified LLM agent design p
213
213
  * **Control Index (`/wiki/index.md`):** Master navigation index with `lint_trigger: enabled|disabled` toggle.
214
214
  * **Rolling Context (`/wiki/hot.md`):** ~500-word quick-orient context cache for AI agents.
215
215
  * **Operation Log (`/wiki/_log.md`):** Append-only audit trail of ingest and lint operations.
216
- * **Session Counter (`/wiki/.lint_trigger_counter`):** Machine-local state tracking session activity (gitignored).
217
- * **Autonomous Lint Trigger (`scripts/wiki-lint-trigger.sh`):** Session counter and maintenance alerts on session 1 and every 15 sessions.
218
- * **Standardized Workflows (`.agent/workflows/`):**
216
+ * **Session Counter (`.rnex/.lint_trigger_counter`):** Machine-local state tracking session activity (gitignored).
217
+ * **Autonomous Lint Trigger (`.rnex/scripts/wiki-lint-trigger.sh`):** Session counter and maintenance alerts on session 1 and every 15 sessions.
218
+ * **Standardized Workflows (`.rnex/workflows/`):**
219
219
  * `wiki-ingest.md`: 8-step protocol decomposing raw source documents into 5–25 atomic wiki pages.
220
220
  * `wiki-lint.md`: 10-step protocol validating paths, recomputing `mentioned_in`, removing orphans, resolving contradictions, identifying gaps, suggesting source candidates, and rebuilding indexes.
221
221
 
@@ -238,7 +238,8 @@ ai_files:
238
238
 
239
239
  # Workspace plugins
240
240
  plugins:
241
- - karpathy-llm
241
+ karpathy-llm:
242
+ lint_trigger_enabled: true
242
243
 
243
244
  # Member repositories
244
245
  repos:
@@ -71,10 +71,11 @@ ai_files:
71
71
  # karpathy-llm — Andrej Karpathy's agent behavioral principles,
72
72
  # multi-repo context engineering, and LLM Wiki pattern
73
73
  #
74
- # Local / custom plugins can also be placed in .nexus/plugins/<name>/
74
+ # Local / custom plugins can also be placed in .rnex/plugins/<name>/
75
75
 
76
76
  plugins:
77
- # - karpathy-llm
77
+ # karpathy-llm:
78
+ # lint_trigger_enabled: true
78
79
 
79
80
  # ------------------------------------------------------------------------------
80
81
  # repos — Member repositories managed by Repo Nexus
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repo-nexus",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "Lightweight, zero-dependency companion tool for multi-repo workspaces and shared AI context via symlinks (no git submodules)",
5
5
  "bin": {
6
6
  "repo-nexus": "rnex",
package/rnex CHANGED
@@ -171,17 +171,60 @@ yaml_list_ai_files() {
171
171
  '
172
172
  }
173
173
 
174
- # Parse list of plugins from rnex.yaml
174
+ # Parse list of plugins from rnex.yaml (supports both mapping and list formats)
175
175
  yaml_list_plugins() {
176
176
  [ -f "$WORKSPACE_YAML" ] || return 0
177
177
  awk '
178
- /^plugins:/ { p=1; next }
178
+ /^plugins:[ ]*$/ || /^plugins:[ ]*#/ { p=1; next }
179
179
  p && /^[^ #]/ { exit }
180
180
  p && /^[ ]*-[ ]*/ {
181
- sub(/^[ ]*-[ ]*/, "");
182
- sub(/[ ]*#.*/, "");
183
- if (length($0) > 0) print $0
181
+ line = $0
182
+ sub(/^[ ]*-[ ]*/, "", line)
183
+ sub(/[ ]*#.*/, "", line)
184
+ sub(/[ ]*:.*$/, "", line)
185
+ gsub(/[[:space:]]/, "", line)
186
+ if (length(line) > 0) print line
187
+ next
188
+ }
189
+ p && /^ [a-zA-Z0-9_.-]+:[ ]*(#.*)?$/ {
190
+ line = $0
191
+ sub(/^[ ]*/, "", line)
192
+ sub(/:.*/, "", line)
193
+ gsub(/[[:space:]]/, "", line)
194
+ if (length(line) > 0) print line
195
+ next
196
+ }
197
+ p && /^ [a-zA-Z0-9_.-]+:[ ]+[^#[:space:]]/ {
198
+ line = $0
199
+ sub(/^[ ]*/, "", line)
200
+ sub(/:.*/, "", line)
201
+ gsub(/[[:space:]]/, "", line)
202
+ if (length(line) > 0) print line
203
+ next
204
+ }
205
+ ' "$WORKSPACE_YAML"
206
+ }
207
+
208
+ # Get a configuration field value for a plugin under plugins.<plugin>.<field>
209
+ yaml_plugin_get() {
210
+ _plugin="$1"; _field="$2"
211
+ [ -f "$WORKSPACE_YAML" ] || return 0
212
+ awk -v plugin="$_plugin" -v field="$_field" '
213
+ /^plugins:[ ]*$/ || /^plugins:[ ]*#/ { in_plugins=1; next }
214
+ in_plugins && /^[^ #]/ { in_plugins=0 }
215
+ in_plugins && match($0, "^ " plugin ":[ ]*") { in_target=1; next }
216
+ in_target && /^ / {
217
+ line = $0
218
+ sub(/^[ ]*/, "", line)
219
+ if (match(line, "^" field ":[ ]*")) {
220
+ sub("^" field ":[ ]*", "", line)
221
+ sub(/[ ]*#.*$/, "", line)
222
+ gsub(/^["\x27]|["\x27]$/, "", line)
223
+ print line
224
+ exit
225
+ }
184
226
  }
227
+ in_target && !/^ / && !/^[ ]*#/ { in_target=0 }
185
228
  ' "$WORKSPACE_YAML"
186
229
  }
187
230
 
@@ -196,28 +239,44 @@ yaml_enable_plugin() {
196
239
  printf '\nplugins:\n' >> "$WORKSPACE_YAML"
197
240
  fi
198
241
  _tmp="$(mktemp)"
199
- awk -v name="$_name" '
200
- /^plugins:/ {
201
- print
202
- printf " - %s\n", name
203
- added=1
204
- next
205
- }
206
- { print }
207
- ' "$WORKSPACE_YAML" > "$_tmp" && mv "$_tmp" "$WORKSPACE_YAML"
242
+ if [ "$_name" = "karpathy-llm" ]; then
243
+ awk -v name="$_name" '
244
+ /^plugins:[ ]*$/ || /^plugins:[ ]*#/ {
245
+ print
246
+ printf " %s:\n lint_trigger_enabled: true\n", name
247
+ added=1
248
+ next
249
+ }
250
+ { print }
251
+ ' "$WORKSPACE_YAML" > "$_tmp" && mv "$_tmp" "$WORKSPACE_YAML"
252
+ else
253
+ awk -v name="$_name" '
254
+ /^plugins:[ ]*$/ || /^plugins:[ ]*#/ {
255
+ print
256
+ printf " %s: {}\n", name
257
+ added=1
258
+ next
259
+ }
260
+ { print }
261
+ ' "$WORKSPACE_YAML" > "$_tmp" && mv "$_tmp" "$WORKSPACE_YAML"
262
+ fi
208
263
  }
209
264
 
210
265
  yaml_disable_plugin() {
211
266
  _name="$1"
212
267
  _tmp="$(mktemp)"
213
268
  awk -v name="$_name" '
214
- /^plugins:/ { in_plugins=1; print; next }
269
+ /^plugins:[ ]*$/ || /^plugins:[ ]*#/ { in_plugins=1; print; next }
215
270
  in_plugins && /^[^ #]/ { in_plugins=0 }
271
+ in_plugins && match($0, "^ " name ":[ ]*") { in_target=1; next }
272
+ in_target && (/^ / || /^[ ]*$/) { next }
273
+ in_target && !/^ / { in_target=0 }
216
274
  in_plugins && $0 ~ ("^[ ]*-[ ]*" name "[ ]*($|#)") { next }
217
275
  { print }
218
276
  ' "$WORKSPACE_YAML" > "$_tmp" && mv "$_tmp" "$WORKSPACE_YAML"
219
277
  }
220
278
 
279
+
221
280
  # Parse list of repos from rnex.yaml
222
281
  yaml_list_repos() {
223
282
  [ -f "$WORKSPACE_YAML" ] || return 0
@@ -461,6 +520,7 @@ find_plugin_dir() {
461
520
  _query="$1"
462
521
  _sdir="$(dirname "$SCRIPT_LOCATION")"
463
522
  for _cand in \
523
+ "$NEXUS_DIR/.rnex/plugins/$_query" \
464
524
  "$NEXUS_DIR/.nexus/plugins/$_query" \
465
525
  "$NEXUS_DIR/plugins/$_query" \
466
526
  "$NEXUS_DIR/toolkit/plugins/$_query" \
@@ -479,6 +539,7 @@ list_all_available_plugin_dirs() {
479
539
  for _parent in \
480
540
  "$_sdir/toolkit/plugins" \
481
541
  "$NEXUS_DIR/toolkit/plugins" \
542
+ "$NEXUS_DIR/.rnex/plugins" \
482
543
  "$NEXUS_DIR/.nexus/plugins" \
483
544
  "$NEXUS_DIR/plugins"; do
484
545
  if [ -d "$_parent" ]; then
@@ -599,6 +660,16 @@ sync_plugins() {
599
660
  log_ok "Initialized template: $_d"
600
661
  fi
601
662
  done
663
+
664
+ # Reconcile plugin configuration (e.g., lint_trigger_enabled for karpathy-llm)
665
+ if [ "$_pname" = "karpathy-llm" ] && [ -f "$NEXUS_DIR/wiki/index.md" ]; then
666
+ _lte="$(yaml_plugin_get "karpathy-llm" "lint_trigger_enabled")"
667
+ if [ "$_lte" = "false" ]; then
668
+ sed -i.bak 's/lint_trigger:[ ]*enabled/lint_trigger: disabled/' "$NEXUS_DIR/wiki/index.md" 2>/dev/null && rm -f "$NEXUS_DIR/wiki/index.md.bak"
669
+ elif [ "$_lte" = "true" ]; then
670
+ sed -i.bak 's/lint_trigger:[ ]*disabled/lint_trigger: enabled/' "$NEXUS_DIR/wiki/index.md" 2>/dev/null && rm -f "$NEXUS_DIR/wiki/index.md.bak"
671
+ fi
672
+ fi
602
673
  done
603
674
  }
604
675
 
@@ -1018,6 +1089,12 @@ cmd_plugin_info() {
1018
1089
  [ -n "$_author" ] && printf '%bAuthor:%b %s\n' "$_BOLD" "$_NC" "$_author"
1019
1090
  [ -n "$_home" ] && printf '%bHomepage:%b %s\n' "$_BOLD" "$_NC" "$_home"
1020
1091
  printf '%bLocation:%b %s\n' "$_BOLD" "$_NC" "$_pdir"
1092
+ if yaml_has_plugin "$_name"; then
1093
+ _lte="$(yaml_plugin_get "$_name" "lint_trigger_enabled")"
1094
+ if [ -n "$_lte" ]; then
1095
+ printf '%bConfiguration:%b lint_trigger_enabled: %s\n' "$_BOLD" "$_NC" "$_lte"
1096
+ fi
1097
+ fi
1021
1098
 
1022
1099
  printf '\n%bProvided AI Context Files:%b\n' "$_BOLD" "$_NC"
1023
1100
  plugin_list_ai_files "$_pdir" | while read -r _item; do
@@ -1102,12 +1179,12 @@ cmd_plugin_enable() {
1102
1179
  fi
1103
1180
  done
1104
1181
 
1105
- # Ensure machine-local state files (like wiki/.lint_trigger_counter) are gitignored
1182
+ # Ensure machine-local state files (like .rnex/.lint_trigger_counter) are gitignored
1106
1183
  _gi="$NEXUS_DIR/.gitignore"
1107
- if [ -f "$NEXUS_DIR/scripts/wiki-lint-trigger.sh" ]; then
1108
- if [ ! -f "$_gi" ] || ! grep -qF "wiki/.lint_trigger_counter" "$_gi" 2>/dev/null; then
1109
- printf '\n# Karpathy LLM Wiki session counter\nwiki/.lint_trigger_counter\n.lint_trigger_counter\n' >> "$_gi"
1110
- log_dim "Added 'wiki/.lint_trigger_counter' to .gitignore"
1184
+ if [ -f "$NEXUS_DIR/.rnex/scripts/wiki-lint-trigger.sh" ] || [ -f "$NEXUS_DIR/scripts/wiki-lint-trigger.sh" ]; then
1185
+ if [ ! -f "$_gi" ] || ! grep -qF ".rnex/.lint_trigger_counter" "$_gi" 2>/dev/null; then
1186
+ printf '\n# Repo Nexus internal state\n.rnex/.lint_trigger_counter\nwiki/.lint_trigger_counter\n.lint_trigger_counter\n' >> "$_gi"
1187
+ log_dim "Added '.rnex/.lint_trigger_counter' to .gitignore"
1111
1188
  fi
1112
1189
  fi
1113
1190
 
@@ -85,18 +85,20 @@ my-workspace/
85
85
  ├── wiki/
86
86
  │ ├── index.md # Master catalog + lint_trigger toggle
87
87
  │ ├── hot.md # Rolling ~500-word quick-orient context
88
- │ ├── _log.md # Ingestion & lint audit history
88
+ │ └── _log.md # Ingestion & lint audit history
89
+ ├── .rnex/
90
+ │ ├── rules/
91
+ │ │ └── KARPATHY_RULES.md # Cardinal principles & wiki rules (auto-symlinked)
92
+ │ ├── workflows/
93
+ │ │ ├── wiki-ingest.md # 8-step decomposition & ingestion workflow
94
+ │ │ └── wiki-lint.md # 10-step graph validation & maintenance workflow
95
+ │ ├── scripts/
96
+ │ │ └── wiki-lint-trigger.sh # Executable session counter & lint alert
97
+ │ ├── templates/
98
+ │ │ ├── wiki-page.template.md # Atomic page template with typed relations
99
+ │ │ └── LLM_WIKI.sample.md # Sample wiki walkthrough
89
100
  │ └── .lint_trigger_counter # Session counter (gitignored)
90
- ├── scripts/
91
- │ └── wiki-lint-trigger.sh # Executable session counter & lint alert
92
- ├── .agents/rules/
93
- │ └── KARPATHY_RULES.md # Cardinal principles & wiki rules (auto-symlinked)
94
- ├── .agent/workflows/
95
- │ ├── wiki-ingest.md # 8-step decomposition & ingestion workflow
96
- │ └── wiki-lint.md # 10-step graph validation & maintenance workflow
97
- └── docs/
98
- ├── wiki-page.template.md # Atomic page template with typed relations
99
- └── LLM_WIKI.sample.md # Sample wiki walkthrough
101
+ └── rnex.yaml # Plugin configuration
100
102
  ```
101
103
 
102
104
  ---
@@ -110,19 +112,20 @@ rnex plugin enable karpathy-llm
110
112
  ```
111
113
 
112
114
  This command:
113
- 1. Adds `karpathy-llm` to `plugins:` in `rnex.yaml`.
114
- 2. Copies initial templates (`wiki/index.md`, `wiki/_log.md`, `wiki/hot.md`, `raw/.gitkeep`, `docs/wiki-page.template.md`, `docs/LLM_WIKI.sample.md`, `scripts/wiki-lint-trigger.sh`).
115
- 3. Links `KARPATHY_RULES.md` and workflows into workspace root (`.agents/rules/`, `.agent/workflows/`).
116
- 4. Ensures `wiki/.lint_trigger_counter` is added to `.gitignore`.
115
+ 1. Adds `karpathy-llm` to `plugins:` in `rnex.yaml` with default configuration (`lint_trigger_enabled: true`).
116
+ 2. Copies initial templates (`wiki/index.md`, `wiki/_log.md`, `wiki/hot.md`, `raw/.gitkeep`, `.rnex/templates/wiki-page.template.md`, `.rnex/templates/LLM_WIKI.sample.md`, `.rnex/scripts/wiki-lint-trigger.sh`).
117
+ 3. Links `KARPATHY_RULES.md` and workflows into `.rnex/rules/` and `.rnex/workflows/`.
118
+ 4. Ensures `.rnex/.lint_trigger_counter` is added to `.gitignore`.
117
119
  5. Syncs scope links and AI context files across all registered member repositories via `rnex sync`.
118
120
 
119
121
  ### Option 2: Declarative in `rnex.yaml`
120
122
 
121
- Add `karpathy-llm` to `plugins:` in `rnex.yaml`:
123
+ Configure `karpathy-llm` under `plugins:` in `rnex.yaml`:
122
124
 
123
125
  ```yaml
124
126
  plugins:
125
- - karpathy-llm
127
+ karpathy-llm:
128
+ lint_trigger_enabled: true
126
129
  ```
127
130
 
128
131
  Then synchronize:
@@ -137,7 +140,7 @@ rnex sync
137
140
 
138
141
  1. **Intake:** Drop raw research papers, meeting notes, PRDs, or architecture specs into `/raw/` unmodified.
139
142
  2. **Ingest:** Instruct your AI assistant: *"Run wiki-ingest on raw/source-document.md"*.
140
- 3. **Session Cadence:** After sessions where repository files were edited, run `scripts/wiki-lint-trigger.sh`.
143
+ 3. **Session Cadence:** After sessions where repository files were edited, run `.rnex/scripts/wiki-lint-trigger.sh`.
141
144
  4. **Maintenance:** If prompted by `[WIKI MAINTENANCE DUE]`, instruct the assistant: *"Run wiki-lint"*.
142
145
  5. **Toggle Automation:** Edit `lint_trigger: enabled` or `lint_trigger: disabled` in `/wiki/index.md` anytime.
143
146
 
@@ -4,14 +4,14 @@ description: Andrej Karpathy's agent behavioral principles, context engineering
4
4
  author: nu-nenoi
5
5
  homepage: https://github.com/nu-nenoi/repo-nexus
6
6
  ai_files:
7
- - rules/KARPATHY_RULES.md: .agents/rules/KARPATHY_RULES.md
8
- - workflows/wiki-ingest.md: .agent/workflows/wiki-ingest.md
9
- - workflows/wiki-lint.md: .agent/workflows/wiki-lint.md
7
+ - rules/KARPATHY_RULES.md: .rnex/rules/KARPATHY_RULES.md
8
+ - workflows/wiki-ingest.md: .rnex/workflows/wiki-ingest.md
9
+ - workflows/wiki-lint.md: .rnex/workflows/wiki-lint.md
10
10
  templates:
11
11
  - templates/index.md: wiki/index.md
12
12
  - templates/_log.md: wiki/_log.md
13
13
  - templates/hot.md: wiki/hot.md
14
14
  - templates/raw.gitkeep: raw/.gitkeep
15
- - templates/wiki-page.sample.md: docs/wiki-page.template.md
16
- - templates/LLM_WIKI.sample.md: docs/LLM_WIKI.sample.md
17
- - scripts/wiki-lint-trigger.sh: scripts/wiki-lint-trigger.sh
15
+ - templates/wiki-page.sample.md: .rnex/templates/wiki-page.template.md
16
+ - templates/LLM_WIKI.sample.md: .rnex/templates/LLM_WIKI.sample.md
17
+ - scripts/wiki-lint-trigger.sh: .rnex/scripts/wiki-lint-trigger.sh
@@ -54,10 +54,10 @@ When working in a repository with an active Karpathy LLM Wiki (`/wiki/` and `/ra
54
54
 
55
55
  - **Intake**: All source material (articles, transcripts, docs, notes) goes to `/raw/` unmodified. Never write directly to `/wiki/` without ingesting.
56
56
  - **Orientation**: Before answering domain questions, read `/wiki/index.md` to find relevant pages, then read only those pages. If `hot.md` exists, read it first as a quick-orient step.
57
- - **Ingestion**: When files appear in `/raw/`, run the `wiki-ingest` workflow (`.agent/workflows/wiki-ingest.md`). One source document typically produces many atomic pages (commonly 5–25 pages) — do not collapse a source into a single file.
58
- - **Cadence**: After any session where repository files were created, edited, or deleted, run `scripts/wiki-lint-trigger.sh`. If it outputs `[WIKI MAINTENANCE DUE]`, run the `wiki-lint` workflow (`.agent/workflows/wiki-lint.md`) before stopping.
57
+ - **Ingestion**: When files appear in `/raw/`, run the `wiki-ingest` workflow (`.rnex/workflows/wiki-ingest.md`). One source document typically produces many atomic pages (commonly 5–25 pages) — do not collapse a source into a single file.
58
+ - **Cadence**: After any session where repository files were created, edited, or deleted, run `.rnex/scripts/wiki-lint-trigger.sh`. If it outputs `[WIKI MAINTENANCE DUE]`, run the `wiki-lint` workflow (`.rnex/workflows/wiki-lint.md`) before stopping.
59
59
  - **No-op sessions**: Do not run the trigger after read-only or purely conversational sessions where no files changed.
60
- - **Enable/disable**: Wiki automation is controlled by `lint_trigger: enabled|disabled` in `/wiki/index.md` frontmatter. Edit that field to toggle — the change is committed and visible to the whole team.
60
+ - **Enable/disable**: Wiki automation is controlled by `lint_trigger_enabled: true|false` in `rnex.yaml` (and `lint_trigger: enabled|disabled` in `/wiki/index.md` frontmatter). Edit either field to toggle.
61
61
 
62
62
  ---
63
63
 
@@ -1,13 +1,28 @@
1
1
  #!/bin/sh
2
2
  # ============================================================================
3
- # scripts/wiki-lint-trigger.sh — Autonomous Karpathy Wiki Lint Trigger
3
+ # .rnex/scripts/wiki-lint-trigger.sh — Autonomous Karpathy Wiki Lint Trigger
4
4
  # ============================================================================
5
- # Check if wiki/index.md exists and contains lint_trigger: enabled.
6
- # If not, exit silently with code 0.
5
+
6
+ # 1. Check rnex.yaml configuration if present
7
+ if [ -f "rnex.yaml" ]; then
8
+ _disabled=$(awk '
9
+ /^plugins:/ { in_p=1; next }
10
+ in_p && /^[^ #]/ { exit }
11
+ in_p && /^ karpathy-llm:[ ]*$/ { in_k=1; next }
12
+ in_k && /^ lint_trigger_enabled:[ ]*false/ { print "yes"; exit }
13
+ in_k && !/^ / && !/^[ ]*#/ { in_k=0 }
14
+ ' rnex.yaml)
15
+ if [ "$_disabled" = "yes" ]; then
16
+ exit 0
17
+ fi
18
+ fi
19
+
20
+ # 2. Check if wiki/index.md exists and contains lint_trigger: enabled
7
21
  grep -q "lint_trigger: enabled" wiki/index.md 2>/dev/null || exit 0
8
22
 
9
- WIKI_DIR="wiki"
10
- COUNTER_FILE="$WIKI_DIR/.lint_trigger_counter"
23
+ COUNTER_DIR=".rnex"
24
+ [ -d "$COUNTER_DIR" ] || COUNTER_DIR="wiki"
25
+ COUNTER_FILE="$COUNTER_DIR/.lint_trigger_counter"
11
26
 
12
27
  # Read and increment session counter
13
28
  count=0