omp-llm-role 1.0.0 → 1.2.0

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.
Files changed (50) hide show
  1. package/README.md +202 -12
  2. package/agents/designer.md +4 -3
  3. package/docs/dev/README.md +44 -7
  4. package/docs/dev/agent-authoring.md +59 -1
  5. package/docs/dev/architecture.md +106 -28
  6. package/docs/dev/ci.md +163 -0
  7. package/docs/dev/current-state.md +364 -24
  8. package/docs/dev/data-sources.md +231 -38
  9. package/docs/dev/explorer.md +175 -46
  10. package/docs/dev/quirks.md +77 -4
  11. package/docs/dev/releasing.md +130 -17
  12. package/docs/dev/scoring.md +851 -27
  13. package/docs/dev/testing.md +253 -0
  14. package/docs/dev/writes-and-state.md +232 -28
  15. package/docs/llm-role-rankings.md +149 -148
  16. package/package.json +814 -80
  17. package/skills/omp-llm-role-create-agent/SKILL.md +7 -1
  18. package/src/agent-architect.ts +148 -19
  19. package/src/agent-create.ts +800 -40
  20. package/src/agent-file.ts +2 -5
  21. package/src/architect-provenance.ts +16 -0
  22. package/src/availability.ts +191 -15
  23. package/src/benchmark-author.ts +9 -4
  24. package/src/benchmark-sources.ts +283 -18
  25. package/src/cli/create-role.ts +29 -1
  26. package/src/cli/llm-role-rank.ts +40 -1
  27. package/src/config-edit.ts +207 -80
  28. package/src/engine.ts +519 -75
  29. package/src/error-report.ts +562 -0
  30. package/src/explorer/boot.ts +36 -24
  31. package/src/explorer/explain.ts +128 -13
  32. package/src/explorer/scopes.ts +110 -0
  33. package/src/explorer/server.ts +126 -33
  34. package/src/extension.ts +464 -48
  35. package/src/features.ts +105 -0
  36. package/src/project-registry.ts +65 -0
  37. package/src/project-setup.ts +382 -0
  38. package/src/prompts/agent-creation-architect.md +2 -0
  39. package/src/prompts/project-profile-architect.md +33 -0
  40. package/src/prompts/project-profile-user.md +8 -0
  41. package/src/provider-display.ts +67 -0
  42. package/src/role-archetypes.ts +12 -2
  43. package/src/role-settings.ts +22 -0
  44. package/src/settings.ts +211 -24
  45. package/src/state.ts +1 -1
  46. package/src/updater.ts +234 -37
  47. package/web/app.js +434 -12
  48. package/web/index.html +1 -0
  49. package/web/style.css +44 -1
  50. package/docs/dev/spec.md +0 -633
package/web/style.css CHANGED
@@ -38,6 +38,7 @@ body {
38
38
  #meta .brand { font-weight: 600; color: var(--accent); }
39
39
  #meta .sep { color: var(--line); }
40
40
  #meta .lock { color: var(--muted); font-family: var(--mono); font-size: 11px; }
41
+ #meta #scope { max-width: 340px; }
41
42
  #meta button { margin-left: auto; }
42
43
 
43
44
  #roles {
@@ -159,6 +160,13 @@ table { border-collapse: collapse; width: 100%; }
159
160
  #table td.num, #table th.num { text-align: right; font-family: var(--mono); font-variant-numeric: tabular-nums; }
160
161
  #table td.model { max-width: 320px; overflow: hidden; text-overflow: ellipsis; }
161
162
  #table td.org { color: var(--muted); }
163
+ #table td.key { text-align: center; }
164
+ /* Key-usability badge: three states, reusing the :root hues (up/down/muted). */
165
+ .badge { display: inline-block; padding: 0 6px; border-radius: 999px; border: 1px solid var(--line); font-family: var(--mono); font-size: 11px; line-height: 16px; }
166
+ .badge.usable { color: var(--up); border-color: var(--up); }
167
+ .badge.blocked { color: var(--down); border-color: var(--down); }
168
+ .badge.unknown { color: var(--muted); border-color: var(--line); }
169
+ .key-line { color: var(--muted); }
162
170
  #table td.star { color: var(--warn); text-align: center; }
163
171
  #table td.delta { font-family: var(--mono); text-align: right; }
164
172
  #table td.delta.up { color: var(--up); }
@@ -181,6 +189,19 @@ table.comp th { text-align: left; color: var(--muted); font-weight: 500; font-si
181
189
  table.comp td.num, table.comp th.num { text-align: right; font-family: var(--mono); font-variant-numeric: tabular-nums; }
182
190
  table.comp tr.missing-row td { color: var(--muted); }
183
191
  table.comp tr.note-row td { border-bottom: none; font-size: 11px; padding-top: 0; }
192
+
193
+ /* Focus-metric audit: one row per weighted benchmark/percentile metric, four
194
+ signal cells. ok = up, below-bar = warn + glyph, unknown = muted (never ok). */
195
+ table.focus { width: 100%; border-collapse: collapse; }
196
+ table.focus th, table.focus td { padding: 3px 6px; border-bottom: 1px solid var(--line); }
197
+ table.focus th { text-align: left; color: var(--muted); font-weight: 500; font-size: 11px; }
198
+ table.focus td { font-family: var(--mono); font-size: 12px; }
199
+ table.focus td:first-child { font-family: inherit; color: var(--muted); }
200
+ table.focus tr.warned td:first-child { color: var(--fg); }
201
+ .sig.ok { color: var(--up); }
202
+ .sig.below-bar { color: var(--warn); }
203
+ .sig.below-bar::before { content: "⚠ "; }
204
+ .sig.unknown { color: var(--muted); }
184
205
  .barcell { width: 90px; }
185
206
  .bar { background: var(--panel-2); border-radius: 3px; height: 8px; overflow: hidden; }
186
207
  .bar .fill { background: var(--accent); height: 100%; }
@@ -204,6 +225,28 @@ button.x { padding: 1px 7px; color: var(--down); }
204
225
  .checks { display: flex; flex-wrap: wrap; gap: 4px 12px; }
205
226
  .check { display: flex; gap: 5px; align-items: center; color: var(--muted); font-size: 12px; }
206
227
 
228
+ /* Capability flags (issue #40): one tri-state control per capability, the
229
+ recommended bundle, and the knobs it fills. A knob whose value is DERIVED
230
+ from an enabled capability gets a dashed accent border + a "derived" badge;
231
+ an authored (explicit) value gets a solid line + an "authored" badge. */
232
+ .features { display: flex; flex-direction: column; gap: 8px; }
233
+ .feature { border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px; }
234
+ .feature.on { border-color: var(--accent); }
235
+ .feature-head { display: flex; gap: 8px; align-items: center; }
236
+ .feature-state { flex: 0 0 auto; }
237
+ .feature-label { color: var(--fg); }
238
+ .feature-origin { margin-left: auto; font-size: 11px; }
239
+ .feature-bundle { font-family: var(--mono); font-size: 11px; margin-top: 2px; }
240
+ .feature-knobs { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 4px; }
241
+ .knob { display: flex; gap: 5px; align-items: center; font-family: var(--mono); font-size: 11px; }
242
+ .knob-input { width: 84px; }
243
+ .knob-name { color: var(--muted); }
244
+ .knob.derived .knob-input { border-style: dashed; border-color: var(--accent); }
245
+ .knob-badge { padding: 0 5px; border-radius: 999px; border: 1px solid var(--line); font-size: 10px; line-height: 15px; }
246
+ .knob-badge.derived { color: var(--accent); border-color: var(--accent); }
247
+ .knob-badge.authored { color: var(--up); border-color: var(--up); }
248
+ .knob-badge.none { color: var(--muted); }
249
+
207
250
  #export-bar {
208
251
  display: flex;
209
252
  gap: 8px;
@@ -235,7 +278,7 @@ button.x { padding: 1px 7px; color: var(--down); }
235
278
  /* elements that carry an explanation read as hoverable without being links */
236
279
  [data-tip] { cursor: help; }
237
280
  button[data-tip], select[data-tip], input[data-tip] { cursor: pointer; }
238
- #table thead th[data-tip], .tab[data-tip], table.comp th[data-tip], table.weights td[data-tip] { text-decoration: underline dotted var(--line); text-underline-offset: 3px; }
281
+ #table thead th[data-tip], .tab[data-tip], table.comp th[data-tip], table.focus th[data-tip], table.weights td[data-tip] { text-decoration: underline dotted var(--line); text-underline-offset: 3px; }
239
282
 
240
283
  @media (max-width: 1100px) {
241
284
  main { grid-template-columns: 1fr; }