@pleri/olam-cli 0.1.199 → 0.1.201
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/dist/ask/knowledge-pack.generated.d.ts.map +1 -1
- package/dist/ask/knowledge-pack.generated.js +3 -1
- package/dist/ask/knowledge-pack.generated.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +23 -8
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +3 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/flywheel/diversity-check.d.ts +1 -1
- package/dist/commands/flywheel/diversity-check.js +1 -1
- package/dist/commands/flywheel/k5-score.d.ts +1 -1
- package/dist/commands/flywheel/k5-score.js +1 -1
- package/dist/commands/flywheel/k5-validate.d.ts +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/kg-mirror.d.ts +16 -0
- package/dist/commands/kg-mirror.d.ts.map +1 -1
- package/dist/commands/kg-mirror.js +94 -0
- package/dist/commands/kg-mirror.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +7 -3
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/refresh.js +1 -1
- package/dist/commands/refresh.js.map +1 -1
- package/dist/commands/skills-100x.d.ts +34 -0
- package/dist/commands/skills-100x.d.ts.map +1 -0
- package/dist/commands/{skills-10x.js → skills-100x.js} +138 -41
- package/dist/commands/skills-100x.js.map +1 -0
- package/dist/commands/skills-install-model-router.d.ts +20 -0
- package/dist/commands/skills-install-model-router.d.ts.map +1 -0
- package/dist/commands/skills-install-model-router.js +55 -0
- package/dist/commands/skills-install-model-router.js.map +1 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +2 -0
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +0 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +1 -2
- package/dist/commands/workspace.js.map +1 -1
- package/dist/image-digests.json +8 -8
- package/dist/index.js +1127 -716
- package/dist/index.js.map +1 -1
- package/dist/lib/help-groups.js +1 -1
- package/dist/lib/help-groups.js.map +1 -1
- package/dist/mcp-server.js +547 -346
- package/hermes-bundle/version.json +1 -1
- package/hooks/model-router.py +445 -0
- package/host-cp/k8s/manifests/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +1 -1
- package/package.json +2 -1
- package/dist/commands/skills-10x.d.ts +0 -23
- package/dist/commands/skills-10x.d.ts.map +0 -1
- package/dist/commands/skills-10x.js.map +0 -1
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Model Router hook (advisory mode) — classifier v2 (weighted scoring).
|
|
4
|
+
|
|
5
|
+
Pipeline:
|
|
6
|
+
1. Collect rule matches as (tier, weight) pairs.
|
|
7
|
+
2. Apply scoring modifiers:
|
|
8
|
+
- BULK_INDICATORS boost CHEAP when paired with a cheap-verb match.
|
|
9
|
+
- BOUNDED_INDICATORS suppress HARD when present, lift MAIN.
|
|
10
|
+
- NEGATION preceding a HARD keyword cancels that HARD weight,
|
|
11
|
+
lifts CHEAP by a small amount.
|
|
12
|
+
3. Decide: highest total wins; ties resolve toward HARD (escalation-biased
|
|
13
|
+
— false-Opus is cheap insurance vs false-Haiku). All-zero → MAIN default.
|
|
14
|
+
|
|
15
|
+
Mode: ADVISORY. Logs every decision to /tmp/model-router.log. Hook MUST
|
|
16
|
+
never break a session — all I/O wrapped in try/except.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import json
|
|
20
|
+
import re
|
|
21
|
+
import sys
|
|
22
|
+
from datetime import datetime, timezone
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
LOG_PATH = Path("/tmp/model-router.log")
|
|
26
|
+
|
|
27
|
+
# Each rule: (tier, weight, regex_pattern)
|
|
28
|
+
RULES = [
|
|
29
|
+
# ============================================================
|
|
30
|
+
# CHEAP — mechanical / deterministic transforms
|
|
31
|
+
# ============================================================
|
|
32
|
+
("cheap", 5, r"\brename\b"),
|
|
33
|
+
("cheap", 4, r"\bformat\s+(?:this|the|all|every|our)\b"),
|
|
34
|
+
("cheap", 4, r"\bformat\s+\S+\.(?:json|ya?ml|md|css|s?css|html|toml|sql|js|ts|tsx|jsx|py|rb|go|rs)\b"),
|
|
35
|
+
("cheap", 4, r"\bsort\s+(?:the\s+)?(?:entries|keys|values|list|imports|deps|devdependencies)\b"),
|
|
36
|
+
("cheap", 4, r"\bbump\s+(?:all\s+|every\s+)?(?:internal\s+)?\S+\s+(?:dep|deps|dependenc|version|engines)"),
|
|
37
|
+
("cheap", 4, r"\bbump\s+every\s+package\.json"),
|
|
38
|
+
("cheap", 5, r"\blist\s+(?:every|all)\s+(?:todo|fixme)"),
|
|
39
|
+
("cheap", 4, r"\btranslate\s+(?:every|the|this|all)\b"),
|
|
40
|
+
("cheap", 5, r"\badd\s+jsdoc\b"),
|
|
41
|
+
("cheap", 5, r"\badd\s+docstrings?\b"),
|
|
42
|
+
("cheap", 5, r"\badd\s+(?:precise\s+)?(?:typescript\s+)?type\s+annotations\b"),
|
|
43
|
+
("cheap", 4, r"\badd\s+explicit\s+return\s+types?\b"),
|
|
44
|
+
("cheap", 4, r"\bgenerate\s+(?:empty\s+)?[\w/,\s]{0,40}\bstubs?\b"),
|
|
45
|
+
("cheap", 5, r"\bupdate\s+(?:the\s+)?copyright\s+year\b"),
|
|
46
|
+
("cheap", 4, r"\bnpm\s+run\s+lint\s*--?\s*fix\b"),
|
|
47
|
+
("cheap", 5, r"\bprettier\s+--write\b"),
|
|
48
|
+
("cheap", 5, r"\beslint\s+--fix\b"),
|
|
49
|
+
("cheap", 5, r"\bbiome\s+format\b"),
|
|
50
|
+
|
|
51
|
+
# Cheap "transform every X" verbs
|
|
52
|
+
("cheap", 3, r"\bconvert\b[^\n]{0,80}\b(?:to|from)\s+(?:async|await|camel|snake|kebab|pascal|f[-\s]string|format|template|sha256|sha512|esm|cjs|https?|json|yaml|screaming)"),
|
|
53
|
+
("cheap", 4, r"\bconvert\s+every\b"),
|
|
54
|
+
("cheap", 4, r"\breplace\s+every\b"),
|
|
55
|
+
("cheap", 4, r"\breplace\s+all\s+(?:hardcoded|inline|magic|the)\b"),
|
|
56
|
+
("cheap", 4, r"\bstrip\s+(?:every|all|trailing|leading)\b"),
|
|
57
|
+
("cheap", 4, r"\bdrop\s+(?:every|all|the\s+)?unused\b"),
|
|
58
|
+
("cheap", 4, r"\bswap\s+(?:every|all|them)\b"),
|
|
59
|
+
("cheap", 4, r"\brewrite\s+(?:the\s+)?(?:file[-\s]extension|imports?|requires?)\b"),
|
|
60
|
+
("cheap", 3, r"\binline\s+the\s+\S+\s+helper\b"),
|
|
61
|
+
("cheap", 4, r"\bstandardise\s+(?:the\s+)?(?:test\s+file\s+naming|imports?|file\s+headers?|json|trailing|newline)\b"),
|
|
62
|
+
("cheap", 5, r"\bun-?skip\b"),
|
|
63
|
+
("cheap", 4, r"\badd\s+(?:a\s+)?trailing\s+(?:newline|semicolon|comma)\b"),
|
|
64
|
+
("cheap", 5, r"\bfind\s+(?:and\s+)?replace\b"),
|
|
65
|
+
("cheap", 5, r"\bmass[-\s]substitute\b"),
|
|
66
|
+
("cheap", 4, r"\bpure\s+substitution\b"),
|
|
67
|
+
("cheap", 3, r"\balphabetic(?:al(?:ly)?)?\b"),
|
|
68
|
+
("cheap", 4, r"\bchange\s+every\b"),
|
|
69
|
+
("cheap", 4, r"\bupdate\s+every\s+(?:\S+\s+){0,2}(?:to|with|from)\b"),
|
|
70
|
+
("cheap", 3, r"\b(?:swap|change)\s+them\s+to\b"),
|
|
71
|
+
("cheap", 4, r"\bone[-\s]line\s+change\s+per\s+file\b"),
|
|
72
|
+
("cheap", 5, r"\bjust\s+rename\b"),
|
|
73
|
+
("cheap", 5, r"\bpurely\s+mechanical\b"),
|
|
74
|
+
("cheap", 5, r"\bno\s+(?:logic|behavioural?|behavioral|other)\s+changes?\b"),
|
|
75
|
+
("cheap", 5, r"\bpreserve\s+behaviou?r\s+exactly\b"),
|
|
76
|
+
("cheap", 4, r"\bfix\s+(?:the\s+)?relative\s+paths\b"),
|
|
77
|
+
("cheap", 4, r"\bremove\s+the\s+\.\w+\s+modifier\b"),
|
|
78
|
+
# "every <thing>" + directive patterns (mass-operation prose)
|
|
79
|
+
("cheap", 5, r"\bfind\s+every\b"),
|
|
80
|
+
("cheap", 5, r"\bupdate\s+all\s+the\b"),
|
|
81
|
+
("cheap", 4, r"\bupdate\s+every\b"),
|
|
82
|
+
("cheap", 5, r"\badd\s+\S+(?:\s+\S+)?\s+(?:to|in)\s+every\b"),
|
|
83
|
+
("cheap", 5, r"\badd\s+(?:them|it|these)\s+(?:back|where\s+missing|here)\b"),
|
|
84
|
+
("cheap", 4, r"\badd\s+it\s+where\s+missing\b"),
|
|
85
|
+
("cheap", 4, r"\bstandardi[sz]e[\s:]"),
|
|
86
|
+
("cheap", 3, r"\bone[-\s]line\s+change\s+per\s+file\b"),
|
|
87
|
+
("cheap", 4, r"\b(?:dbt[-\s]style|fyi|cleanup\s+pass|cleanup\s+task)\s*[:—]"),
|
|
88
|
+
("cheap", 3, r"\bevery\s+(?:\.\w+\s+file|\S+\s+(?:file|files|component|components|import|imports|importer|module|modules|test|tests|header|headers|line|lines|string|strings|env|var|vars|variable|variables|key|keys))\b"),
|
|
89
|
+
("cheap", 3, r"\bevery\s+\S+\s+(?:should\s+be|should\s+have|should\s+end|needs\s+a?|that's\s+only)\b"),
|
|
90
|
+
("cheap", 4, r"\bevery\s+\S+\s*[→]\s*\S+"),
|
|
91
|
+
("cheap", 3, r"\bjust\s+the\s+year"),
|
|
92
|
+
|
|
93
|
+
# ============================================================
|
|
94
|
+
# MAIN — anti-CHEAP for bounded feature-adds
|
|
95
|
+
# ============================================================
|
|
96
|
+
("main", 5, r"\badd\s+an?\s+(?:\S+\s+){0,3}(?:flag|field|route|endpoint|column|badge|button|hook|provider|middleware|option|feature\s+flag\s+check|rule|debounce|cache|progress\s+bar|modal|toast|notification)\b"),
|
|
97
|
+
|
|
98
|
+
# ============================================================
|
|
99
|
+
# HARD — architecture / migration / cross-service / deep investigation
|
|
100
|
+
# ============================================================
|
|
101
|
+
# Verbs / decision asks
|
|
102
|
+
("hard", 6, r"\bdesign\s+(?:a\s+|the\s+)?(?:feature[-\s]flag\s+system|migration|data\s+model|architecture|rollout|unified|API\s+versioning|backwards?[-\s]compatible)"),
|
|
103
|
+
("hard", 5, r"\bpropose\s+(?:an?\s+)?(?:architectural|backwards?[-\s]compatible|migration|deprecation|rollout|unified|strategy|path)"),
|
|
104
|
+
("hard", 5, r"\barchitect(?:ure)?\b"),
|
|
105
|
+
("hard", 5, r"\barchitect\s+the\s+fix\b"),
|
|
106
|
+
("hard", 4, r"\binvestigate\b"),
|
|
107
|
+
("hard", 5, r"\baudit\s+(?:all|every|across|retry|logging|all\s+\d+\s+services?)\b"),
|
|
108
|
+
("hard", 6, r"\bunify\b[^\n]{0,80}\bacross\b"),
|
|
109
|
+
("hard", 6, r"\brefactor\s+(?:cross[-\s]cutting|every\s+service)"),
|
|
110
|
+
("hard", 6, r"\brefactor\b[^\n]{0,80}\bacross\s+(?:every|all|the\s+monorepo)"),
|
|
111
|
+
("hard", 6, r"\bplan\s+(?:the\s+|a\s+)?(?:rollout|migration|deprecation|sharding|cutover|sunset|deploy|deployment)"),
|
|
112
|
+
|
|
113
|
+
# Architectural concept nouns
|
|
114
|
+
("hard", 6, r"\bzero[-\s]downtime\b"),
|
|
115
|
+
("hard", 6, r"\bmulti[-\s]tenant\b"),
|
|
116
|
+
("hard", 6, r"\bsharding\b"),
|
|
117
|
+
("hard", 5, r"\brace\s+condition\b"),
|
|
118
|
+
("hard", 5, r"\bp99\b|\bp95\b|\bp999\b"),
|
|
119
|
+
("hard", 5, r"\blatency\s+spike"),
|
|
120
|
+
("hard", 5, r"\btail\s+latenc"),
|
|
121
|
+
("hard", 5, r"\bmemory\s+leak\b"),
|
|
122
|
+
("hard", 4, r"\btradeoffs?\b"),
|
|
123
|
+
("hard", 5, r"\bsaga\b"),
|
|
124
|
+
("hard", 5, r"\b2pc\b|\btwo[-\s]phase\s+commit\b"),
|
|
125
|
+
("hard", 6, r"\bmonorepo[-\s]wide\b"),
|
|
126
|
+
("hard", 5, r"\bstart\s+from\b[^\n]{0,100}\bend\s+with\b"),
|
|
127
|
+
("hard", 5, r"\bcross[-\s]service\b"),
|
|
128
|
+
("hard", 6, r"\bbackwards[-\s]compatible\s+(?:api|migration|strategy|versioning)"),
|
|
129
|
+
("hard", 4, r"\bbackwards[-\s]compatible\b"),
|
|
130
|
+
("hard", 5, r"\bmigrate\s+every\b"),
|
|
131
|
+
("hard", 4, r"\bevery\s+endpoint\b"),
|
|
132
|
+
("hard", 6, r"\bpool\s+exhaustion\b"),
|
|
133
|
+
("hard", 6, r"\bfeature[-\s]flag\s+system\b"),
|
|
134
|
+
("hard", 5, r"\bevery\s+(?:service|repo|package|microservice|public\s+endpoint|mutating\s+endpoint)\b"),
|
|
135
|
+
("hard", 4, r"\bcross[-\s]cutting\b"),
|
|
136
|
+
("hard", 5, r"\bunified\s+(?:middleware|layer|policy|contract|approach)\b"),
|
|
137
|
+
("hard", 6, r"\bcircular\s+depend"),
|
|
138
|
+
("hard", 6, r"\bdata\s+residency\b"),
|
|
139
|
+
("hard", 6, r"\baudit\s+log\b"),
|
|
140
|
+
("hard", 6, r"\bidempotency\s+layer\b"),
|
|
141
|
+
("hard", 6, r"\bevent\s+sourcing\b"),
|
|
142
|
+
("hard", 6, r"\bdrift\s+detection\b"),
|
|
143
|
+
("hard", 6, r"\bbottleneck\s+analysis\b"),
|
|
144
|
+
("hard", 5, r"\bpermanent\s+fix\b"),
|
|
145
|
+
("hard", 5, r"\bdual[-\s]write\b"),
|
|
146
|
+
("hard", 5, r"\bself[-\s]healing\b"),
|
|
147
|
+
("hard", 5, r"\bsoc\s?2\b"),
|
|
148
|
+
("hard", 4, r"\bpii\s+(?:write|data|field|column|store|storage|audit)\b"),
|
|
149
|
+
("hard", 5, r"\bttfb\b"),
|
|
150
|
+
("hard", 4, r"\bdata\s+model\b"),
|
|
151
|
+
("hard", 4, r"\bauth\s+systems?\b"),
|
|
152
|
+
("hard", 5, r"\bdeadlock"),
|
|
153
|
+
("hard", 5, r"\bdeploy\s+pipeline\b"),
|
|
154
|
+
("hard", 5, r"\bthroughput\s+stall"),
|
|
155
|
+
("hard", 4, r"\bdesync\b"),
|
|
156
|
+
("hard", 5, r"\bfile\s+descriptors?\b|\bfd\s+leak\b"),
|
|
157
|
+
("hard", 5, r"\boperationally\s+serious\b"),
|
|
158
|
+
("hard", 5, r"\breal[-\s]time\s+chat\b"),
|
|
159
|
+
("hard", 5, r"\binfra\s+(?:bill|cost)\b|\bci\s+cost\b"),
|
|
160
|
+
("hard", 5, r"\boncall\s+(?:is\s+)?(?:getting\s+)?paged\b"),
|
|
161
|
+
("hard", 4, r"\bdrift(?:ed)?\s+(?:in|from|across|over)\b"),
|
|
162
|
+
("hard", 5, r"\bstandardise\s+(?:the\s+)?(?:error|contract|response)\s+(?:across|and\s+migrate)"),
|
|
163
|
+
("hard", 5, r"\bstandardize\s+(?:the\s+)?(?:error|contract|response)\s+(?:across|and\s+migrate)"),
|
|
164
|
+
|
|
165
|
+
# Cross-system / scale signals
|
|
166
|
+
("hard", 5, r"\b\d+\s+(?:packages|services|microservices|consumers|regions|bindings|tenants|language\s+bindings)\b"),
|
|
167
|
+
("hard", 5, r"\b\$\d+[Kk]?\s*/\s*month\b"),
|
|
168
|
+
("hard", 5, r"\b\d+[KkMmBb]?\s+(?:events|jobs|rows|requests|RPS|qps)\s*(?:/\s*(?:year|day|sec|s))?\b"),
|
|
169
|
+
("hard", 5, r"\b(?:replace|rewrite|untangle)\s+(?:our|the|them)?\s*(?:background\s+job|job\s+system|queue|auth|infrastructure|stack)?"),
|
|
170
|
+
("hard", 5, r"\bbundle\s+is\s+\d+(?:\.\d+)?\s?[KkMm]B\s+(?:gzipped|min\w*)"),
|
|
171
|
+
("hard", 4, r"\bcrud\s+(?:vs|or)\b|\bevent\s+sourcing\s+(?:vs|or)\b"),
|
|
172
|
+
("hard", 4, r"\bcdn\s*/\s*origin\b"),
|
|
173
|
+
("hard", 4, r"\bdata\s+residency\b"),
|
|
174
|
+
("hard", 4, r"\bnetwork\s+blip\b"),
|
|
175
|
+
("hard", 4, r"\bgrpc\s+(?:for|vs)\b|\bkafka\b"),
|
|
176
|
+
("hard", 4, r"\bcompliance\s+req"),
|
|
177
|
+
("hard", 4, r"\bgradually\s+drift"),
|
|
178
|
+
("hard", 5, r"\bgoing\s+forward\b.*?(?:sdk|drift|sync)"),
|
|
179
|
+
("hard", 4, r"\bevery\s+pii\b"),
|
|
180
|
+
]
|
|
181
|
+
|
|
182
|
+
# Bulk indicators — if present alongside a cheap-verb match, boost CHEAP.
|
|
183
|
+
BULK_INDICATORS = re.compile(
|
|
184
|
+
r"\b(?:every|all|each|whole|entire|across\s+(?:our\s+)?(?:the\s+)?"
|
|
185
|
+
r"(?:codebase|repo|monorepo|packages?|test\s+suite))\b",
|
|
186
|
+
re.IGNORECASE,
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
# Action verbs that mark a mass-operation when bulk indicators are present.
|
|
190
|
+
MASS_OP_VERBS = re.compile(
|
|
191
|
+
r"\b(?:add|find|update|change|fix|drop|strip|swap|remove|move|replace|"
|
|
192
|
+
r"rewrite|wrap(?:ped)?|standardi[sz]e|preserve|set|insert)\b",
|
|
193
|
+
re.IGNORECASE,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
# Bounded scope markers — suppress HARD signals, lift MAIN.
|
|
197
|
+
BOUNDED_INDICATORS = re.compile(
|
|
198
|
+
r"\b("
|
|
199
|
+
r"single\s+(?:test|file|component|hook|endpoint|query|class|function|variable|form|field)"
|
|
200
|
+
r"|just\s+(?:this|one)\s+(?:file|test|component|hook|endpoint|class|variable|function|module)"
|
|
201
|
+
r"|this\s+specific"
|
|
202
|
+
r"|this\s+one\s+file"
|
|
203
|
+
r"|in\s+`[^`]+`"
|
|
204
|
+
r"|in\s+\S+\.[a-z]{2,5}\b"
|
|
205
|
+
r"|single\s+(?:react\s+)?hook"
|
|
206
|
+
r"|one\s+(?:hook|file|component|query|function|module)"
|
|
207
|
+
r"|small[-\s]d|\(small\s*d?\)|small\s+d\b|design\s+\(small\)"
|
|
208
|
+
r"|two\s+(?:components|services)\b"
|
|
209
|
+
r"|\bone\s+endpoint\b"
|
|
210
|
+
r"|single\s+component"
|
|
211
|
+
r"|in\s+a\s+single\s+file"
|
|
212
|
+
r"|one\s+variable"
|
|
213
|
+
r"|design\s+a\s+small\b"
|
|
214
|
+
r"|propose\s+(?:a\s+)?better\s+name\b"
|
|
215
|
+
r")",
|
|
216
|
+
re.IGNORECASE,
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
# Negation patterns that, when appearing within ~80 chars before a HARD
|
|
220
|
+
# keyword, cancel that HARD signal.
|
|
221
|
+
NEGATION = re.compile(
|
|
222
|
+
r"(?:don'?t|do\s+not|no\s+(?:design|architecture|need\s+to|logic|behavioural?|behavioral)"
|
|
223
|
+
r"|avoid|skip|it'?s\s+tempting\s+to|we'?re\s+not"
|
|
224
|
+
r"|i\s+know\s+this\s+looks\s+like"
|
|
225
|
+
r"|but\s+(?:it'?s\s+not|really)\b"
|
|
226
|
+
r"|no\s+\S+\s+(?:decisions?|changes?)"
|
|
227
|
+
r"|already\s+designed)",
|
|
228
|
+
re.IGNORECASE,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def collect_matches(prompt):
|
|
233
|
+
matches = [] # (tier, weight, regex, span_text, start_idx)
|
|
234
|
+
for tier, weight, regex in RULES:
|
|
235
|
+
for m in re.finditer(regex, prompt, re.IGNORECASE):
|
|
236
|
+
matches.append((tier, weight, regex, m.group(0), m.start()))
|
|
237
|
+
return matches
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def apply_negation(prompt, matches):
|
|
241
|
+
"""Cancel HARD matches whose preceding 80 chars contain a negation."""
|
|
242
|
+
suppressed = []
|
|
243
|
+
for tier, weight, regex, span, start in matches:
|
|
244
|
+
if tier != "hard":
|
|
245
|
+
suppressed.append((tier, weight, regex, span, start, False))
|
|
246
|
+
continue
|
|
247
|
+
window = prompt[max(0, start - 100):start]
|
|
248
|
+
if NEGATION.search(window):
|
|
249
|
+
suppressed.append((tier, weight, regex, span, start, True))
|
|
250
|
+
else:
|
|
251
|
+
suppressed.append((tier, weight, regex, span, start, False))
|
|
252
|
+
return suppressed
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def classify(prompt):
|
|
256
|
+
scores = {"cheap": 0, "main": 0, "hard": 0}
|
|
257
|
+
triggered = []
|
|
258
|
+
|
|
259
|
+
matches = collect_matches(prompt)
|
|
260
|
+
annotated = apply_negation(prompt, matches)
|
|
261
|
+
|
|
262
|
+
for tier, weight, regex, span, start, negated in annotated:
|
|
263
|
+
if negated:
|
|
264
|
+
triggered.append({"tier": tier, "weight": 0, "span": span, "neg": True})
|
|
265
|
+
# Negated HARD → strong cheap signal, since prompt is *correcting*
|
|
266
|
+
# the impression that this is architectural.
|
|
267
|
+
scores["cheap"] += 3
|
|
268
|
+
continue
|
|
269
|
+
scores[tier] += weight
|
|
270
|
+
triggered.append({"tier": tier, "weight": weight, "span": span, "neg": False})
|
|
271
|
+
|
|
272
|
+
# Bulk-indicator boost: if any cheap-verb match exists AND bulk indicators
|
|
273
|
+
# are present, add a structural +4 to CHEAP. Helps "Across the whole
|
|
274
|
+
# codebase, replace X with Y" beat HARD trap "across".
|
|
275
|
+
has_cheap = any(t["tier"] == "cheap" and not t["neg"] for t in triggered)
|
|
276
|
+
if has_cheap and BULK_INDICATORS.search(prompt):
|
|
277
|
+
scores["cheap"] += 4
|
|
278
|
+
triggered.append({"tier": "cheap", "weight": 4, "span": "[bulk-boost]", "neg": False})
|
|
279
|
+
|
|
280
|
+
# Mass-operation meta-rule: when bulk indicators ("every|all|each") +
|
|
281
|
+
# action verb (add|find|update|change|fix|...) coexist AND no HARD signal
|
|
282
|
+
# is present, lift CHEAP by +4. Catches "every <thing> should ..." prose
|
|
283
|
+
# without a named verb-noun pair in the rule list.
|
|
284
|
+
if (
|
|
285
|
+
scores["hard"] == 0
|
|
286
|
+
and BULK_INDICATORS.search(prompt)
|
|
287
|
+
and MASS_OP_VERBS.search(prompt)
|
|
288
|
+
):
|
|
289
|
+
scores["cheap"] += 4
|
|
290
|
+
triggered.append({"tier": "cheap", "weight": 4, "span": "[mass-op]", "neg": False})
|
|
291
|
+
|
|
292
|
+
# Bounded-scope suppression: if HARD signals exist but bounded markers
|
|
293
|
+
# are present, subtract from HARD and add to MAIN. Helps "Investigate
|
|
294
|
+
# this specific test (file:line)" become MAIN, not HARD.
|
|
295
|
+
if scores["hard"] > 0 and BOUNDED_INDICATORS.search(prompt):
|
|
296
|
+
scores["hard"] = max(0, scores["hard"] - 6)
|
|
297
|
+
scores["main"] += 4
|
|
298
|
+
triggered.append({"tier": "main", "weight": 4, "span": "[bounded-scope]", "neg": False})
|
|
299
|
+
|
|
300
|
+
# Decision: highest score wins; tie → HARD (escalation-biased).
|
|
301
|
+
# All-zero → MAIN default.
|
|
302
|
+
if scores["cheap"] == 0 and scores["hard"] == 0:
|
|
303
|
+
return "main", scores, triggered
|
|
304
|
+
|
|
305
|
+
if scores["hard"] > scores["cheap"] and scores["hard"] > scores["main"]:
|
|
306
|
+
return "hard", scores, triggered
|
|
307
|
+
if scores["cheap"] > scores["hard"] and scores["cheap"] > scores["main"]:
|
|
308
|
+
return "cheap", scores, triggered
|
|
309
|
+
if scores["main"] > scores["cheap"] and scores["main"] > scores["hard"]:
|
|
310
|
+
return "main", scores, triggered
|
|
311
|
+
|
|
312
|
+
# Tie path
|
|
313
|
+
if scores["hard"] == max(scores.values()):
|
|
314
|
+
return "hard", scores, triggered
|
|
315
|
+
if scores["cheap"] == max(scores.values()):
|
|
316
|
+
return "cheap", scores, triggered
|
|
317
|
+
return "main", scores, triggered
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
TIER_REMINDERS = {
|
|
321
|
+
"cheap": (
|
|
322
|
+
"═════════════════════════════════════════════════════════════\n"
|
|
323
|
+
"MODEL SWAP RECOMMENDED: opus → haiku (≈ 15× cost reduction)\n"
|
|
324
|
+
"═════════════════════════════════════════════════════════════\n\n"
|
|
325
|
+
"**Dispatch directive:** Do NOT execute this turn on the current model. "
|
|
326
|
+
"Invoke the Agent tool with `subagent_type: \"100x-trooper\"` "
|
|
327
|
+
"(pins `model: haiku`).\n\n"
|
|
328
|
+
"**Write a THICK, self-contained dispatch prompt.** The sub-agent starts "
|
|
329
|
+
"cold with no access to this conversation. Include inline:\n"
|
|
330
|
+
"- Exact file path(s) to operate on\n"
|
|
331
|
+
"- Exact symbol / pattern to find and what to replace it with\n"
|
|
332
|
+
"- Any code snippet or context the sub-agent needs to act correctly\n"
|
|
333
|
+
"Do NOT write 'see conversation above' or pass the raw user message verbatim "
|
|
334
|
+
"if it lacks file paths or context — synthesise a precise, standalone task.\n\n"
|
|
335
|
+
"Why: classifier sees a mechanical / deterministic transform — "
|
|
336
|
+
"Haiku 4.5 is ~90% as good as Sonnet here at roughly 1/15 the cost. "
|
|
337
|
+
"If the cheap-tier executor finds the task is actually ambiguous, it "
|
|
338
|
+
"will emit `[100x-trooper] escalate: <reason>` — re-dispatch then to "
|
|
339
|
+
"`100x-specialist` or `100x-officer`."
|
|
340
|
+
),
|
|
341
|
+
"main": (
|
|
342
|
+
"═════════════════════════════════════════════════════════════\n"
|
|
343
|
+
"MODEL SWAP RECOMMENDED: opus → sonnet (≈ 5× cost reduction)\n"
|
|
344
|
+
"═════════════════════════════════════════════════════════════\n\n"
|
|
345
|
+
"**Dispatch directive:** Bounded feature/bug-fix work. Invoke the "
|
|
346
|
+
"Agent tool with `subagent_type: \"100x-specialist\"` (pins `model: sonnet`).\n\n"
|
|
347
|
+
"**Write a focused task description with key pointers.** The sub-agent "
|
|
348
|
+
"inherits project conventions from the system prompt — you don't need to "
|
|
349
|
+
"re-explain the codebase. Include only what the system prompt cannot supply:\n"
|
|
350
|
+
"- Exact file path(s) and the specific function / line to change\n"
|
|
351
|
+
"- The goal in one sentence and any non-obvious constraint\n"
|
|
352
|
+
"- Any decision already made in this conversation that affects the task\n"
|
|
353
|
+
"Do NOT paste entire files or conversation summaries — precision beats volume.\n\n"
|
|
354
|
+
"If the work spawns clearly mechanical subtasks (renames, bulk type "
|
|
355
|
+
"annotations, formatting), dispatch THOSE to `100x-trooper`. Escalate "
|
|
356
|
+
"to `100x-officer` only if architectural scope reveals itself."
|
|
357
|
+
),
|
|
358
|
+
"hard": (
|
|
359
|
+
"═════════════════════════════════════════════════════════════\n"
|
|
360
|
+
"MODEL ROUTING: stay on opus (architectural work)\n"
|
|
361
|
+
"═════════════════════════════════════════════════════════════\n\n"
|
|
362
|
+
"**Dispatch directive:** Architecture / migration / cross-service / "
|
|
363
|
+
"deep investigation. Invoke `100x-officer` (pins `model: opus`) so the "
|
|
364
|
+
"transcript marker `[100x-officer @ opus]` makes the routing decision "
|
|
365
|
+
"auditable.\n\n"
|
|
366
|
+
"**Write a precise architectural question with key pointers.** The "
|
|
367
|
+
"sub-agent inherits project conventions from the system prompt. Add only "
|
|
368
|
+
"what the system prompt cannot supply:\n"
|
|
369
|
+
"- The specific decision or design question to answer\n"
|
|
370
|
+
"- Constraints and rejected alternatives established in this conversation\n"
|
|
371
|
+
"- Repo paths for the 2–3 most relevant files (don't narrate the whole tree)\n"
|
|
372
|
+
"Compression risk: summarising complex context loses nuance. Prefer sharp "
|
|
373
|
+
"pointers over prose summaries — the sub-agent can read the files it needs.\n\n"
|
|
374
|
+
"Decompose aggressively: mechanical subtasks → `100x-trooper`, bounded "
|
|
375
|
+
"implementation subtasks → `100x-specialist`. "
|
|
376
|
+
"Spend Opus tokens on reasoning, not editing."
|
|
377
|
+
),
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
DOMAIN_FLAGS = {
|
|
381
|
+
"auth": r"\b(?:auth|authn|authz|login|session|jwt|oauth|sso|password|credential)\b",
|
|
382
|
+
"payment": r"\b(?:payment|billing|invoice|charge|refund|stripe|checkout)\b",
|
|
383
|
+
"migration": r"\b(?:migration|migrate|schema\s+change|backfill)\b",
|
|
384
|
+
"security": r"\b(?:security|vulnerability|cve|xss|sqli|injection|exploit|secret\s+leak)\b",
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def emit_log(record):
|
|
389
|
+
try:
|
|
390
|
+
LOG_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
391
|
+
with LOG_PATH.open("a", encoding="utf-8") as fh:
|
|
392
|
+
fh.write(json.dumps(record, ensure_ascii=False) + "\n")
|
|
393
|
+
except Exception:
|
|
394
|
+
pass
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
def main():
|
|
398
|
+
try:
|
|
399
|
+
payload = json.load(sys.stdin)
|
|
400
|
+
except Exception:
|
|
401
|
+
return 0
|
|
402
|
+
|
|
403
|
+
prompt = (payload.get("prompt") or "").strip()
|
|
404
|
+
if not prompt:
|
|
405
|
+
return 0
|
|
406
|
+
|
|
407
|
+
tier, scores, triggered = classify(prompt)
|
|
408
|
+
flags = [
|
|
409
|
+
name for name, pat in DOMAIN_FLAGS.items()
|
|
410
|
+
if re.search(pat, prompt, re.IGNORECASE)
|
|
411
|
+
]
|
|
412
|
+
word_count = len(prompt.split())
|
|
413
|
+
|
|
414
|
+
record = {
|
|
415
|
+
"ts": datetime.now(timezone.utc).isoformat(),
|
|
416
|
+
"session_id": payload.get("session_id"),
|
|
417
|
+
"cwd": payload.get("cwd"),
|
|
418
|
+
"tier": tier,
|
|
419
|
+
"scores": scores,
|
|
420
|
+
"triggered": [{"t": t["tier"], "w": t["weight"], "s": t["span"], "n": t["neg"]} for t in triggered],
|
|
421
|
+
"word_count": word_count,
|
|
422
|
+
"domain_flags": flags,
|
|
423
|
+
"prompt_head": prompt[:160],
|
|
424
|
+
}
|
|
425
|
+
emit_log(record)
|
|
426
|
+
|
|
427
|
+
body = TIER_REMINDERS[tier]
|
|
428
|
+
score_str = f"cheap={scores['cheap']},main={scores['main']},hard={scores['hard']}"
|
|
429
|
+
header = (
|
|
430
|
+
f"[model-router] tier={tier} scores=({score_str}) "
|
|
431
|
+
f"words={word_count} domains={flags or 'none'}"
|
|
432
|
+
)
|
|
433
|
+
|
|
434
|
+
output = {
|
|
435
|
+
"hookSpecificOutput": {
|
|
436
|
+
"hookEventName": "UserPromptSubmit",
|
|
437
|
+
"additionalContext": f"{header}\n\n{body}",
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
sys.stdout.write(json.dumps(output))
|
|
441
|
+
return 0
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
if __name__ == "__main__":
|
|
445
|
+
sys.exit(main())
|
|
@@ -118,7 +118,7 @@ spec:
|
|
|
118
118
|
# k3d), started by `olam upgrade` Step 0.7 — not inside this Pod.
|
|
119
119
|
containers:
|
|
120
120
|
- name: olam-host-cp
|
|
121
|
-
image: ghcr.io/pleri/olam-host-cp@sha256:
|
|
121
|
+
image: ghcr.io/pleri/olam-host-cp@sha256:3c601e4ea81d49e0c494c132dbf34aeffffedf37f9f09d4877b0d3139341bc50
|
|
122
122
|
imagePullPolicy: IfNotPresent
|
|
123
123
|
securityContext:
|
|
124
124
|
runAsNonRoot: true
|
|
@@ -70,7 +70,7 @@ spec:
|
|
|
70
70
|
mountPath: /data
|
|
71
71
|
containers:
|
|
72
72
|
- name: olam-auth-service
|
|
73
|
-
image: ghcr.io/pleri/olam-auth@sha256:
|
|
73
|
+
image: ghcr.io/pleri/olam-auth@sha256:3f46d206ae15e4cdad15adeaf2e0f0da8367a3292f3c9e80f7e1a12b4d73580b
|
|
74
74
|
imagePullPolicy: IfNotPresent
|
|
75
75
|
securityContext:
|
|
76
76
|
runAsNonRoot: true
|
|
@@ -61,7 +61,7 @@ spec:
|
|
|
61
61
|
mountPath: /data
|
|
62
62
|
containers:
|
|
63
63
|
- name: olam-kg-service
|
|
64
|
-
image: ghcr.io/pleri/olam-kg-service@sha256:
|
|
64
|
+
image: ghcr.io/pleri/olam-kg-service@sha256:47f6a594ef402b92032560afd8e6ed4758223d8c8d09f24ede8eff436dc3a31a
|
|
65
65
|
imagePullPolicy: IfNotPresent
|
|
66
66
|
securityContext:
|
|
67
67
|
runAsNonRoot: true
|
|
@@ -68,7 +68,7 @@ spec:
|
|
|
68
68
|
mountPath: /data
|
|
69
69
|
containers:
|
|
70
70
|
- name: olam-mcp-auth-service
|
|
71
|
-
image: ghcr.io/pleri/olam-mcp-auth@sha256:
|
|
71
|
+
image: ghcr.io/pleri/olam-mcp-auth@sha256:a97684d8d69922d4ce35af45700e15973a7463f088516a4383b6b6022bc37a16
|
|
72
72
|
imagePullPolicy: IfNotPresent
|
|
73
73
|
securityContext:
|
|
74
74
|
runAsNonRoot: true
|
|
@@ -70,7 +70,7 @@ spec:
|
|
|
70
70
|
# bootstrap-placeholder comment + run `npm run refresh:manifest-digests`
|
|
71
71
|
# once ghcr.io/pleri/olam-memory-service has a real published digest.
|
|
72
72
|
# bootstrap-placeholder: pre-publish; refresh after first release
|
|
73
|
-
image: ghcr.io/pleri/olam-memory-service@sha256:
|
|
73
|
+
image: ghcr.io/pleri/olam-memory-service@sha256:6bfa2209ff735728457e155031c526008acd53276f2026ffa95905a301e414bb
|
|
74
74
|
imagePullPolicy: IfNotPresent
|
|
75
75
|
securityContext:
|
|
76
76
|
runAsNonRoot: true
|
package/package.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* olam skills 10x — sub-namespace for managing the /10x: planning chain
|
|
3
|
-
* skills + beads (bd) integration.
|
|
4
|
-
*
|
|
5
|
-
* olam skills 10x install [--no-beads] Sync chain skills via existing
|
|
6
|
-
* syncSkills() machinery + auto-
|
|
7
|
-
* bootstrap beads.
|
|
8
|
-
* olam skills 10x uninstall Remove /10x: chain skill symlinks.
|
|
9
|
-
* olam skills 10x doctor Health probe: chain skill presence
|
|
10
|
-
* + beads CLI + beads project init +
|
|
11
|
-
* beads Claude hooks.
|
|
12
|
-
* olam skills 10x version Show olam-cli version + registered
|
|
13
|
-
* skill source identities.
|
|
14
|
-
*
|
|
15
|
-
* Per Pass 3.1 scope-reduction (olam-harness-flywheel.md): this is a thin
|
|
16
|
-
* wrapper over the existing `olam skills` surface (skills.ts, skills-hook.ts,
|
|
17
|
-
* skills-doctor.ts). The 10x sub-namespace gives /10x: chain skills their own
|
|
18
|
-
* verb without colliding with `olam install` (which provisions worlds, not
|
|
19
|
-
* skills).
|
|
20
|
-
*/
|
|
21
|
-
import type { Command } from 'commander';
|
|
22
|
-
export declare function registerSkills10x(program: Command): void;
|
|
23
|
-
//# sourceMappingURL=skills-10x.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-10x.d.ts","sourceRoot":"","sources":["../../src/commands/skills-10x.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4KzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsLxD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-10x.js","sourceRoot":"","sources":["../../src/commands/skills-10x.ts"],"names":[],"mappings":"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"}
|