@oisheek_c/codeforge 1.0.2 → 1.0.4

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
@@ -1,7 +1,1121 @@
1
1
  # CodeForge AI
2
2
 
3
- Terminal-native AI Software Engineering Agent
3
+ > Terminal-native AI software engineering agent
4
4
 
5
- Status
5
+ CodeForge AI is an AI-powered software engineering agent that runs directly in your terminal and works against the repository you are currently working in.
6
6
 
7
- 🚧 Under Development
7
+ It combines repository indexing, retrieval-augmented context, model selection, reasoning, tool execution, verification, and fallback routing into a single terminal-native development workflow.
8
+
9
+ ---
10
+
11
+ ## Features
12
+
13
+ - Terminal-native AI software engineering agent
14
+ - Repository-aware code understanding
15
+ - Repository indexing and retrieval
16
+ - Retrieval-Augmented Generation (RAG)
17
+ - Automatic model-role selection
18
+ - OpenRouter integration
19
+ - Model fallback handling
20
+ - Multi-step tool execution
21
+ - File reading and searching
22
+ - File editing and writing
23
+ - Shell command execution
24
+ - Command approval workflow
25
+ - Git repository awareness
26
+ - Engineering verification workflow
27
+ - Live terminal activity dashboard
28
+ - Context usage reporting
29
+ - Model usage reporting
30
+ - Reasoning configuration
31
+ - Tree-sitter-powered source-code parsing
32
+ - Multi-language source-code support
33
+
34
+ ---
35
+
36
+ ## Requirements
37
+
38
+ ### Node.js
39
+
40
+ CodeForge requires:
41
+
42
+ ```text
43
+ Node.js >= 22.13.0
44
+ ```
45
+
46
+ Check your Node.js version:
47
+
48
+ ```bash
49
+ node --version
50
+ ```
51
+
52
+ ### OpenRouter API Key
53
+
54
+ CodeForge currently uses OpenRouter for AI model access.
55
+
56
+ You need an OpenRouter API key.
57
+
58
+ **Windows CMD**
59
+ ```cmd
60
+ set OPENROUTER_API_KEY=your_api_key_here
61
+ ```
62
+
63
+ **Windows PowerShell**
64
+ ```powershell
65
+ $env:OPENROUTER_API_KEY="your_api_key_here"
66
+ ```
67
+
68
+ **macOS / Linux**
69
+ ```bash
70
+ export OPENROUTER_API_KEY="your_api_key_here"
71
+ ```
72
+
73
+ You can also configure the key through an environment file when running CodeForge locally.
74
+
75
+ > Never commit your API key to GitHub or publish it to npm.
76
+
77
+ ---
78
+
79
+ ## Installation
80
+
81
+ ### Install with npm
82
+
83
+ Install CodeForge globally:
84
+
85
+ ```bash
86
+ npm install -g @oisheek_c/codeforge
87
+ ```
88
+
89
+ Verify the installation:
90
+
91
+ ```bash
92
+ codeforge --version
93
+ ```
94
+
95
+ Expected output:
96
+
97
+ ```text
98
+ CodeForge AI v1.0.2
99
+ ```
100
+
101
+ Once installed, the `codeforge` command is available globally.
102
+
103
+ ### Run with npx
104
+
105
+ CodeForge can also be run without a global installation:
106
+
107
+ ```bash
108
+ npx @oisheek_c/codeforge
109
+ ```
110
+
111
+ Check the version:
112
+
113
+ ```bash
114
+ npx @oisheek_c/codeforge --version
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Getting Started
120
+
121
+ Navigate to the project you want CodeForge to work with:
122
+
123
+ ```bash
124
+ cd path/to/your/project
125
+ ```
126
+
127
+ Then start CodeForge:
128
+
129
+ ```bash
130
+ codeforge
131
+ ```
132
+
133
+ CodeForge initializes against the current directory and builds a repository index.
134
+
135
+ You will then see an interactive terminal prompt:
136
+
137
+ ```text
138
+ >
139
+ ```
140
+
141
+ Enter your request using natural language.
142
+
143
+ For example:
144
+
145
+ ```text
146
+ > explain this repository
147
+ > explain how authentication works
148
+ > find the implementation of the routing system
149
+ > find the bug in the login flow and fix it
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Basic Commands
155
+
156
+ ### Start CodeForge
157
+ ```bash
158
+ codeforge
159
+ ```
160
+
161
+ ### Show help
162
+ ```bash
163
+ codeforge --help
164
+ ```
165
+ or:
166
+ ```bash
167
+ codeforge -h
168
+ ```
169
+
170
+ ### Show version
171
+ ```bash
172
+ codeforge --version
173
+ ```
174
+ or:
175
+ ```bash
176
+ codeforge -v
177
+ ```
178
+
179
+ ---
180
+
181
+ ## How CodeForge Works
182
+
183
+ A typical CodeForge request follows this pipeline:
184
+
185
+ ```text
186
+ User Request
187
+ |
188
+ v
189
+ Intent Detection
190
+ |
191
+ v
192
+ Planning
193
+ |
194
+ +-------------------+
195
+ | |
196
+ v v
197
+ RAG Selection Model Selection
198
+ | |
199
+ v v
200
+ Repository Provider / Model
201
+ Retrieval |
202
+ | |
203
+ +---------+---------+
204
+ |
205
+ v
206
+ Context Builder
207
+ |
208
+ v
209
+ Reasoning
210
+ |
211
+ v
212
+ Model Generation
213
+ |
214
+ v
215
+ Tool Execution
216
+ |
217
+ v
218
+ Verification
219
+ |
220
+ +------+------+
221
+ | |
222
+ v v
223
+ Success Repair /
224
+ | Fallback
225
+ v |
226
+ Final Result <-----+
227
+ ```
228
+
229
+ The goal is to make the model operate as an engineering agent rather than simply as a conversational chatbot.
230
+
231
+ ---
232
+
233
+ ## Repository Understanding
234
+
235
+ When CodeForge is started inside a project, it builds a repository index.
236
+
237
+ Repository-aware requests can use that index to locate relevant source files and provide repository evidence to the model.
238
+
239
+ Examples:
240
+
241
+ ```text
242
+ > explain this repository
243
+ > explain the architecture of this project
244
+ > where is model fallback implemented?
245
+ > find all files involved in repository retrieval
246
+ > explain how routing and model selection work together
247
+ ```
248
+
249
+ CodeForge retrieves relevant repository information, ranks the evidence, and constructs context for the selected model.
250
+
251
+ ---
252
+
253
+ ## Retrieval-Augmented Generation
254
+
255
+ CodeForge includes a repository retrieval system designed to provide the model with relevant project context.
256
+
257
+ The retrieval system can use information such as:
258
+
259
+ - Repository structure
260
+ - Source files
261
+ - Symbols
262
+ - Imports
263
+ - Exports
264
+ - Function calls
265
+ - Comments
266
+ - TODOs
267
+ - Diagnostics
268
+ - File metadata
269
+ - Lexical retrieval
270
+ - Ranking
271
+ - Context budgeting
272
+
273
+ This allows repository-specific requests to be grounded in the actual project instead of relying exclusively on the model's general knowledge.
274
+
275
+ ---
276
+
277
+ ## Repository Parsing
278
+
279
+ CodeForge uses Tree-sitter for source-code parsing.
280
+
281
+ The current package includes language grammars for:
282
+
283
+ - C
284
+ - C++
285
+ - C#
286
+ - Go
287
+ - Java
288
+ - JavaScript
289
+ - PHP
290
+ - Python
291
+ - Ruby
292
+ - Rust
293
+ - Swift
294
+ - TypeScript
295
+
296
+ The parser extracts structural information that can be used by repository retrieval and analysis.
297
+
298
+ ---
299
+
300
+ ## AI Model Routing
301
+
302
+ CodeForge includes model-role selection.
303
+
304
+ Depending on the request, the system can select an appropriate model role for the task.
305
+
306
+ Configured roles can include:
307
+
308
+ - General conversation
309
+ - Planning
310
+ - Coding
311
+ - Reviewing
312
+ - Reasoning
313
+ - Model selection
314
+
315
+ The terminal reports the selected provider and model after execution.
316
+
317
+ Example:
318
+
319
+ ```text
320
+ Model Usage
321
+ Route openrouter · nvidia/nemotron-3-super-120b-a12b:free
322
+ Attempts 1
323
+ Prompt ...
324
+ Completion ...
325
+ Reasoning ...
326
+ Total ...
327
+ Cost $0
328
+ Finish stop
329
+ ```
330
+
331
+ ---
332
+
333
+ ## Model Fallback
334
+
335
+ CodeForge supports fallback behavior when a model/provider request encounters a retryable failure.
336
+
337
+ The agent can select a configured fallback model and retry the request rather than immediately terminating the workflow.
338
+
339
+ This helps keep engineering workflows resilient when a particular model route is temporarily unavailable.
340
+
341
+ ---
342
+
343
+ ## Tool System
344
+
345
+ CodeForge provides tools that allow the agent to interact with the repository and local development environment.
346
+
347
+ Current tool capabilities include:
348
+
349
+ - Read files
350
+ - Search files
351
+ - Edit files
352
+ - Write files
353
+ - Execute shell commands
354
+
355
+ The model can request tools when the task requires direct interaction with the project.
356
+
357
+ For example:
358
+
359
+ ```text
360
+ > explain src/auth.js
361
+ ```
362
+
363
+ may result in a direct file read.
364
+
365
+ A coding request such as:
366
+
367
+ ```text
368
+ > fix the bug in src/auth.js and run the tests
369
+ ```
370
+
371
+ can involve:
372
+
373
+ ```text
374
+ Read
375
+ |
376
+ v
377
+ Analyze
378
+ |
379
+ v
380
+ Edit
381
+ |
382
+ v
383
+ Execute tests
384
+ |
385
+ v
386
+ Inspect result
387
+ |
388
+ v
389
+ Repair if necessary
390
+ ```
391
+
392
+ ---
393
+
394
+ ## Command Approval
395
+
396
+ CodeForge includes an approval boundary around command execution.
397
+
398
+ When a command requires approval, CodeForge can ask the user before executing it.
399
+
400
+ Example:
401
+
402
+ ```text
403
+ Approval required: execute_command
404
+
405
+ Command:
406
+ npm test
407
+
408
+ Approve this operation? [y/N]
409
+ ```
410
+
411
+ The user can explicitly approve or deny the operation.
412
+
413
+ This provides an additional safety boundary around potentially destructive operations.
414
+
415
+ ---
416
+
417
+ ## Code Modification
418
+
419
+ CodeForge is designed to perform engineering tasks, not only answer questions.
420
+
421
+ Examples:
422
+
423
+ ```text
424
+ > add input validation to the login function
425
+ > refactor this function without changing its behavior
426
+ > fix the failing tests
427
+ > add error handling to the API client
428
+ > update the authentication flow and run the relevant tests
429
+ ```
430
+
431
+ The agent can combine repository context, file tools, command execution, and verification during these workflows.
432
+
433
+ ---
434
+
435
+ ## Verification
436
+
437
+ CodeForge does not treat a successful file modification as automatically completing an engineering task.
438
+
439
+ For implementation and debugging workflows, the system can track whether the change has been verified.
440
+
441
+ A typical workflow is:
442
+
443
+ ```text
444
+ Understand
445
+ |
446
+ v
447
+ Plan
448
+ |
449
+ v
450
+ Retrieve Context
451
+ |
452
+ v
453
+ Modify Code
454
+ |
455
+ v
456
+ Run Verification
457
+ |
458
+ v
459
+ Inspect Result
460
+ |
461
+ v
462
+ Repair if Necessary
463
+ |
464
+ v
465
+ Complete
466
+ ```
467
+
468
+ The project test suite currently covers retrieval, routing, model selection, fallback behavior, tool execution, approval handling, verification, and configuration.
469
+
470
+ Current test status:
471
+
472
+ ```text
473
+ 112 tests
474
+ 112 passed
475
+ 0 failed
476
+ ```
477
+
478
+ ---
479
+
480
+ ## Git Awareness
481
+
482
+ CodeForge can operate inside Git repositories and inspect repository state.
483
+
484
+ This allows repository-aware tasks to take Git context into account, including:
485
+
486
+ - Current branch
487
+ - Working-tree state
488
+ - Repository status
489
+ - Git-related project information
490
+
491
+ Example:
492
+
493
+ ```text
494
+ > inspect the current git changes and explain what they do
495
+ ```
496
+
497
+ ---
498
+
499
+ ## Terminal Dashboard
500
+
501
+ CodeForge provides live terminal activity during execution.
502
+
503
+ A typical request can display:
504
+
505
+ ```text
506
+ ✓ Understood request
507
+ ✓ Planned approach
508
+ ✓ Searched repository
509
+ ✓ Built context
510
+ ✓ Selected model
511
+ ✓ Reasoning configured
512
+ ✓ Generated response
513
+ ```
514
+
515
+ Tool-enabled workflows can additionally show:
516
+
517
+ ```text
518
+ ✓ Completed tool
519
+ ✓ Completed tool round
520
+ ✓ Verification completed
521
+ ```
522
+
523
+ This makes the agent's execution pipeline visible without exposing private model chain-of-thought.
524
+
525
+ ---
526
+
527
+ ## Context Usage
528
+
529
+ After execution, CodeForge reports estimated context usage.
530
+
531
+ Example:
532
+
533
+ ```text
534
+ Context Usage
535
+ Round 0
536
+ System ~1,934 tokens
537
+ User/RAG ~1,067 tokens
538
+ Assistant ~0 tokens
539
+ Tool Results ~0 tokens
540
+ Tool Schemas ~677 tokens
541
+ Estimated ~3,676 tokens
542
+ ```
543
+
544
+ This helps users understand how much repository and tool context was supplied to the model.
545
+
546
+ ---
547
+
548
+ ## Model Usage
549
+
550
+ CodeForge also reports model usage information.
551
+
552
+ Example:
553
+
554
+ ```text
555
+ Model Usage
556
+ Route openrouter · nvidia/nemotron-3-super-120b-a12b:free
557
+ Attempts 1
558
+ Prompt 3,941 tokens
559
+ Completion 550 tokens
560
+ Reasoning 355 tokens
561
+ Total 4,491 tokens
562
+ Cost $0
563
+ Finish stop
564
+ ```
565
+
566
+ The exact values depend on the request and selected model.
567
+
568
+ ---
569
+
570
+ ## Example Session
571
+
572
+ A normal CodeForge session looks like:
573
+
574
+ ```text
575
+ $ codeforge
576
+
577
+ CodeForge AI v1.0.2
578
+ Terminal-Native AI Software Engineering Agent
579
+ ────────────────────────────────────────────────────────────
580
+
581
+ ✔ Configuration loaded.
582
+ ✔ Project: my-project
583
+ ℹ Building repository index...
584
+ ✔ Repository indexed.
585
+ ✔ OpenRouter provider initialized.
586
+ ✔ Tool registry initialized.
587
+ ✔ CodeForge initialized.
588
+ ✔ Loaded project: my-project
589
+
590
+ > hello
591
+ ```
592
+
593
+ The agent can respond to normal conversational requests:
594
+
595
+ ```text
596
+ > hello
597
+
598
+ Hello! How can I assist you today?
599
+ ```
600
+
601
+ Repository-aware requests activate retrieval when appropriate:
602
+
603
+ ```text
604
+ > explain this repository
605
+ ```
606
+
607
+ Coding requests can activate tools:
608
+
609
+ ```text
610
+ > explain src/math.js
611
+ ```
612
+
613
+ or:
614
+
615
+ ```text
616
+ > fix the bug in src/math.js and run the tests
617
+ ```
618
+
619
+ ---
620
+
621
+ ## Example Requests
622
+
623
+ **General Conversation**
624
+ ```text
625
+ > hello
626
+ > what can you do?
627
+ ```
628
+
629
+ **Repository Explanation**
630
+ ```text
631
+ > explain this repository
632
+ ```
633
+
634
+ **Architecture**
635
+ ```text
636
+ > explain how the routing system works
637
+ > explain how model selection and fallback interact
638
+ ```
639
+
640
+ **File Explanation**
641
+ ```text
642
+ > explain src/math.js
643
+ ```
644
+
645
+ **Search**
646
+ ```text
647
+ > find where authentication is implemented
648
+ ```
649
+
650
+ **Debugging**
651
+ ```text
652
+ > find why the tests are failing
653
+ ```
654
+
655
+ **Code Modification**
656
+ ```text
657
+ > fix the failing test and verify the fix
658
+ ```
659
+
660
+ **Refactoring**
661
+ ```text
662
+ > refactor this module while preserving its current behavior
663
+ ```
664
+
665
+ ---
666
+
667
+ ## Configuration
668
+
669
+ CodeForge currently uses OpenRouter for model access.
670
+
671
+ The primary environment variable is:
672
+
673
+ ```text
674
+ OPENROUTER_API_KEY
675
+ ```
676
+
677
+ Example:
678
+
679
+ ```bash
680
+ export OPENROUTER_API_KEY="sk-or-..."
681
+ ```
682
+
683
+ Windows CMD:
684
+
685
+ ```cmd
686
+ set OPENROUTER_API_KEY=sk-or-...
687
+ ```
688
+
689
+ The configuration system also supports configured model roles and environment-variable overrides where supported.
690
+
691
+ ---
692
+
693
+ ## Security
694
+
695
+ CodeForge is an engineering agent with access to local project files and, when approved, command execution.
696
+
697
+ Use it only in environments where you understand the operations it may perform.
698
+
699
+ ### API Keys
700
+
701
+ Never commit:
702
+
703
+ ```text
704
+ OPENROUTER_API_KEY
705
+ ```
706
+
707
+ or other secrets to source control.
708
+
709
+ Add environment files to `.gitignore`:
710
+
711
+ ```text
712
+ .env
713
+ .env.local
714
+ ```
715
+
716
+ ### Command Execution
717
+
718
+ Review command-approval prompts carefully.
719
+
720
+ Do not approve commands you do not understand.
721
+
722
+ ---
723
+
724
+ ## Installation on Another Machine
725
+
726
+ CodeForge is distributed through npm, so another developer does not need the project's `.tgz` file.
727
+
728
+ On another machine with Node.js 22.13+:
729
+
730
+ ```bash
731
+ npm install -g @oisheek_c/codeforge
732
+ ```
733
+
734
+ Then verify:
735
+
736
+ ```bash
737
+ codeforge --version
738
+ ```
739
+
740
+ Configure the API key:
741
+
742
+ ```bash
743
+ export OPENROUTER_API_KEY="your_api_key_here"
744
+ ```
745
+
746
+ Navigate into a project:
747
+
748
+ ```bash
749
+ cd your-project
750
+ ```
751
+
752
+ Then start CodeForge:
753
+
754
+ ```bash
755
+ codeforge
756
+ ```
757
+
758
+ CodeForge can therefore be installed and used directly from the npm registry.
759
+
760
+ ---
761
+
762
+ ## Development
763
+
764
+ Clone the repository:
765
+
766
+ ```bash
767
+ git clone <repository-url>
768
+ ```
769
+
770
+ Enter the repository:
771
+
772
+ ```bash
773
+ cd codeforge
774
+ ```
775
+
776
+ Install dependencies:
777
+
778
+ ```bash
779
+ pnpm install
780
+ ```
781
+
782
+ Run CodeForge locally:
783
+
784
+ ```bash
785
+ pnpm start
786
+ ```
787
+
788
+ Run the test suite:
789
+
790
+ ```bash
791
+ node --test
792
+ ```
793
+
794
+ or:
795
+
796
+ ```bash
797
+ pnpm test
798
+ ```
799
+
800
+ ---
801
+
802
+ ## Testing
803
+
804
+ The project contains automated tests covering major parts of the agent architecture.
805
+
806
+ Current verified result:
807
+
808
+ ```text
809
+ ℹ tests 112
810
+ ℹ pass 112
811
+ ℹ fail 0
812
+ ℹ cancelled 0
813
+ ℹ skipped 0
814
+ ℹ todo 0
815
+ ```
816
+
817
+ Run the tests with:
818
+
819
+ ```bash
820
+ node --test
821
+ ```
822
+
823
+ ---
824
+
825
+ ## Package Information
826
+
827
+ - **Current npm package:** `@oisheek_c/codeforge`
828
+ - **Current release:** `1.0.2`
829
+ - **CLI command:** `codeforge`
830
+ - **Required Node.js version:** `>= 22.13.0`
831
+
832
+ Install:
833
+
834
+ ```bash
835
+ npm install -g @oisheek_c/codeforge
836
+ ```
837
+
838
+ ---
839
+
840
+ ## Project Structure
841
+
842
+ The project is organized into several major subsystems:
843
+
844
+ ```text
845
+ apps/
846
+ └── cli/
847
+ └── src/
848
+ ├── bootstrap.js
849
+ ├── cli.js
850
+ ├── index.js
851
+ └── dev/
852
+
853
+ packages/
854
+ ├── agent/
855
+ ├── config/
856
+ ├── core/
857
+ ├── git/
858
+ ├── memory/
859
+ ├── prompts/
860
+ ├── providers/
861
+ ├── reasoning/
862
+ ├── retrieval/
863
+ ├── scanner/
864
+ ├── terminal/
865
+ ├── tools/
866
+ └── utils/
867
+
868
+ bin/
869
+ └── codeforge.js
870
+ ```
871
+
872
+ The main architectural areas are:
873
+
874
+ | Package | Responsibility |
875
+ |---|---|
876
+ | agent | Agent orchestration, planning, routing, and execution |
877
+ | config | Configuration and model settings |
878
+ | core | Core types and engineering abstractions |
879
+ | git | Git integration |
880
+ | memory | Project and session memory |
881
+ | prompts | Prompt construction |
882
+ | providers | AI provider integration |
883
+ | reasoning | Reasoning workflows |
884
+ | retrieval | Repository parsing, indexing, ranking, and RAG |
885
+ | scanner | Repository scanning |
886
+ | terminal | CLI dashboard and terminal rendering |
887
+ | tools | File and command tools |
888
+ | utils | Shared utilities |
889
+
890
+ ---
891
+
892
+ ## Architecture
893
+
894
+ At a high level:
895
+
896
+ ```text
897
+ ┌─────────────────────┐
898
+ │ User / CLI │
899
+ └──────────┬──────────┘
900
+
901
+
902
+ ┌─────────────────────┐
903
+ │ Intent / Planner │
904
+ └──────────┬──────────┘
905
+
906
+ ┌────────────┴────────────┐
907
+ ▼ ▼
908
+ ┌─────────────────┐ ┌─────────────────┐
909
+ │ RAG Selector │ │ Model Selector │
910
+ └────────┬────────┘ └────────┬────────┘
911
+ │ │
912
+ ▼ ▼
913
+ ┌─────────────────┐ ┌─────────────────┐
914
+ │ Retrieval │ │ Provider │
915
+ │ / Repository │ │ / OpenRouter │
916
+ └────────┬────────┘ └────────┬────────┘
917
+ │ │
918
+ └────────────┬────────────┘
919
+
920
+ ┌─────────────────────┐
921
+ │ Context Builder │
922
+ └──────────┬──────────┘
923
+
924
+
925
+ ┌─────────────────────┐
926
+ │ Reasoning │
927
+ └──────────┬──────────┘
928
+
929
+
930
+ ┌─────────────────────┐
931
+ │ Model Generation │
932
+ └──────────┬──────────┘
933
+
934
+
935
+ ┌─────────────────────┐
936
+ │ Tool Execution │
937
+ └──────────┬──────────┘
938
+
939
+
940
+ ┌─────────────────────┐
941
+ │ Verification │
942
+ └──────────┬──────────┘
943
+
944
+ ┌──────────┴──────────┐
945
+ ▼ ▼
946
+ Success Repair /
947
+ │ Fallback
948
+ ▼ │
949
+ Final Result ◄─────────────┘
950
+ ```
951
+
952
+ ---
953
+
954
+ ## Current Release
955
+
956
+ **v1.0.2**
957
+
958
+ The current release includes:
959
+
960
+ - Terminal-native interactive agent
961
+ - OpenRouter integration
962
+ - Model-role selection
963
+ - Model fallback routing
964
+ - Repository indexing
965
+ - Repository retrieval
966
+ - RAG selection
967
+ - Tree-sitter source parsing
968
+ - Multi-language parsing
969
+ - File reading
970
+ - File searching
971
+ - File editing
972
+ - File writing
973
+ - Shell command execution
974
+ - Command approval
975
+ - Git awareness
976
+ - Engineering verification workflow
977
+ - Terminal activity dashboard
978
+ - Context telemetry
979
+ - Model usage telemetry
980
+
981
+ ---
982
+
983
+ ## Project Status
984
+
985
+ CodeForge is an actively developed project.
986
+
987
+ The core agent workflow is functional and distributed through npm.
988
+
989
+ Current development focus includes:
990
+
991
+ - Repository safety
992
+ - Retrieval quality
993
+ - Parser compatibility
994
+ - Developer experience
995
+ - Documentation
996
+ - CLI reliability
997
+ - Package quality
998
+
999
+ ---
1000
+
1001
+ ## Roadmap
1002
+
1003
+ Planned improvements include:
1004
+
1005
+ - Further retrieval-quality improvements
1006
+ - Better repository-level architectural understanding
1007
+ - Improved parser compatibility
1008
+ - Reduction of Tree-sitter dependency warnings
1009
+ - Safer behavior when launched outside a project directory
1010
+ - Additional engineering workflows
1011
+ - Expanded documentation
1012
+ - Continued CLI UX improvements
1013
+ - Additional provider and model flexibility
1014
+
1015
+ ---
1016
+
1017
+ ## Contributing
1018
+
1019
+ Contributions, bug reports, feature requests, and improvements are welcome.
1020
+
1021
+ Before submitting changes:
1022
+
1023
+ 1. Make the change.
1024
+ 2. Run the test suite.
1025
+ 3. Verify the CLI manually where appropriate.
1026
+ 4. Review the Git diff.
1027
+ 5. Submit the change with a clear description.
1028
+
1029
+ Run:
1030
+
1031
+ ```bash
1032
+ node --test
1033
+ ```
1034
+
1035
+ before opening a pull request.
1036
+
1037
+ ---
1038
+
1039
+ ## Troubleshooting
1040
+
1041
+ ### `codeforge` command not found
1042
+
1043
+ Check whether the package is installed globally:
1044
+
1045
+ ```bash
1046
+ npm list -g --depth=0
1047
+ ```
1048
+
1049
+ You should see:
1050
+
1051
+ ```text
1052
+ @oisheek_c/codeforge@1.0.2
1053
+ ```
1054
+
1055
+ Check the npm global prefix:
1056
+
1057
+ ```bash
1058
+ npm prefix -g
1059
+ ```
1060
+
1061
+ Make sure the corresponding global bin directory is available in your PATH.
1062
+
1063
+ ### Check the installed version
1064
+
1065
+ ```bash
1066
+ codeforge --version
1067
+ ```
1068
+
1069
+ Expected:
1070
+
1071
+ ```text
1072
+ CodeForge AI v1.0.2
1073
+ ```
1074
+
1075
+ ### OpenRouter authentication failure
1076
+
1077
+ Check that the environment variable exists.
1078
+
1079
+ **macOS / Linux**
1080
+ ```bash
1081
+ echo "$OPENROUTER_API_KEY"
1082
+ ```
1083
+
1084
+ **Windows CMD**
1085
+ ```cmd
1086
+ echo %OPENROUTER_API_KEY%
1087
+ ```
1088
+
1089
+ If necessary, set it again and restart the terminal.
1090
+
1091
+ ### Repository indexing permission errors
1092
+
1093
+ Run CodeForge from the root of the project you want it to work with:
1094
+
1095
+ ```bash
1096
+ cd path/to/project
1097
+ codeforge
1098
+ ```
1099
+
1100
+ Avoid starting CodeForge from directories containing unrelated system data or directories for which the current user does not have read permission.
1101
+
1102
+ ---
1103
+
1104
+ ## License
1105
+
1106
+ MIT License.
1107
+
1108
+ ## Author
1109
+
1110
+ **Oisheek**
1111
+
1112
+ CodeForge AI is developed as a terminal-native AI software engineering project.
1113
+
1114
+ ## Links
1115
+
1116
+ - [npm Package](https://www.npmjs.com/package/@oisheek_c/codeforge)
1117
+ - [GitHub](https://github.com/Oisheek/codeforge)
1118
+
1119
+ ---
1120
+
1121
+ *CodeForge AI — AI software engineering directly in your terminal.*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oisheek_c/codeforge",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Terminal-native AI software engineering agent",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -318,6 +318,52 @@ function createToolCallFingerprint(
318
318
  )}`;
319
319
  }
320
320
 
321
+ function invalidateReadToolHistory(
322
+ toolCallHistory,
323
+ changedPath
324
+ ) {
325
+ if (
326
+ !(toolCallHistory instanceof Map) ||
327
+ typeof changedPath !== "string"
328
+ ) {
329
+ return;
330
+ }
331
+
332
+ const normalizedPath =
333
+ changedPath.replaceAll("\\", "/");
334
+
335
+ for (
336
+ const [
337
+ fingerprint,
338
+ entry,
339
+ ] of toolCallHistory
340
+ ) {
341
+ if (
342
+ entry?.name !== "read_file"
343
+ ) {
344
+ continue;
345
+ }
346
+
347
+ const readPath =
348
+ entry.arguments?.path;
349
+
350
+ if (
351
+ typeof readPath !== "string"
352
+ ) {
353
+ continue;
354
+ }
355
+
356
+ if (
357
+ readPath.replaceAll("\\", "/") ===
358
+ normalizedPath
359
+ ) {
360
+ toolCallHistory.delete(
361
+ fingerprint
362
+ );
363
+ }
364
+ }
365
+ }
366
+
321
367
  function createDuplicateToolResult({
322
368
  call,
323
369
  previous,
@@ -685,20 +731,33 @@ approvedTools.add(approvalKey);
685
731
  arguments: call.arguments,
686
732
  result,
687
733
  });
688
- if (
689
- canDeduplicate &&
690
- result.success
691
- ) {
692
- toolCallHistory.set(
693
- fingerprint,
694
- {
695
- id: call.id,
696
- name: call.name,
697
- arguments:
698
- call.arguments,
699
- }
700
- );
734
+ if (
735
+ call.name === "edit_file" ||
736
+ call.name === "write_file"
737
+ ) {
738
+ const changedPath =
739
+ call.arguments?.path;
740
+
741
+ invalidateReadToolHistory(
742
+ toolCallHistory,
743
+ changedPath
744
+ );
745
+ }
746
+
747
+ if (
748
+ canDeduplicate &&
749
+ result.success
750
+ ) {
751
+ toolCallHistory.set(
752
+ fingerprint,
753
+ {
754
+ id: call.id,
755
+ name: call.name,
756
+ arguments:
757
+ call.arguments,
701
758
  }
759
+ );
760
+ }
702
761
  emit({
703
762
  type: result.success
704
763
  ? "stage:success"
@@ -1269,7 +1328,7 @@ export async function execute({
1269
1328
  Array.isArray(response?.toolCalls)
1270
1329
  ? response.toolCalls
1271
1330
  : [];
1272
-
1331
+
1273
1332
  // Model produced a normal final response.
1274
1333
  // Model produced a normal final response.
1275
1334
  if (responseToolCalls.length === 0) {
@@ -10,10 +10,10 @@ export const defaultConfig = {
10
10
  "nvidia/nemotron-3-super-120b-a12b:free",
11
11
 
12
12
  coding:
13
- "cohere/north-mini-code:free",
13
+ "poolside/laguna-s-2.1:free",
14
14
 
15
15
  heavyCoding:
16
- "poolside/laguna-s-2.1:free",
16
+ "z-ai/glm-5.2:free",
17
17
 
18
18
  planner:
19
19
  "nvidia/nemotron-3-ultra-550b-a55b:free",
@@ -34,7 +34,7 @@ export const defaultConfig = {
34
34
  "nvidia/llama-nemotron-rerank-vl-1b-v2:free",
35
35
 
36
36
  fallback:
37
- "cohere/north-mini-code:free",
37
+ "nvidia/nemotron-3-ultra-550b-a55b:free",
38
38
 
39
39
  emergency:
40
40
  "openrouter/free",