-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmini-a-web.yaml
More file actions
2158 lines (2088 loc) · 85.4 KB
/
mini-a-web.yaml
File metadata and controls
2158 lines (2088 loc) · 85.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Author: Nuno Aguiar
help:
text : Mini-A web interface to interact with the Mini-A agent via HTTP.
expects:
- name : onport
desc : Port to run the HTTP server on
example : "8888"
mandatory: false
- name : verbose
desc : Print detailed interaction events
example : "true"
mandatory: false
options : ["true", "false"]
- name : debug
desc : Enable debug logging
example : "true"
mandatory: false
options : ["true", "false"]
- name : debugfile
desc : Write debug output to a file instead of screen (implies debug=true)
example : "/tmp/mini-a-web-debug.ndjson"
mandatory: false
- name : debugch
desc : SLON/JSON debug channel for the main LLM
example : "(type: file, options: (file: '/tmp/mini-a-main-debug.ndjson'))"
mandatory: false
- name : debuglcch
desc : SLON/JSON debug channel for the low-cost LLM
example : "(type: file, options: (file: '/tmp/mini-a-lc-debug.ndjson'))"
mandatory: false
- name : debugvalch
desc : SLON/JSON debug channel for the validation LLM
example : "(type: file, options: (file: '/tmp/mini-a-val-debug.ndjson'))"
mandatory: false
- name : showexecs
desc : Show executed commands in the interaction
example : "false"
mandatory: false
options : ["true", "false"]
- name : usestream
desc : Stream LLM tokens in real-time via SSE
example : "true"
mandatory: false
options : ["true", "false"]
- name : showthinking
desc : Surface XML-tagged thinking blocks as thought logs
example : "true"
mandatory: false
options : ["true", "false"]
- name : logpromptheaders
desc : Log prompt headers to console (for debugging)
example : "origin,referer"
mandatory: false
- name : memorysessionheader
desc : Optional HTTP header name to derive memorysessionid when usememory=true
example : "x-session-id"
mandatory: false
- name : usehistory
desc : "Boolean to enable/disable history (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : historykeepperiod
desc : Delete kept history files older than this many minutes
example : "1440"
mandatory: false
- name : historykeepcount
desc : Keep only the newest N kept history files
example : "200"
mandatory: false
- name : ssequeuetimeout
desc : SSE queue timeout in seconds before stale stream state is purged
example : "120"
mandatory: false
- name : useattach
desc : "Boolean to enable/disable file attachments (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : historypath
desc : "Path to store history files (default: .)"
example : "."
mandatory: false
- name : historyretention
desc : "History retention period in seconds (default: 600)"
example : "600"
mandatory: false
- name : historykeep
desc : "Boolean to keep history files (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : maxcontext
desc : "Maximum conversation tokens before Mini-A summarizes context (default: 200000)"
example : "200000"
mandatory: false
- name : compressgoal
desc : "Boolean to enable/disable automatic compression of oversized goal text before execution (default: false)"
example : "false"
mandatory: false
options : ["true", "false"]
- name : compressgoaltokens
desc : "Estimated token threshold above which goal compression is considered when compressgoal=true (default: 250)"
example : "400"
mandatory: false
- name : compressgoalchars
desc : "Character threshold above which goal compression is considered when compressgoal=true (default: 1000)"
example : "1500"
mandatory: false
- name : maxpromptchars
desc : "Maximum accepted prompt size in characters (default: 120000)"
example : "120000"
mandatory: false
- name : rpm
desc : Requests per minute limit
example : "60"
mandatory: false
- name : tpm
desc : Tokens per minute limit
example : "120000"
mandatory: false
- name : maxsteps
desc : Maximum consecutive non-success steps
example : "50"
mandatory: false
- name : earlystopthreshold
desc : Consecutive identical errors before early stop
example : "3"
mandatory: false
- name : useplanning
desc : "Boolean to enable/disable task planning (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : updatefreq
desc : "Plan update frequency (auto, always, checkpoints, never)"
example : "auto"
mandatory: false
- name : updateinterval
desc : "Steps between automatic plan updates when updatefreq=auto"
example : "3"
mandatory: false
- name : forceupdates
desc : "Force plan updates even when actions fail"
example : "false"
mandatory: false
options : ["true", "false"]
- name : planlog
desc : "Optional log file to append plan update entries"
example : "plan-updates.log"
mandatory: false
- name : forceplanning
desc : Force planning even when heuristics would skip it
example : "true"
mandatory: false
options : ["true", "false"]
- name : planfile
desc : Plan file to load or save before execution
example : "plan.md"
mandatory: false
- name : planformat
desc : Plan format override (md or json)
example : "json"
mandatory: false
- name : plancontent
desc : Inline plan content (JSON or Markdown) to preload
example : "# Plan"
mandatory: false
- name : saveplannotes
desc : Append execution learnings to saved plan notes
example : "true"
mandatory: false
options : ["true", "false"]
- name : resumefailed
desc : Attempt to resume the last failed goal on startup
example : "true"
mandatory: false
options : ["true", "false"]
- name : usediagrams
desc : "Boolean to enable/disable Mermaid diagram generation (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : usemermaid
desc : Alias for usediagrams
example : "true"
mandatory: false
options : ["true", "false"]
- name : usecharts
desc : "Boolean to enable/disable Chart.js chart generation (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : usemaps
desc : "Boolean to enable/disable Leaflet interactive map guidance (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : usesvg
desc : "Boolean to enable/disable secure raw SVG visual guidance (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : usevectors
desc : "Boolean to enable/disable infographic-focused vector guidance bundle (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : useascii
desc : "Boolean to enable/disable ASCII art sketch generation (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : usemath
desc : "Boolean to enable/disable math formula rendering guidance (default: false)"
example : "true"
mandatory: false
options : ["true", "false"]
- name : knowledge
desc : Extra knowledge or context injected into the agent
example : "This repository uses OpenAF jobs."
mandatory: false
- name : rules
desc : Custom agent rules (string, JSON or SLON)
example : "Always explain tradeoffs briefly."
mandatory: false
- name : youare
desc : Override the opening agent persona line
example : "You are a precise release engineer."
mandatory: false
- name : chatyouare
desc : Override the chatbot persona line when chatbotmode=true
example : "You are a helpful support assistant."
mandatory: false
- name : homedir
desc : Override the home directory used to locate the .openaf-mini-a folder
example : "/tmp/mini-a-home"
mandatory: false
- name : goalprefix
desc : Optional prefix automatically added to every goal
example : "[web] "
mandatory: false
- name : libs
desc : Comma-separated list of additional OJob libraries to load
example : "@AWS/aws.js,custom.js"
mandatory: false
- name : model
desc : Override OAF_MODEL for this web server session
example : "(type: openai, model: gpt-5-mini, key: '...')"
mandatory: false
- name : modellc
desc : Override OAF_LC_MODEL for this web server session
example : "(type: openai, model: gpt-5-nano, key: '...')"
mandatory: false
- name : modelval
desc : Override OAF_VAL_MODEL for this web server session
example : "(type: openai, model: gpt-5-mini, key: '...')"
mandatory: false
- name : skillmaxautoload
desc : Maximum number of matching skills to auto-load into runtime context
example : "1"
mandatory: false
- name : skillcontextchars
desc : Maximum characters read from each auto-loaded SKILL.md
example : "8000"
mandatory: false
- name : skillmanifestchars
desc : Approximate character budget for skill descriptions in the system prompt manifest
example : "1536"
mandatory: false
- name : modellock
desc : Lock model tier selection (auto, main or lc)
example : "lc"
mandatory: false
- name : modelstrategy
desc : Model orchestration profile (default or advisor)
example : "advisor"
mandatory: false
- name : advisormaxuses
desc : Maximum advisor consultations per run
example : "2"
mandatory: false
- name : advisorenable
desc : Master toggle for advisor consultations
example : "true"
mandatory: false
options : ["true", "false"]
- name : advisoronrisk
desc : Allow advisor consults on risk signals
example : "true"
mandatory: false
options : ["true", "false"]
- name : advisoronambiguity
desc : Allow advisor consults on ambiguity signals
example : "true"
mandatory: false
options : ["true", "false"]
- name : advisoronharddecision
desc : Allow advisor consults for hard-decision checkpoints
example : "true"
mandatory: false
options : ["true", "false"]
- name : advisorcooldownsteps
desc : Minimum step distance between advisor consultations
example : "2"
mandatory: false
- name : advisorbudgetratio
desc : Fraction of token budget advisor calls may consume
example : "0.20"
mandatory: false
- name : emergencyreserve
desc : Reserved advisor budget fraction for high-value consults
example : "0.10"
mandatory: false
- name : harddecision
desc : Hard-decision checkpoint mode (require, warn or off)
example : "warn"
mandatory: false
- name : evidencegate
desc : Enable lightweight evidence gating
example : "true"
mandatory: false
options : ["true", "false"]
- name : evidencegatestrictness
desc : Evidence gate strictness (low, medium or high)
example : "medium"
mandatory: false
- name : lcescalatedefer
desc : Defer low-cost escalation by one step when confidence is high
example : "true"
mandatory: false
options : ["true", "false"]
- name : lcbudget
desc : Max low-cost model tokens before switching permanently to main model
example : "50000"
mandatory: false
- name : llmcomplexity
desc : Use the low-cost model to validate medium-complexity decisions
example : "true"
mandatory: false
options : ["true", "false"]
- name : useshell
desc : Allow shell command execution
example : "true"
mandatory: false
options : ["true", "false"]
- name : shell
desc : Prefix applied to every shell command
example : "docker exec sandbox"
mandatory: false
- name : readwrite
desc : Allow write operations during shell commands
example : "true"
mandatory: false
options : ["true", "false"]
- name : checkall
desc : Ask for confirmation before shell commands
example : "true"
mandatory: false
options : ["true", "false"]
- name : shellbatch
desc : Automatically approve shell commands
example : "true"
mandatory: false
options : ["true", "false"]
- name : shellprefix
desc : Prefix applied to each shell command
example : "docker exec sandbox"
mandatory: false
- name : shellallow
desc : Comma-separated shell allow list
example : "curl,wget"
mandatory: false
- name : shellbanextra
desc : Comma-separated extra banned shell commands
example : "rm,mkfs"
mandatory: false
- name : shellallowpipes
desc : Allow pipes, redirections and shell control operators
example : "true"
mandatory: false
options : ["true", "false"]
- name : shelltimeout
desc : Maximum shell command runtime in milliseconds
example : "120000"
mandatory: false
- name : shellmaxbytes
desc : Maximum shell output size in characters
example : "12000"
mandatory: false
- name : usesandbox
desc : Built-in shell sandbox preset (off, auto, linux, macos, windows)
example : "auto"
mandatory: false
- name : sandboxprofile
desc : Optional macOS sandbox profile path
example : "/tmp/mini-a.sb"
mandatory: false
- name : sandboxnonetwork
desc : Disable network inside the built-in sandbox when supported
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcp
desc : MCP connection definition (single or array) in SLON/JSON
example : "[(type: stdio, command: 'node', args: ['server.js'])]"
mandatory: false
- name : usetools
desc : Register MCP tools directly on the model
example : "true"
mandatory: false
options : ["true", "false"]
- name : usetoolslc
desc : Register MCP tools directly only on the low-cost model
example : "true"
mandatory: false
options : ["true", "false"]
- name : usejsontool
desc : Register compatibility json tool when usetools=true
example : "true"
mandatory: false
options : ["true", "false"]
- name : toolfallback
desc : Fallback to action mode when malformed pseudo tool calls are emitted
example : "true"
mandatory: false
options : ["true", "false"]
- name : historys3bucket
desc : "S3 bucket to store conversation history objects"
example : "mini-a-history"
mandatory: false
- name : historys3prefix
desc : "Optional S3 key prefix for history objects"
example : "sessions/"
mandatory: false
- name : historys3url
desc : "Custom S3-compatible endpoint URL"
example : "https://s3.amazonaws.com"
mandatory: false
- name : historys3accesskey
desc : "Access key ID for the history S3 endpoint"
example : "AKIA..."
mandatory: false
- name : historys3secret
desc : "Secret key for the history S3 endpoint"
example : "WJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
mandatory: false
- name : historys3region
desc : "Region for the history S3 endpoint when required"
example : "eu-west-1"
mandatory: false
- name : historys3useversion1
desc : "Force the MinIO client to use the S3 API version 1 when listing objects"
example : "false"
mandatory: false
options : ["true", "false"]
- name : historys3ignorecertcheck
desc : "Ignore TLS certificate validation for the history S3 endpoint (use with caution)"
example : "false"
mandatory: false
options : ["true", "false"]
- name : mcplazy
desc : "Initialize MCP connections lazily on first use instead of during Init"
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcpdynamic
desc : Select MCP tools dynamically per goal
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcpproxy
desc : Aggregate all MCP connections behind a single proxy tool
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcpproxythreshold
desc : Global byte threshold for proxy auto-spill to temporary files
example : "4096"
mandatory: false
- name : mcpproxytoon
desc : Serialize spilled proxy results as TOON text
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcpprogcall
desc : Start the per-session localhost bridge for programmatic MCP calls
example : "true"
mandatory: false
options : ["true", "false"]
- name : mcpprogcallport
desc : Port for the programmatic MCP bridge (0 auto-selects)
example : "0"
mandatory: false
- name : mcpprogcallmaxbytes
desc : Maximum inline JSON size before bridge results spill to /result/{id}
example : "4096"
mandatory: false
- name : mcpprogcallresultttl
desc : TTL in seconds for spilled bridge results
example : "600"
mandatory: false
- name : mcpprogcalltools
desc : Optional comma-separated allowlist of tools exposed by the bridge
example : "filesystemQuery,markdownFiles"
mandatory: false
- name : mcpprogcallbatchmax
desc : Maximum calls accepted per bridge batch request
example : "10"
mandatory: false
- name : toolcachettl
desc : "Default cache TTL in milliseconds for MCP tool results"
example : "600000"
mandatory: false
- name : useutils
desc : "Register Mini Utils Tool utilities as an MCP connection automatically"
example : "true"
mandatory: false
options : ["true", "false"]
- name : useskills
desc : Expose the skills utility tool within Mini Utils MCP; when useutils=false this registers only the skills tool
example : "true"
mandatory: false
options : ["true", "false"]
- name : utilsroot
desc : Optional root directory used by Mini Utils Tool
example : "/path/to/repo"
mandatory: false
- name : utilsallow
desc : "Comma-separated allowlist of Mini Utils Tool names to expose when useutils=true"
example : "filesystemQuery,markdownFiles"
mandatory: false
- name : utilsdeny
desc : "Comma-separated denylist of Mini Utils Tool names to hide when useutils=true (applied after utilsallow)"
example : "systemInfo,textUtilities"
mandatory: false
- name : mini-a-docs
desc : Point utilsroot to the Mini-A opack path so docs can be navigated directly
example : "true"
mandatory: false
options : ["true", "false"]
- name : miniadocs
desc : Alias for mini-a-docs
example : "true"
mandatory: false
options : ["true", "false"]
- name : chatbotmode
desc : "Run Mini-A in chatbot mode without agent planning prompts"
example : "false"
mandatory: false
options : ["true", "false"]
- name : adaptiverouting
desc : Enable rule-based route selection via mini-a-router.js
example : "true"
mandatory: false
options : ["true", "false"]
- name : routerorder
desc : Comma-separated preferred route order
example : "mcp_direct_call,mcp_proxy_path,shell_execution"
mandatory: false
- name : routerallow
desc : Comma-separated allowlist of route types
example : "mcp_direct_call,mcp_proxy_path"
mandatory: false
- name : routerdeny
desc : Comma-separated denylist of route types
example : "shell_execution"
mandatory: false
- name : routerproxythreshold
desc : Payload size in bytes where proxy-style handling is preferred
example : "4096"
mandatory: false
- name : usememory
desc : Enable the structured working memory subsystem
example : "true"
mandatory: false
options : ["true", "false"]
- name : memoryuser
desc : Enable usememory and auto-configure file-backed global and session memory
example : "true"
mandatory: false
options : ["true", "false"]
- name : memoryusersession
desc : Enable usememory and auto-configure file-backed session memory only
example : "true"
mandatory: false
options : ["true", "false"]
- name : memoryscope
desc : Memory read scope (session, global or both)
example : "both"
mandatory: false
- name : memorysessionid
desc : Session key used to namespace session memory
example : "research-2024"
mandatory: false
- name : memorych
desc : SLON/JSON channel definition for global memory persistence
example : "(name: mini_a_global_mem, type: file, options: (file: '/tmp/mini-a-global.json'))"
mandatory: false
- name : memorysessionch
desc : SLON/JSON channel definition for session memory persistence
example : "(name: mini_a_session_mem, type: file, options: (file: '/tmp/mini-a-session.json'))"
mandatory: false
- name : memorymaxpersection
desc : Maximum memory entries kept per section
example : "80"
mandatory: false
- name : memorymaxentries
desc : Maximum total memory entries
example : "500"
mandatory: false
- name : memorycompactevery
desc : Compact memory every N updates
example : "8"
mandatory: false
- name : memorydedup
desc : Enable memory deduplication
example : "true"
mandatory: false
options : ["true", "false"]
- name : memorypromote
desc : Comma-separated memory sections to promote
example : "facts,decisions,summaries"
mandatory: false
- name : memorystaledays
desc : Mark memory entries stale after this many days
example : "30"
mandatory: false
- name : memoryinject
desc : Memory context injection mode (summary or full)
example : "summary"
mandatory: false
- name : usewiki
desc : Enable the wiki knowledge base
example : "true"
mandatory: false
options : ["true", "false"]
- name : wikiaccess
desc : Wiki access mode (ro or rw)
example : "rw"
mandatory: false
- name : wikibackend
desc : Wiki backend (fs or s3)
example : "fs"
mandatory: false
- name : wikiroot
desc : Root directory for the filesystem wiki backend
example : "/shared/wiki"
mandatory: false
- name : wikibucket
desc : Bucket name for the S3 wiki backend
example : "mini-a-wiki"
mandatory: false
- name : wikiprefix
desc : Prefix path for the S3 wiki backend
example : "wiki/"
mandatory: false
- name : wikiurl
desc : S3 endpoint URL for the wiki backend
example : "https://s3.amazonaws.com"
mandatory: false
- name : wikiaccesskey
desc : S3 access key for the wiki backend
example : "AKIA..."
mandatory: false
- name : wikisecret
desc : S3 secret key for the wiki backend
example : "secret"
mandatory: false
- name : wikiregion
desc : S3 region for the wiki backend
example : "eu-west-1"
mandatory: false
- name : wikiuseversion1
desc : Use S3 signature v1 for wiki access
example : "false"
mandatory: false
options : ["true", "false"]
- name : wikiignorecertcheck
desc : Disable TLS certificate checks for the wiki S3 backend
example : "false"
mandatory: false
options : ["true", "false"]
- name : wikilintstaleddays
desc : Default stale-page threshold in days for wiki lint
example : "90"
mandatory: false
- name : promptprofile
desc : "Prompt verbosity profile for system instructions (minimal, balanced, verbose)"
example : "balanced"
mandatory: false
options : ["minimal", "balanced", "verbose"]
- name : systempromptbudget
desc : "Maximum system prompt size in estimated tokens before Mini-A drops low-priority sections"
example : "1800"
mandatory: false
- name : format
desc : "Preferred Mini-A response format (md, json, yaml, toon or slon)"
example : "json"
mandatory: false
- name : auditch
desc : "SLON/JSON definition of an audit channel for Mini-A interaction logs"
example : "(type: file, options: (file: '/tmp/mini-a-audit.log'))"
mandatory: false
- name : toollog
desc : "SLON/JSON definition of a channel that records tool calls, arguments and responses"
example : "(type: file, options: (file: '/tmp/mini-a-tools.log'))"
mandatory: false
- name : metricsch
desc : "SLON/JSON definition of an OpenAF channel where Mini-A metrics snapshots are recorded"
example : "(name: 'mini-a-metrics', type: 'mvs', options: (file: '/tmp/mini-a-metrics.db'))"
mandatory: false
- name : usedelegation
desc : Enable sub-goal delegation to child Mini-A agents
example : "true"
mandatory: false
options : ["true", "false"]
- name : usea2a
desc : Use A2A HTTP+JSON/REST endpoints for remote worker delegation
example : "true"
mandatory: false
options : ["true", "false"]
- name : workers
desc : Comma-separated list of remote worker URLs
example : "http://worker-a:8080,http://worker-b:8080"
mandatory: false
- name : maxconcurrent
desc : Maximum concurrent child agents when delegation is enabled
example : "4"
mandatory: false
- name : delegationmaxdepth
desc : Maximum delegation nesting depth
example : "3"
mandatory: false
- name : delegationtimeout
desc : Default subtask deadline in milliseconds
example : "300000"
mandatory: false
- name : delegationmaxretries
desc : Default retry count for failed subtasks
example : "2"
mandatory: false
- name : workerreg
desc : Port for worker dynamic registration server
example : "12345"
mandatory: false
- name : workerregtoken
desc : Bearer token for worker registration endpoints
example : "secret"
mandatory: false
- name : workerevictionttl
desc : Heartbeat TTL in milliseconds before dynamic worker eviction
example : "60000"
mandatory: false
- name : workerregurl
desc : Comma-separated registration URL(s) used by workers in workermode
example : "http://main-host:12345"
mandatory: false
- name : workerreginterval
desc : Worker heartbeat interval in milliseconds for self-registration
example : "30000"
mandatory: false
- name : workerskills
desc : JSON/SLON array of worker skills exposed by workermode
example : "[(name: 'research')]"
mandatory: false
- name : workertags
desc : Comma-separated tags appended to the default workermode skill
example : "web,analysis"
mandatory: false
- name : showdelegate
desc : Show delegate/subtask events as separate lines
example : "true"
mandatory: false
options : ["true", "false"]
- name : deepresearch
desc : Enable deep research mode with iterative validation
example : "true"
mandatory: false
options : ["true", "false"]
- name : maxcycles
desc : Maximum research cycles in deep research mode
example : "3"
mandatory: false
- name : validationgoal
desc : Validation criteria for deep research outcomes
example : "Must include benchmarks and tradeoffs"
mandatory: false
- name : valgoal
desc : Alias for validationgoal
example : "Must include benchmarks and tradeoffs"
mandatory: false
- name : validationthreshold
desc : Required validation verdict (PASS or score>=0.x)
example : "score>=0.8"
mandatory: false
- name : persistlearnings
desc : Carry forward learnings between deep research cycles
example : "true"
mandatory: false
options : ["true", "false"]
- name : agent
desc : Markdown agent profile path or inline content with YAML metadata
example : "agents/reviewer.md"
mandatory: false
- name : agentfile
desc : Legacy alias for agent
example : "agents/reviewer.md"
mandatory: false
- name : secpass
desc : Password used to initialize the OpenAF sBucket for model references
example : "secret"
mandatory: false
- name : extracommands
desc : Comma-separated extra directories for custom slash commands
example : "/opt/mini-a/commands"
mandatory: false
- name : extraskills
desc : Comma-separated extra directories for custom skills
example : "/opt/mini-a/skills"
mandatory: false
- name : extrahooks
desc : Comma-separated extra directories for custom hooks
example : "/opt/mini-a/hooks"
mandatory: false
include:
- oJobHTTPd.yaml
todo:
- Init
- Periodic cleanup of old sessions
- Shutdown history S3 client
- (httpdStart ): "${onport:-8888}"
((mapLibs )): true
- (httpdHealthz ): "${onport:-8888}"
- (httpdMetrics ): "${onport:-8888}"
- Static content
- (httpdService ): "${onport:-8888}"
((uri )): /ping
((execURI )): | #js
return ow.server.httpd.reply({ status: "ok" })
# Info about the server
- (httpdService ): "${onport:-8888}"
((uri )): /info
((execURI )): | #js
try {
var _res = { status: "ok", usehistory: global.__usehistory, useattach: global.__useattach, historyretention: args.historyretention, showexecs: global.__showexecs, usestream: global.__usestream, showthinking: global.__showthinking, usemath: global.__usemath }
return ow.server.httpd.reply(_res)
} catch(e) {
printErr(e)
return ow.server.httpd.reply({ error: e.toString() })
}
# Clear a session
- (httpdService ): "${onport:-8888}"
((uri )): /clear
((execURI )): | #js
try {
var postData = jsonParse(request.files.postData)
// postData.force - to be used from the history pane to delete a specific session
// __useHistory - if no history is being used, always clear
if (!global.__usehistory || postData.force) {
log("Clearing session " + postData.uuid)
if (isDef(global.__res[ postData.uuid ])) {
delete global.__res[ postData.uuid ]
}
if (isDef(global.__conversations[ postData.uuid ])) {
if (isFunction(global.__conversations[ postData.uuid ].clearSessionMemory)) {
try { global.__conversations[ postData.uuid ].clearSessionMemory(postData.uuid) } catch(ignoreClearMemory) {}
}
delete global.__conversations[ postData.uuid ]
}
if (isDef(global.__lastActivity[ postData.uuid ])) {
delete global.__lastActivity[ postData.uuid ]
}
if (isDef(global.__planState) && isDef(global.__planState[ postData.uuid ])) {
delete global.__planState[ postData.uuid ]
}
if (global.__usehistory && !global.__historykeep) {
log("Deleting history file for session " + postData.uuid)
if (isFunction(global._mini_a_web_deleteHistory)) {
global._mini_a_web_deleteHistory(postData.uuid)
} else {
// Fallback local cleanup
var _hfile = global.__historypath + "/c-" + postData.uuid + ".json"
if (io.fileExists(_hfile)) {
io.rm(_hfile)
}
}
}
}
return ow.server.httpd.reply({ status: "cleared" })
} catch(e) {
printErr(e)
return ow.server.httpd.reply({ error: e.toString() })
}
# Submit a prompt
- (httpdService ): "${onport:-8888}"
((uri )): /prompt
((execURI )): | #js
var _res = { error: "check server logs" }
try {
function __normalizePromptInput(value) {
var text = isString(value) ? value : (isDef(value) ? String(value) : "")
text = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n")
text = text.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, "")
var maxPromptChars = isNumber(global.__maxpromptchars) && global.__maxpromptchars > 0 ? global.__maxpromptchars : 120000
if (text.length > maxPromptChars) {
throw "prompt exceeds max allowed length (" + maxPromptChars + " chars)"
}
return text
}
// Parse POST data
var postData = jsonParse(request.files.postData)
postData.prompt = __normalizePromptInput(postData.prompt)
// Validate UUID or generate a new one
if (isDef(postData.uuid)) {
_res.uuid = postData.uuid
} else {
_res.uuid = genUUID()
}
// Initialize response storage
if (isUnDef(global.__res[_res.uuid])) {
global.__res[ _res.uuid ] = [ ]
global.__conversations[ _res.uuid ] = __
global.__lastActivity[ _res.uuid ] = Date.now()
} else {
global.__lastActivity[ _res.uuid ] = Date.now()
}
// Prompt header logging
if (global.__logpromptheaders.length > 0) {
global.__logpromptheaders.forEach( h => {
if (isDef(request.header[h])) {
log("[" + _res.uuid + "] Prompt header " + h + ": " + request.header[h])
}
})
}
// Start Mini-A interaction in a non-blocking way
$doV(() => {
var uuid = _res.uuid, lma, isNewConversation = false
if (global.__usestream && isFunction(global._mini_a_web_initSSE)) {
global._mini_a_web_initSSE(uuid)
}
if (isDef(global.__planState) && isDef(global.__planState[ uuid ])) {
delete global.__planState[ uuid ]
}
// If history is enabled, set the history file
var _hfile = global.__usehistory ? global.__historypath + "/c-" + uuid + ".json" : __
// If conversation does not exist, create it
if (isUnDef(global.__conversations[ uuid ])) {
isNewConversation = true
// If history does not exist but we have history in memory, rebuild it
if (global.__usehistory && !global._mini_a_web_historyExists(uuid) && isDef(global.__res[ uuid ]) && global.__res[ uuid ].length > 0) {
// Try rebuilding
var _data = []
for (var i = 0; i < global.__res[ uuid ].length; i++) {
var r = global.__res[ uuid ][i]
if (r.event == "👤") {
_data.push( { role: "user", content: r.message } )
} else if (r.event == "🤖" || r.event == "⬅️") {
_data.push( { role: "assistant", content: r.message } )
} else if (r.event == "⚙️" || r.event == "🖥️") {
_data.push( { role: "assistant", content: "[TOOL_OUTPUT] " + r.message } )
}
}
if (_data.length > 0) {
global._mini_a_web_saveFile(_hfile, { u: new Date(), c: _data })
log("[" + uuid + "] Rebuilt history file " + _hfile)
}
}
// Initialize MiniA
lma = new MiniA()
lma.setInteractionFn( (e, m) => {
try {
if (e == "stream") {
if (global.__usestream && isFunction(global._mini_a_web_ssePush)) {
global._mini_a_web_ssePush(uuid, "stream", { message: m })
}
return
}
if (e == "planner_stream") {
return
}
var _e = ""
switch(e) {
case "user" : _e = "👤"; break
case "exec" : _e = "⚙️"; break
case "shell" : _e = "🖥️"; break
case "think" : _e = "💡"; break
case "final" : _e = "🏁"; break
case "input" : _e = "➡️"; break
case "output" : _e = "⬅️"; break