@wrenai/genbi 0.0.4 → 0.0.5
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 +64 -2
- package/dist/assets/{echarts-LTFC-ysd.js → echarts-DYM4hjvk.js} +2 -2
- package/dist/assets/index-A_Wrq7Ey.css +1 -0
- package/dist/assets/{index-Bo--QMUN.js → index-DsH129tV.js} +18 -17
- package/dist/index.html +2 -2
- package/dist-server/harness/bundle/schema.d.ts +38 -0
- package/dist-server/harness/bundle/schema.js +18 -10
- package/dist-server/harness/bundle/version.js +1 -1
- package/dist-server/harness/cli-args.d.ts +10 -2
- package/dist-server/harness/cli-args.js +24 -8
- package/dist-server/harness/cli.js +75 -9
- package/dist-server/harness/compile/cache.js +4 -4
- package/dist-server/harness/compile/compose-profile.d.ts +51 -14
- package/dist-server/harness/compile/compose-profile.js +85 -19
- package/dist-server/harness/compile/context-loader.d.ts +56 -0
- package/dist-server/harness/compile/context-loader.js +237 -0
- package/dist-server/harness/compile/errors.d.ts +19 -0
- package/dist-server/harness/compile/errors.js +35 -0
- package/dist-server/harness/compile/index.d.ts +4 -3
- package/dist-server/harness/compile/index.js +4 -3
- package/dist-server/harness/compile/pipeline.d.ts +15 -7
- package/dist-server/harness/compile/pipeline.js +62 -14
- package/dist-server/harness/compile/resolve-binary.d.ts +2 -2
- package/dist-server/harness/compile/resolve-binary.js +3 -3
- package/dist-server/harness/compile/types.d.ts +29 -0
- package/dist-server/harness/compile/warble-identity.d.ts +11 -0
- package/dist-server/harness/compile/warble-identity.js +13 -0
- package/dist-server/harness/components/ai-step.d.ts +4 -0
- package/dist-server/harness/components/ai-step.js +40 -0
- package/dist-server/harness/components/broker.d.ts +60 -0
- package/dist-server/harness/components/broker.js +117 -0
- package/dist-server/harness/components/capability-card.d.ts +98 -0
- package/dist-server/harness/components/capability-card.js +169 -0
- package/dist-server/harness/components/context.d.ts +2 -0
- package/dist-server/harness/components/context.js +30 -0
- package/dist-server/harness/components/display.d.ts +6 -0
- package/dist-server/harness/components/display.js +29 -0
- package/dist-server/harness/components/egress-judge.d.ts +12 -0
- package/dist-server/harness/components/egress-judge.js +27 -0
- package/dist-server/harness/components/egress.d.ts +142 -0
- package/dist-server/harness/components/egress.js +469 -0
- package/dist-server/harness/components/in-process.d.ts +7 -0
- package/dist-server/harness/components/in-process.js +245 -0
- package/dist-server/harness/components/normalize.d.ts +35 -0
- package/dist-server/harness/components/normalize.js +245 -0
- package/dist-server/harness/components/plan.d.ts +31 -0
- package/dist-server/harness/components/plan.js +184 -0
- package/dist-server/harness/components/report.d.ts +207 -0
- package/dist-server/harness/components/report.js +309 -0
- package/dist-server/harness/components/runner.d.ts +193 -0
- package/dist-server/harness/components/runner.js +492 -0
- package/dist-server/harness/components/semantic-guards.d.ts +20 -0
- package/dist-server/harness/components/semantic-guards.js +42 -0
- package/dist-server/harness/components/terminal-json.d.ts +18 -0
- package/dist-server/harness/components/terminal-json.js +82 -0
- package/dist-server/harness/components/usage.d.ts +14 -0
- package/dist-server/harness/components/usage.js +19 -0
- package/dist-server/harness/components/wren-access.d.ts +29 -0
- package/dist-server/harness/components/wren-access.js +233 -0
- package/dist-server/harness/components/zone-dry-run.d.ts +43 -0
- package/dist-server/harness/components/zone-dry-run.js +107 -0
- package/dist-server/harness/components/zone-gate.d.ts +76 -0
- package/dist-server/harness/components/zone-gate.js +144 -0
- package/dist-server/harness/events/index.d.ts +1 -1
- package/dist-server/harness/events/types.d.ts +52 -0
- package/dist-server/harness/index.d.ts +9 -2
- package/dist-server/harness/index.js +5 -1
- package/dist-server/harness/loop/executor.d.ts +1 -0
- package/dist-server/harness/loop/executor.js +37 -15
- package/dist-server/harness/npm-package-resolve.d.ts +2 -0
- package/dist-server/harness/npm-package-resolve.js +16 -4
- package/dist-server/harness/providers/adapters/openai-compatible.d.ts +13 -0
- package/dist-server/harness/providers/adapters/openai-compatible.js +17 -0
- package/dist-server/harness/providers/adapters/openai.d.ts +7 -0
- package/dist-server/harness/providers/adapters/openai.js +6 -0
- package/dist-server/harness/providers/adapters/pi-ai.d.ts +48 -0
- package/dist-server/harness/providers/adapters/pi-ai.js +518 -0
- package/dist-server/harness/providers/binding.d.ts +45 -4
- package/dist-server/harness/providers/binding.js +44 -8
- package/dist-server/harness/providers/index.d.ts +9 -3
- package/dist-server/harness/providers/index.js +10 -3
- package/dist-server/harness/providers/zone.d.ts +96 -0
- package/dist-server/harness/providers/zone.js +112 -0
- package/dist-server/harness/render/answering-query.d.ts +29 -0
- package/dist-server/harness/render/answering-query.js +62 -0
- package/dist-server/harness/render/envelope.d.ts +6 -0
- package/dist-server/harness/render/envelope.js +10 -3
- package/dist-server/harness/route/adapter-spec.d.ts +8 -9
- package/dist-server/harness/route/adapter-spec.js +13 -14
- package/dist-server/harness/route/codex-ask-events.js +2 -1
- package/dist-server/harness/route/codex-ask.d.ts +4 -0
- package/dist-server/harness/route/codex-ask.js +69 -30
- package/dist-server/harness/route/codex-host-query.d.ts +52 -0
- package/dist-server/harness/route/codex-host-query.js +191 -0
- package/dist-server/harness/route/codex-local-manifest.d.ts +9 -1
- package/dist-server/harness/route/codex-local-manifest.js +96 -15
- package/dist-server/harness/route/codex-wren-proxy.d.ts +33 -0
- package/dist-server/harness/route/codex-wren-proxy.js +227 -0
- package/dist-server/harness/route/describe.js +45 -6
- package/dist-server/harness/route/in-process.d.ts +22 -1
- package/dist-server/harness/route/in-process.js +54 -4
- package/dist-server/harness/route/route.js +5 -2
- package/dist-server/harness/route/types.d.ts +30 -1
- package/dist-server/harness/session/run.js +30 -10
- package/dist-server/harness/setup/runner.d.ts +2 -0
- package/dist-server/harness/setup/runner.js +38 -17
- package/dist-server/harness/setup/yaml-scalar.d.ts +23 -0
- package/dist-server/harness/setup/yaml-scalar.js +62 -0
- package/dist-server/server/adopt.js +1 -17
- package/dist-server/server/app.d.ts +1 -0
- package/dist-server/server/app.js +163 -14
- package/dist-server/server/auth-choice.d.ts +13 -1
- package/dist-server/server/auth-choice.js +66 -1
- package/dist-server/server/bin.js +177 -25
- package/dist-server/server/codex-local-grounding.d.ts +18 -0
- package/dist-server/server/codex-local-grounding.js +92 -0
- package/dist-server/server/codex-native-session.d.ts +25 -0
- package/dist-server/server/codex-native-session.js +1 -0
- package/dist-server/server/codex-runtime-composition.d.ts +34 -0
- package/dist-server/server/codex-runtime-composition.js +250 -0
- package/dist-server/server/codex-structured-ask.d.ts +23 -0
- package/dist-server/server/codex-structured-ask.js +102 -0
- package/dist-server/server/conn-config.js +4 -16
- package/dist-server/server/conversation-socket.d.ts +16 -0
- package/dist-server/server/conversation-socket.js +65 -0
- package/dist-server/server/db.d.ts +46 -0
- package/dist-server/server/db.js +88 -9
- package/dist-server/server/env-detect.d.ts +6 -0
- package/dist-server/server/env-detect.js +7 -0
- package/dist-server/server/fold.d.ts +22 -4
- package/dist-server/server/fold.js +37 -5
- package/dist-server/server/harness.d.ts +2 -2
- package/dist-server/server/harness.js +33 -7
- package/dist-server/server/interactive-terminal.d.ts +10 -6
- package/dist-server/server/interactive-terminal.js +33 -8
- package/dist-server/server/managed-wren-runtime.d.ts +116 -0
- package/dist-server/server/managed-wren-runtime.js +670 -0
- package/dist-server/server/native-artifacts.d.ts +23 -7
- package/dist-server/server/native-artifacts.js +43 -12
- package/dist-server/server/native-component-context.d.ts +19 -0
- package/dist-server/server/native-component-context.js +76 -0
- package/dist-server/server/native-component-preparation.d.ts +20 -0
- package/dist-server/server/native-component-preparation.js +129 -0
- package/dist-server/server/native-component-runtime.d.ts +36 -0
- package/dist-server/server/native-component-runtime.js +92 -0
- package/dist-server/server/native-components.d.ts +84 -0
- package/dist-server/server/native-components.js +160 -0
- package/dist-server/server/native-dispatch-process.d.ts +8 -0
- package/dist-server/server/native-dispatch-process.js +65 -0
- package/dist-server/server/native-runtime-spec.d.ts +89 -0
- package/dist-server/server/native-runtime-spec.js +169 -0
- package/dist-server/server/native-sessions.d.ts +172 -19
- package/dist-server/server/native-sessions.js +839 -244
- package/dist-server/server/native-shutdown.d.ts +6 -0
- package/dist-server/server/native-shutdown.js +28 -0
- package/dist-server/server/native-wren-home.d.ts +18 -0
- package/dist-server/server/native-wren-home.js +262 -0
- package/dist-server/server/node-pty-host.d.ts +2 -1
- package/dist-server/server/node-pty-host.js +3 -2
- package/dist-server/server/profile-registry.d.ts +139 -0
- package/dist-server/server/profile-registry.js +620 -0
- package/dist-server/server/runtime-binding.d.ts +4 -1
- package/dist-server/server/runtime-binding.js +50 -2
- package/dist-server/server/runtime-host/claude-component-step.d.ts +25 -0
- package/dist-server/server/runtime-host/claude-component-step.js +186 -0
- package/dist-server/server/runtime-host/codex-app-server.d.ts +75 -0
- package/dist-server/server/runtime-host/codex-app-server.js +239 -0
- package/dist-server/server/runtime-host/codex-compatibility.d.ts +110 -0
- package/dist-server/server/runtime-host/codex-compatibility.js +162 -0
- package/dist-server/server/runtime-host/codex-component-step.d.ts +19 -0
- package/dist-server/server/runtime-host/codex-component-step.js +308 -0
- package/dist-server/server/runtime-host/codex-conversation.d.ts +109 -0
- package/dist-server/server/runtime-host/codex-conversation.js +295 -0
- package/dist-server/server/runtime-host/codex-direct-tools.d.ts +23 -0
- package/dist-server/server/runtime-host/codex-direct-tools.js +59 -0
- package/dist-server/server/runtime-host/codex-events.d.ts +647 -0
- package/dist-server/server/runtime-host/codex-events.js +66 -0
- package/dist-server/server/runtime-host/codex-policy.d.ts +16 -0
- package/dist-server/server/runtime-host/codex-policy.js +151 -0
- package/dist-server/server/runtime-host/codex-process.d.ts +8 -0
- package/dist-server/server/runtime-host/codex-process.js +96 -0
- package/dist-server/server/runtime-host/codex-rpc.d.ts +47 -0
- package/dist-server/server/runtime-host/codex-rpc.js +182 -0
- package/dist-server/server/runtime-host/codex-session.d.ts +74 -0
- package/dist-server/server/runtime-host/codex-session.js +492 -0
- package/dist-server/server/runtime-host/codex-terminal-protocol.d.ts +35 -0
- package/dist-server/server/runtime-host/codex-terminal-protocol.js +243 -0
- package/dist-server/server/runtime-host/codex-terminal.d.ts +16 -0
- package/dist-server/server/runtime-host/codex-terminal.js +120 -0
- package/dist-server/server/runtime-host/index.d.ts +5 -0
- package/dist-server/server/runtime-host/index.js +3 -0
- package/dist-server/server/runtime-host/local.d.ts +29 -0
- package/dist-server/server/runtime-host/local.js +90 -0
- package/dist-server/server/runtime-host/policy.d.ts +8 -0
- package/dist-server/server/runtime-host/policy.js +78 -0
- package/dist-server/server/runtime-host/types.d.ts +52 -0
- package/dist-server/server/runtime-host/types.js +62 -0
- package/dist-server/server/structured-query-evidence.d.ts +7 -0
- package/dist-server/server/structured-query-evidence.js +47 -0
- package/dist-server/server/structured-runtime.d.ts +52 -0
- package/dist-server/server/structured-runtime.js +130 -0
- package/dist-server/server/structured-scope.d.ts +4 -0
- package/dist-server/server/structured-scope.js +12 -0
- package/dist-server/server/turn.d.ts +6 -1
- package/dist-server/server/turn.js +82 -25
- package/dist-server/server/wire-types.d.ts +67 -3
- package/dist-server/server/wren-profiles.js +1 -1
- package/managed-wren/README.md +60 -0
- package/managed-wren/dependency-wheels.json +282 -0
- package/managed-wren/manifest.json +373 -0
- package/managed-wren/release-inputs.json +45 -0
- package/managed-wren/runtime-tree.cjs +115 -0
- package/managed-wren/source-inputs.json +40 -0
- package/package.json +15 -6
- package/profiles/genbi-default/context/binding.yml +17 -7
- package/profiles/genbi-default/context/context.json +146 -0
- package/profiles/genbi-default/ir.golden.json +39 -43
- package/profiles/genbi-default/profile.yml +31 -0
- package/profiles/genbi-enrich-context/context/binding.yml +14 -3
- package/profiles/genbi-enrich-context/context/context.json +146 -0
- package/profiles/genbi-enrich-context/ir.golden.json +4 -5
- package/profiles/genbi-monitor/context/binding.yml +13 -5
- package/profiles/genbi-monitor/context/context.json +146 -0
- package/profiles/genbi-monitor/ir.golden.json +13 -7
- package/profiles/genbi-report/context/binding.yml +19 -0
- package/profiles/genbi-report/context/context.json +223 -0
- package/profiles/genbi-report/ir.golden.json +328 -0
- package/profiles/genbi-report/profile.yml +38 -0
- package/profiles/genbi-setup/ir.golden.json +3 -1
- package/dist/assets/index-Xs4q7pNo.css +0 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"context_version": 2,
|
|
3
|
+
"parseable": true,
|
|
4
|
+
"metrics": [
|
|
5
|
+
{
|
|
6
|
+
"name": "total_revenue",
|
|
7
|
+
"owner": "order_metrics",
|
|
8
|
+
"declared": true,
|
|
9
|
+
"additivity": "additive"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "order_count",
|
|
13
|
+
"owner": "order_metrics",
|
|
14
|
+
"declared": true,
|
|
15
|
+
"additivity": "additive"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "id",
|
|
19
|
+
"owner": "customers",
|
|
20
|
+
"declared": false,
|
|
21
|
+
"additivity": null
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "id",
|
|
25
|
+
"owner": "orders",
|
|
26
|
+
"declared": false,
|
|
27
|
+
"additivity": null
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "customer_id",
|
|
31
|
+
"owner": "orders",
|
|
32
|
+
"declared": false,
|
|
33
|
+
"additivity": null
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "amount",
|
|
37
|
+
"owner": "orders",
|
|
38
|
+
"declared": false,
|
|
39
|
+
"additivity": null
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"dimensions": [
|
|
43
|
+
{
|
|
44
|
+
"name": "customer_id",
|
|
45
|
+
"owner": "order_metrics",
|
|
46
|
+
"is_temporal": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "name",
|
|
50
|
+
"owner": "customers",
|
|
51
|
+
"is_temporal": false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "order_date",
|
|
55
|
+
"owner": "orders",
|
|
56
|
+
"is_temporal": true
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"models": [
|
|
60
|
+
{
|
|
61
|
+
"name": "customers",
|
|
62
|
+
"has_timestamp": false,
|
|
63
|
+
"columns": [
|
|
64
|
+
"id",
|
|
65
|
+
"name"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "orders",
|
|
70
|
+
"has_timestamp": true,
|
|
71
|
+
"columns": [
|
|
72
|
+
"id",
|
|
73
|
+
"customer_id",
|
|
74
|
+
"order_date",
|
|
75
|
+
"amount"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"lineage": {
|
|
80
|
+
"nodes": [
|
|
81
|
+
{
|
|
82
|
+
"id": "model:customers",
|
|
83
|
+
"kind": "model"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "model:orders",
|
|
87
|
+
"kind": "model"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "rel:orders_customer",
|
|
91
|
+
"kind": "relationship"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "cube:order_metrics",
|
|
95
|
+
"kind": "cube"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "metric:order_metrics.total_revenue",
|
|
99
|
+
"kind": "metric"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "metric:order_metrics.order_count",
|
|
103
|
+
"kind": "metric"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "dim:order_metrics.customer_id",
|
|
107
|
+
"kind": "dimension"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "query:total-revenue",
|
|
111
|
+
"kind": "query"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"edges": [
|
|
115
|
+
{
|
|
116
|
+
"from": "model:orders",
|
|
117
|
+
"to": "rel:orders_customer"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"from": "model:customers",
|
|
121
|
+
"to": "rel:orders_customer"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"from": "model:orders",
|
|
125
|
+
"to": "cube:order_metrics"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"from": "cube:order_metrics",
|
|
129
|
+
"to": "metric:order_metrics.total_revenue"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"from": "cube:order_metrics",
|
|
133
|
+
"to": "metric:order_metrics.order_count"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"from": "cube:order_metrics",
|
|
137
|
+
"to": "dim:order_metrics.customer_id"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"from": "model:orders",
|
|
141
|
+
"to": "query:total-revenue"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"lineage_diagnostics": []
|
|
146
|
+
}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"render_blocks": []
|
|
22
22
|
},
|
|
23
|
+
"entrypoint": true,
|
|
23
24
|
"eval": {
|
|
24
25
|
"metrics": [
|
|
25
26
|
"enrichment_gap_coverage"
|
|
@@ -93,6 +94,7 @@
|
|
|
93
94
|
}
|
|
94
95
|
]
|
|
95
96
|
},
|
|
97
|
+
"entrypoint": true,
|
|
96
98
|
"eval": {
|
|
97
99
|
"metrics": [
|
|
98
100
|
"enrichment_proposal_soundness",
|
|
@@ -172,6 +174,7 @@
|
|
|
172
174
|
}
|
|
173
175
|
]
|
|
174
176
|
},
|
|
177
|
+
"entrypoint": true,
|
|
175
178
|
"eval": {
|
|
176
179
|
"metrics": [
|
|
177
180
|
"enrichment_apply_safety",
|
|
@@ -252,10 +255,6 @@
|
|
|
252
255
|
}
|
|
253
256
|
],
|
|
254
257
|
"lineage": {
|
|
255
|
-
"consumers": {
|
|
256
|
-
"dashboards": 0,
|
|
257
|
-
"queries": 1
|
|
258
|
-
},
|
|
259
258
|
"edges": 7,
|
|
260
259
|
"nodes": 8,
|
|
261
260
|
"resolvable": true
|
|
@@ -298,5 +297,5 @@
|
|
|
298
297
|
}
|
|
299
298
|
},
|
|
300
299
|
"profile": "genbi-enrich-context",
|
|
301
|
-
"warble_ir_version": "0.
|
|
300
|
+
"warble_ir_version": "0.9"
|
|
302
301
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
# Coarse context binding: the whole v5-jaffle semantic layer — same shape and same resolution path
|
|
2
|
-
# as genbi-default/context/binding.yml
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
2
|
+
# as genbi-default/context/binding.yml. `kind: prepared` means Warble reads the JSON document
|
|
3
|
+
# `document:` names (produced by WrenAI's own `wren-context-loader` generator) rather than
|
|
4
|
+
# introspecting MDL itself.
|
|
5
|
+
#
|
|
6
|
+
# `project:` is the layer's IDENTITY, never the document's path; `document:` carries the file. Both
|
|
7
|
+
# resolve relative to this Warble project's own root (the profile directory), not relative to this
|
|
8
|
+
# file.
|
|
9
|
+
#
|
|
10
|
+
# The host rewrites this `project:` line to the user's own semantic layer at onboarding time and
|
|
11
|
+
# regenerates `document:`'s file in place; this repo pins v5-jaffle so `genbi-monitor` compiles
|
|
12
|
+
# standalone for CI/dev. See MAINTAINING.md for how to regenerate the committed document.
|
|
13
|
+
kind: prepared
|
|
7
14
|
project: ../../../../examples/v5-jaffle
|
|
15
|
+
document: context/context.json
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"context_version": 2,
|
|
3
|
+
"parseable": true,
|
|
4
|
+
"metrics": [
|
|
5
|
+
{
|
|
6
|
+
"name": "total_revenue",
|
|
7
|
+
"owner": "order_metrics",
|
|
8
|
+
"declared": true,
|
|
9
|
+
"additivity": "additive"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "order_count",
|
|
13
|
+
"owner": "order_metrics",
|
|
14
|
+
"declared": true,
|
|
15
|
+
"additivity": "additive"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "id",
|
|
19
|
+
"owner": "customers",
|
|
20
|
+
"declared": false,
|
|
21
|
+
"additivity": null
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "id",
|
|
25
|
+
"owner": "orders",
|
|
26
|
+
"declared": false,
|
|
27
|
+
"additivity": null
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "customer_id",
|
|
31
|
+
"owner": "orders",
|
|
32
|
+
"declared": false,
|
|
33
|
+
"additivity": null
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "amount",
|
|
37
|
+
"owner": "orders",
|
|
38
|
+
"declared": false,
|
|
39
|
+
"additivity": null
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"dimensions": [
|
|
43
|
+
{
|
|
44
|
+
"name": "customer_id",
|
|
45
|
+
"owner": "order_metrics",
|
|
46
|
+
"is_temporal": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "name",
|
|
50
|
+
"owner": "customers",
|
|
51
|
+
"is_temporal": false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "order_date",
|
|
55
|
+
"owner": "orders",
|
|
56
|
+
"is_temporal": true
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"models": [
|
|
60
|
+
{
|
|
61
|
+
"name": "customers",
|
|
62
|
+
"has_timestamp": false,
|
|
63
|
+
"columns": [
|
|
64
|
+
"id",
|
|
65
|
+
"name"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "orders",
|
|
70
|
+
"has_timestamp": true,
|
|
71
|
+
"columns": [
|
|
72
|
+
"id",
|
|
73
|
+
"customer_id",
|
|
74
|
+
"order_date",
|
|
75
|
+
"amount"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"lineage": {
|
|
80
|
+
"nodes": [
|
|
81
|
+
{
|
|
82
|
+
"id": "model:customers",
|
|
83
|
+
"kind": "model"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "model:orders",
|
|
87
|
+
"kind": "model"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "rel:orders_customer",
|
|
91
|
+
"kind": "relationship"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "cube:order_metrics",
|
|
95
|
+
"kind": "cube"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "metric:order_metrics.total_revenue",
|
|
99
|
+
"kind": "metric"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "metric:order_metrics.order_count",
|
|
103
|
+
"kind": "metric"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "dim:order_metrics.customer_id",
|
|
107
|
+
"kind": "dimension"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "query:total-revenue",
|
|
111
|
+
"kind": "query"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"edges": [
|
|
115
|
+
{
|
|
116
|
+
"from": "model:orders",
|
|
117
|
+
"to": "rel:orders_customer"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"from": "model:customers",
|
|
121
|
+
"to": "rel:orders_customer"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"from": "model:orders",
|
|
125
|
+
"to": "cube:order_metrics"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"from": "cube:order_metrics",
|
|
129
|
+
"to": "metric:order_metrics.total_revenue"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"from": "cube:order_metrics",
|
|
133
|
+
"to": "metric:order_metrics.order_count"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"from": "cube:order_metrics",
|
|
137
|
+
"to": "dim:order_metrics.customer_id"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"from": "model:orders",
|
|
141
|
+
"to": "query:total-revenue"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"lineage_diagnostics": []
|
|
146
|
+
}
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
}
|
|
41
41
|
]
|
|
42
42
|
},
|
|
43
|
+
"entrypoint": true,
|
|
43
44
|
"eval": {
|
|
44
45
|
"metrics": [
|
|
45
46
|
"detection_accuracy",
|
|
@@ -60,6 +61,15 @@
|
|
|
60
61
|
],
|
|
61
62
|
"id": "monitor_freshness",
|
|
62
63
|
"llm_calls": [
|
|
64
|
+
{
|
|
65
|
+
"conditional": false,
|
|
66
|
+
"consumes": [],
|
|
67
|
+
"name": "read_freshness",
|
|
68
|
+
"produces": "freshness_reading",
|
|
69
|
+
"prompt": "You are the `read_freshness` step of the `monitor_freshness` assertion, bound to the semantic\ncontext `v5-jaffle`.\n\nRun the deterministic freshness assert through the bound query capability — `SELECT\nmax(<timestamp column>)` on the bound model — and compare the observed lag against the expected\ncadence (the `expected_cadence` param, or the MDL's declared cadence). Fresh iff the newest row is\nwithin the cadence; stale otherwise. This is a SQL comparison, not a judgment call: do NOT ask an\nLLM to decide fresh-vs-stale, and do not estimate or guess at a reading you did not query for.\n\nYour one job is to report the reading, not to grade it — severity classification belongs entirely\nto `assess_severity`, which runs next and only when this step finds the data stale.\n\nProduce `freshness_reading`: the observed newest timestamp, the observed lag (against now), the\nexpected cadence, and a `stale` boolean (`true` iff the observed lag exceeds the expected cadence).\nEvery field must come from the query result; never fabricate a reading.",
|
|
70
|
+
"tier": "cheap",
|
|
71
|
+
"when": null
|
|
72
|
+
},
|
|
63
73
|
{
|
|
64
74
|
"conditional": true,
|
|
65
75
|
"consumes": [
|
|
@@ -67,7 +77,7 @@
|
|
|
67
77
|
],
|
|
68
78
|
"name": "assess_severity",
|
|
69
79
|
"produces": "severity_verdict",
|
|
70
|
-
"prompt": "You are the `assess_severity` step of the `monitor_freshness` assertion, bound to the\
|
|
80
|
+
"prompt": "You are the `assess_severity` step of the `monitor_freshness` assertion, bound to the semantic\ncontext `v5-jaffle`.\n\nYou run ONLY when the deterministic freshness assert has already decided the data is **stale** —\ni.e. `max(<timestamp>)` on the monitored model is older than the expected cadence. The fresh-vs-stale\ndecision is not yours; it was a SQL comparison. You never re-run it, and when the data is fresh this\nstep does not run at all.\n\nYour one job: given the `freshness_reading` (the observed newest timestamp, the observed lag, and the\nexpected cadence), classify how bad the breach is:\n\n- `warn` — modestly overdue (roughly within ~2× the cadence), no compounding signal. The pipeline is\n probably just late.\n- `critical` — badly overdue (well beyond ~2× the cadence), or the lag is still growing across recent\n readings, or this model feeds known-critical downstreams. Someone should be paged.\n\nJudge from the lag magnitude relative to the cadence and any history in the reading; do not invent\nnumbers you were not given. Keep it to a reproducible, conservative call — when genuinely on the\nboundary, prefer `warn` and say why.\n\nProduce `severity_verdict` as a compact judgement: the chosen `severity` (`warn` | `critical`) and a\none-line rationale grounded in the lag vs cadence. This feeds the `status` block's `severity` field\nin the verdict envelope; it does not change the fresh/stale verdict itself.",
|
|
71
81
|
"tier": "cheap",
|
|
72
82
|
"when": {
|
|
73
83
|
"guard": "on_flag",
|
|
@@ -103,7 +113,7 @@
|
|
|
103
113
|
],
|
|
104
114
|
"status": "pass"
|
|
105
115
|
},
|
|
106
|
-
"prompt_fragment": "##
|
|
116
|
+
"prompt_fragment": "## read_freshness\n\nYou are the `read_freshness` step of the `monitor_freshness` assertion, bound to the semantic\ncontext `v5-jaffle`.\n\nRun the deterministic freshness assert through the bound query capability — `SELECT\nmax(<timestamp column>)` on the bound model — and compare the observed lag against the expected\ncadence (the `expected_cadence` param, or the MDL's declared cadence). Fresh iff the newest row is\nwithin the cadence; stale otherwise. This is a SQL comparison, not a judgment call: do NOT ask an\nLLM to decide fresh-vs-stale, and do not estimate or guess at a reading you did not query for.\n\nYour one job is to report the reading, not to grade it — severity classification belongs entirely\nto `assess_severity`, which runs next and only when this step finds the data stale.\n\nProduce `freshness_reading`: the observed newest timestamp, the observed lag (against now), the\nexpected cadence, and a `stale` boolean (`true` iff the observed lag exceeds the expected cadence).\nEvery field must come from the query result; never fabricate a reading.\n\n## assess_severity\n\nYou are the `assess_severity` step of the `monitor_freshness` assertion, bound to the semantic\ncontext `v5-jaffle`.\n\nYou run ONLY when the deterministic freshness assert has already decided the data is **stale** —\ni.e. `max(<timestamp>)` on the monitored model is older than the expected cadence. The fresh-vs-stale\ndecision is not yours; it was a SQL comparison. You never re-run it, and when the data is fresh this\nstep does not run at all.\n\nYour one job: given the `freshness_reading` (the observed newest timestamp, the observed lag, and the\nexpected cadence), classify how bad the breach is:\n\n- `warn` — modestly overdue (roughly within ~2× the cadence), no compounding signal. The pipeline is\n probably just late.\n- `critical` — badly overdue (well beyond ~2× the cadence), or the lag is still growing across recent\n readings, or this model feeds known-critical downstreams. Someone should be paged.\n\nJudge from the lag magnitude relative to the cadence and any history in the reading; do not invent\nnumbers you were not given. Keep it to a reproducible, conservative call — when genuinely on the\nboundary, prefer `warn` and say why.\n\nProduce `severity_verdict` as a compact judgement: the chosen `severity` (`warn` | `critical`) and a\none-line rationale grounded in the lag vs cadence. This feeds the `status` block's `severity` field\nin the verdict envelope; it does not change the fresh/stale verdict itself.",
|
|
107
117
|
"realization_kind": "tool",
|
|
108
118
|
"required_capabilities": [
|
|
109
119
|
"scheduler",
|
|
@@ -138,10 +148,6 @@
|
|
|
138
148
|
}
|
|
139
149
|
],
|
|
140
150
|
"lineage": {
|
|
141
|
-
"consumers": {
|
|
142
|
-
"dashboards": 0,
|
|
143
|
-
"queries": 1
|
|
144
|
-
},
|
|
145
151
|
"edges": 7,
|
|
146
152
|
"nodes": 8,
|
|
147
153
|
"resolvable": true
|
|
@@ -184,5 +190,5 @@
|
|
|
184
190
|
}
|
|
185
191
|
},
|
|
186
192
|
"profile": "genbi-monitor",
|
|
187
|
-
"warble_ir_version": "0.
|
|
193
|
+
"warble_ir_version": "0.9"
|
|
188
194
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Coarse context binding: the whole v5-jaffle semantic layer, bound as a PREPARED document.
|
|
2
|
+
#
|
|
3
|
+
# `kind: prepared` means Warble does not read the semantic layer itself — it reads the JSON document
|
|
4
|
+
# `document:` names, which WrenAI's own `wren-context-loader` generator produced from the project.
|
|
5
|
+
# Warble therefore needs no knowledge of MDL, and the projection Wren hands it is the one Wren
|
|
6
|
+
# controls. The binding stays "coarse" in the original sense: it names the whole project, not a
|
|
7
|
+
# specific metric/grain.
|
|
8
|
+
#
|
|
9
|
+
# `project:` is the layer's IDENTITY, not a path Warble reads, and never the document's path — it is
|
|
10
|
+
# what the compiled prompts call the project the agent is working on. `document:` is the separate
|
|
11
|
+
# field carrying the file. Both resolve relative to this Warble project's own root (the profile
|
|
12
|
+
# directory), not relative to this file.
|
|
13
|
+
#
|
|
14
|
+
# The host rewrites this `project:` line to the user's own wren project at bind time and regenerates
|
|
15
|
+
# `document:`'s file in place; the committed values pin this repo's own v5 example so the profile
|
|
16
|
+
# compiles standalone for CI/dev. See MAINTAINING.md for how to regenerate the committed document.
|
|
17
|
+
kind: prepared
|
|
18
|
+
project: ../../../../examples/v5-jaffle
|
|
19
|
+
document: context/context.json
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
{
|
|
2
|
+
"context_version": 2,
|
|
3
|
+
"parseable": true,
|
|
4
|
+
"metrics": [
|
|
5
|
+
{
|
|
6
|
+
"name": "total_revenue",
|
|
7
|
+
"owner": "order_metrics",
|
|
8
|
+
"declared": true,
|
|
9
|
+
"additivity": "additive"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "order_count",
|
|
13
|
+
"owner": "order_metrics",
|
|
14
|
+
"declared": true,
|
|
15
|
+
"additivity": "additive"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "id",
|
|
19
|
+
"owner": "customers",
|
|
20
|
+
"declared": false,
|
|
21
|
+
"additivity": null
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "id",
|
|
25
|
+
"owner": "orders",
|
|
26
|
+
"declared": false,
|
|
27
|
+
"additivity": null
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "customer_id",
|
|
31
|
+
"owner": "orders",
|
|
32
|
+
"declared": false,
|
|
33
|
+
"additivity": null
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "amount",
|
|
37
|
+
"owner": "orders",
|
|
38
|
+
"declared": false,
|
|
39
|
+
"additivity": null
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"dimensions": [
|
|
43
|
+
{
|
|
44
|
+
"name": "customer_id",
|
|
45
|
+
"owner": "order_metrics",
|
|
46
|
+
"is_temporal": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "name",
|
|
50
|
+
"owner": "customers",
|
|
51
|
+
"is_temporal": false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "order_date",
|
|
55
|
+
"owner": "orders",
|
|
56
|
+
"is_temporal": true
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"models": [
|
|
60
|
+
{
|
|
61
|
+
"name": "customers",
|
|
62
|
+
"has_timestamp": false,
|
|
63
|
+
"columns": [
|
|
64
|
+
"id",
|
|
65
|
+
"name"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "orders",
|
|
70
|
+
"has_timestamp": true,
|
|
71
|
+
"columns": [
|
|
72
|
+
"id",
|
|
73
|
+
"customer_id",
|
|
74
|
+
"order_date",
|
|
75
|
+
"amount"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"lineage": {
|
|
80
|
+
"nodes": [
|
|
81
|
+
{
|
|
82
|
+
"id": "model:customers",
|
|
83
|
+
"kind": "model"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "model:orders",
|
|
87
|
+
"kind": "model"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "rel:orders_customer",
|
|
91
|
+
"kind": "relationship"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "cube:order_metrics",
|
|
95
|
+
"kind": "cube"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "metric:order_metrics.total_revenue",
|
|
99
|
+
"kind": "metric"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "metric:order_metrics.order_count",
|
|
103
|
+
"kind": "metric"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "dim:order_metrics.customer_id",
|
|
107
|
+
"kind": "dimension"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "query:total-revenue",
|
|
111
|
+
"kind": "query"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"edges": [
|
|
115
|
+
{
|
|
116
|
+
"from": "model:orders",
|
|
117
|
+
"to": "rel:orders_customer"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"from": "model:customers",
|
|
121
|
+
"to": "rel:orders_customer"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"from": "model:orders",
|
|
125
|
+
"to": "cube:order_metrics"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"from": "cube:order_metrics",
|
|
129
|
+
"to": "metric:order_metrics.total_revenue"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"from": "cube:order_metrics",
|
|
133
|
+
"to": "metric:order_metrics.order_count"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"from": "cube:order_metrics",
|
|
137
|
+
"to": "dim:order_metrics.customer_id"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"from": "model:orders",
|
|
141
|
+
"to": "query:total-revenue"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
"lineage_diagnostics": [],
|
|
146
|
+
"analysis": {
|
|
147
|
+
"impact": {
|
|
148
|
+
"cube:order_metrics": {
|
|
149
|
+
"downstream": [
|
|
150
|
+
"dim:order_metrics.customer_id",
|
|
151
|
+
"metric:order_metrics.order_count",
|
|
152
|
+
"metric:order_metrics.total_revenue"
|
|
153
|
+
],
|
|
154
|
+
"severity": {
|
|
155
|
+
"rank": 3,
|
|
156
|
+
"name": "semantic"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"dim:order_metrics.customer_id": {
|
|
160
|
+
"downstream": [],
|
|
161
|
+
"severity": {
|
|
162
|
+
"rank": 0,
|
|
163
|
+
"name": "none"
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
"metric:order_metrics.order_count": {
|
|
167
|
+
"downstream": [],
|
|
168
|
+
"severity": {
|
|
169
|
+
"rank": 0,
|
|
170
|
+
"name": "none"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"metric:order_metrics.total_revenue": {
|
|
174
|
+
"downstream": [],
|
|
175
|
+
"severity": {
|
|
176
|
+
"rank": 0,
|
|
177
|
+
"name": "none"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"model:customers": {
|
|
181
|
+
"downstream": [
|
|
182
|
+
"rel:orders_customer"
|
|
183
|
+
],
|
|
184
|
+
"severity": {
|
|
185
|
+
"rank": 1,
|
|
186
|
+
"name": "compatibility"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"model:orders": {
|
|
190
|
+
"downstream": [
|
|
191
|
+
"cube:order_metrics",
|
|
192
|
+
"dim:order_metrics.customer_id",
|
|
193
|
+
"metric:order_metrics.order_count",
|
|
194
|
+
"metric:order_metrics.total_revenue",
|
|
195
|
+
"query:total-revenue",
|
|
196
|
+
"rel:orders_customer"
|
|
197
|
+
],
|
|
198
|
+
"severity": {
|
|
199
|
+
"rank": 3,
|
|
200
|
+
"name": "semantic"
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"query:total-revenue": {
|
|
204
|
+
"downstream": [],
|
|
205
|
+
"severity": {
|
|
206
|
+
"rank": 0,
|
|
207
|
+
"name": "none"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"rel:orders_customer": {
|
|
211
|
+
"downstream": [],
|
|
212
|
+
"severity": {
|
|
213
|
+
"rank": 0,
|
|
214
|
+
"name": "none"
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
"consumers": {
|
|
219
|
+
"queries": 1,
|
|
220
|
+
"dashboards": 0
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|