@oxy-hq/cli 0.7.0 → 0.9.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 (38) hide show
  1. package/README.md +131 -8
  2. package/dist/main.mjs +4909 -3551
  3. package/dist/main.mjs.map +1 -1
  4. package/dist/{mcp-xxWL3_dz.mjs → mcp-Bdp0rX0l.mjs} +2 -2
  5. package/dist/{mcp-xxWL3_dz.mjs.map → mcp-Bdp0rX0l.mjs.map} +1 -1
  6. package/package.json +5 -5
  7. package/skills/oxy-agents/SKILL.md +318 -0
  8. package/skills/oxy-agents/references/quick-reference.md +222 -0
  9. package/skills/oxy-agents/templates/agentic-template.yml +141 -0
  10. package/skills/oxy-airway-pipelines/SKILL.md +223 -316
  11. package/skills/oxy-automations/SKILL.md +61 -15
  12. package/skills/oxy-cli/SKILL.md +37 -4
  13. package/skills/oxy-custom-apps/SKILL.md +193 -291
  14. package/skills/oxy-custom-apps/references/minimal-starter.md +63 -0
  15. package/skills/oxy-custom-apps/references/performance-and-usage.md +105 -0
  16. package/skills/oxy-custom-apps/references/reading-data.md +106 -0
  17. package/skills/oxy-custom-apps/references/sandbox-agent-loop.md +267 -0
  18. package/skills/oxy-custom-apps/references/verifying-in-the-browser.md +65 -0
  19. package/skills/oxy-data-apps/SKILL.md +362 -0
  20. package/skills/oxy-data-apps/references/examples.md +263 -0
  21. package/skills/oxy-data-apps/references/quick-reference.md +171 -0
  22. package/skills/oxy-data-apps/templates/dashboard-with-controls.app.yml +128 -0
  23. package/skills/oxy-data-apps/templates/simple-dashboard.app.yml +102 -0
  24. package/skills/oxy-data-architecture/SKILL.md +137 -152
  25. package/skills/oxy-evals/SKILL.md +362 -0
  26. package/skills/oxy-evals/references/diagnosis.md +243 -0
  27. package/skills/oxy-evals/references/results-json.md +145 -0
  28. package/skills/oxy-evals/references/writing-expected.md +112 -0
  29. package/skills/oxy-semantic-modeling/SKILL.md +239 -59
  30. package/skills/oxy-semantic-modeling/references/warehouse-casts.md +57 -0
  31. package/skills/oxy-semantic-modeling/templates/topic-template.yml +38 -0
  32. package/skills/oxy-semantic-modeling/templates/view-template.yml +119 -0
  33. package/template/.github/workflows/publish.yaml +15 -13
  34. package/template/.nvmrc +1 -1
  35. package/template/.oxyc-managed +5 -5
  36. package/template/README.md +21 -10
  37. package/template/package.json +3 -2
  38. package/template/pnpm-workspace.yaml +28 -17
@@ -0,0 +1,141 @@
1
+ # Oxy `.agentic.yml` template: an analytics agent over the semantic model.
2
+ #
3
+ # Save as <name>.agentic.yml (not .yaml) anywhere in the workspace, but not
4
+ # under a dot-directory, build/, dist/, target/ or node_modules/, and with no
5
+ # `.test.` in the file name; those paths are not deployed.
6
+ #
7
+ # Check the shape offline: oxyc validate --file <path>
8
+ # First real check is a run: oxy agentic run <path> -q "<question>"
9
+ #
10
+ # Every key is optional. Unknown keys, at any level, are ignored without a
11
+ # warning by the runtime and by both validators, so spell them exactly.
12
+
13
+ # -- Global instructions -----------------------------------------------------
14
+ # Added to the system prompt of every LLM state. Put the persona, business
15
+ # conventions and the views/topics to prefer here; per-state additions go
16
+ # under `states:` and are appended, not substituted.
17
+ instructions: |
18
+ You are a revenue analytics assistant for Acme Corp.
19
+ Report currency in USD and dates as ISO 8601.
20
+ "Customer" means the `customers` view, not `users` (which counts seats).
21
+ Prefer measures from the semantic model over hand-written aggregations.
22
+
23
+ # IANA timezone for "today", "yesterday", "last week". Falls back to the
24
+ # `timezone:` in config.yml, then UTC. An invalid name fails the run.
25
+ timezone: America/New_York
26
+
27
+ # -- Connections ---------------------------------------------------------------
28
+ # Names from config.yml `databases:`. The agent can query these PLUS every
29
+ # database its context files reference (a view's `datasource`, a verified
30
+ # query's `database:`, an automation task's `database:`). There is no fallback
31
+ # to every database in config.yml: with none at all the run fails with
32
+ # "no databases configured".
33
+ databases:
34
+ - warehouse
35
+
36
+ # -- Context -------------------------------------------------------------------
37
+ # Globs relative to THIS file's directory, bucketed by file name:
38
+ # *.view.yml, *.topic.yml semantic catalog
39
+ # *.sql with a /* oxy: ... */ header verified query: found by the
40
+ # search_automations tool, run verbatim
41
+ # *.sql without that header SQL style examples for `solving`
42
+ # *.md notes for `clarifying`/`interpreting`
43
+ # *.automation.yml, *.procedure.yml automations the agent may pick and run
44
+ # Anything else is ignored.
45
+ context:
46
+ - ./semantics/**/*.view.yml
47
+ - ./semantics/**/*.topic.yml
48
+ - ./verified_queries/*.sql
49
+ - ./docs/glossary.md
50
+ - ./automations/*.automation.yml
51
+
52
+ # -- Model ---------------------------------------------------------------------
53
+ # `ref` must equal a `name:` under config.yml `models:`; vendor, API key (a
54
+ # workspace secret in the cloud) and base URL come from that entry. With
55
+ # neither `ref` nor `model`, the first model in config.yml is used.
56
+ # `model` fields here and under `states:` are provider model IDs, not
57
+ # config.yml names.
58
+ llm:
59
+ ref: claude
60
+ # Leave max_tokens unset unless you need a hard cap: unset, it is sized from
61
+ # the thinking setting. A value you set is used as-is.
62
+ # max_tokens: 8192
63
+ #
64
+ # Replaces the model AND the thinking setting in every state while the user
65
+ # has "extended thinking" switched on. Without this block the toggle does
66
+ # nothing.
67
+ extended_thinking:
68
+ model: claude-opus-4-8
69
+ thinking:
70
+ effort: high
71
+
72
+ # -- Thinking --------------------------------------------------------------------
73
+ # A global value REPLACES every state's built-in default (solving: adaptive,
74
+ # all others: disabled), so prefer setting it per state below.
75
+ # Forms: adaptive | disabled | effort:<level> | {effort: <level>} |
76
+ # {budget_tokens: N} (Claude 4.6 and earlier; converted on newer models)
77
+ # Levels: low | medium | high | xhigh | max. Never `false`.
78
+ # thinking: adaptive
79
+
80
+ # -- Per-state overrides ---------------------------------------------------------
81
+ # Honoured keys: clarifying, specifying, solving, interpreting. (`executing`
82
+ # has no LLM; any other key is ignored silently.)
83
+ # Fields: instructions, thinking, model (same provider as `llm:`), and
84
+ # max_retries = tool-call rounds per visit before the run pauses to ask the
85
+ # user whether to continue (clarifying has a fixed limit and ignores it).
86
+ states:
87
+ clarifying:
88
+ instructions: |
89
+ "Last quarter" means the most recent completed fiscal quarter.
90
+ "MRR" is the `monthly_recurring_revenue` measure on the `revenue` view.
91
+ model: claude-haiku-4-5
92
+ specifying:
93
+ max_retries: 8
94
+ solving:
95
+ # Runs only when the semantic model could not compile the question, so
96
+ # never put guidance every answer needs here.
97
+ instructions: Prefer CTEs over subqueries; alias every aggregate.
98
+ thinking:
99
+ effort: high
100
+ max_retries: 4
101
+ interpreting:
102
+ thinking: disabled
103
+
104
+ # -- Result checks (optional) ----------------------------------------------------
105
+ # Omit the whole section to run the 15 default checks with default thresholds.
106
+ # When present it REPLACES that set: only the rules listed here (and not
107
+ # `enabled: false`) run, and a stage with no list is not checked at all.
108
+ # This is the full default set with two thresholds tuned.
109
+ validation:
110
+ rules:
111
+ specified:
112
+ - name: metric_resolves
113
+ - name: join_key_exists
114
+ - name: filter_unambiguous
115
+ solvable:
116
+ - name: sql_syntax
117
+ - name: tables_exist_in_catalog
118
+ - name: spec_tables_present
119
+ - name: column_refs_valid
120
+ - name: timeseries_order_by_check
121
+ solved:
122
+ - name: non_empty
123
+ - name: truncation_warning
124
+ - name: no_nan_inf
125
+ - name: outlier_detection
126
+ threshold_sigma: 4.0
127
+ min_rows: 6
128
+ - name: null_ratio_check
129
+ threshold: 0.3
130
+ - name: duplicate_row_check
131
+ - name: freshness_check
132
+
133
+ # -- External semantic engine (optional) -----------------------------------------
134
+ # Routes queries through Cube or Looker before Oxy's own semantic model. The
135
+ # engine is pinged when a run starts; unreachable fails the run. ${VAR} is read
136
+ # from the server's environment and a missing variable fails the run.
137
+ #
138
+ # semantic_engine:
139
+ # vendor: cube # cube | looker
140
+ # base_url: https://cube.example.com
141
+ # api_token: "${CUBE_API_TOKEN}" # Looker: client_id + client_secret instead