@malloy-publisher/server 0.9.7 → 0.9.9
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/app/api-doc.yaml +1475 -578
- package/dist/app/assets/EnvironmentPage-DaNUmaHg.js +1 -0
- package/dist/app/assets/{HomePage-BM31X4Y8.js → HomePage-CRLoVDIs.js} +1 -1
- package/dist/app/assets/MainPage-BsV5UnlK.js +1 -0
- package/dist/app/assets/ModelPage-DOOiyJAE.js +2 -0
- package/dist/app/assets/PackagePage-QHG55rBw.js +1 -0
- package/dist/app/assets/{RenderedResult-CkUS04tl.es-CNz9JsEK.js → RenderedResult-BHuJpdSn.es-C37LMpwi.js} +2 -2
- package/dist/app/assets/{RouteError-DLJlCtRG.js → RouteError-ziodz3bt.js} +1 -1
- package/dist/app/assets/ThemeEditorPage-Cs3rIs4e.js +1 -0
- package/dist/app/assets/{ToggleButtonGroup-Bwj7gIJm.js → ToggleButtonGroup-BrygJ1WP.js} +1 -1
- package/dist/app/assets/documentRoutes-1Qgo5Pvl.js +1 -0
- package/dist/app/assets/index-BK0mbcyQ.js +483 -0
- package/dist/app/assets/{index-BcsfsLm3.js → index-Bwc6-9Dc.js} +1 -1
- package/dist/app/assets/{index-wawGd6k1.js → index-CA5a5gJj.js} +1 -1
- package/dist/app/assets/{index-D3HZqxOW.js → index-CXJpj7He.js} +1 -1
- package/dist/app/assets/index.es-CxcPJdYO.js +195 -0
- package/dist/app/index.html +1 -1
- package/dist/instrumentation.mjs +23 -24
- package/dist/package_load_worker.mjs +18741 -17793
- package/dist/server.mjs +120201 -119366
- package/dist/sshcrypto-cqb52edz.node +0 -0
- package/package.json +1 -1
- package/dist/app/assets/EnvironmentPage-V6cQ_Kpr.js +0 -1
- package/dist/app/assets/MainPage-CQW3P4wB.js +0 -1
- package/dist/app/assets/ModelPage-dBHaHb6u.js +0 -2
- package/dist/app/assets/PackagePage-B-ruDCyR.js +0 -1
- package/dist/app/assets/ThemeEditorPage-Ck4rJ1vv.js +0 -1
- package/dist/app/assets/documentRoutes-DGm_-EUy.js +0 -1
- package/dist/app/assets/index-hnA8HjeH.js +0 -484
- package/dist/app/assets/index.es-B2kJpnhe.js +0 -195
package/dist/app/api-doc.yaml
CHANGED
|
@@ -65,16 +65,28 @@ tags:
|
|
|
65
65
|
distribution
|
|
66
66
|
- name: models
|
|
67
67
|
description: Malloy model access and compilation operations
|
|
68
|
+
- name: reports
|
|
69
|
+
description:
|
|
70
|
+
Reports - any `.malloy` file in a package carrying an artifact tag,
|
|
71
|
+
wherever it lives, with a linear or grid layout - their listing,
|
|
72
|
+
manifests, and cells
|
|
68
73
|
- name: notebooks
|
|
69
|
-
description:
|
|
74
|
+
description: Deprecated aliases for the linear reports. Use the `reports` routes.
|
|
70
75
|
- name: dashboards
|
|
71
|
-
description:
|
|
72
|
-
Discovery and manifests for `# artifact` dashboards - layout, tiles, and
|
|
73
|
-
the given specs behind their controls
|
|
76
|
+
description: Deprecated aliases for the grid reports. Use the `reports` routes.
|
|
74
77
|
- name: data-apps
|
|
75
78
|
description:
|
|
76
79
|
In-package HTML data apps (static pages served from a package's public/
|
|
77
80
|
directory)
|
|
81
|
+
- name: skills
|
|
82
|
+
description:
|
|
83
|
+
Agent skills in force for a package - the bundled guides plus the package's
|
|
84
|
+
own `skills/`, with the package's copy replacing a bundled one of the same
|
|
85
|
+
name
|
|
86
|
+
- name: agents
|
|
87
|
+
description:
|
|
88
|
+
Agents a package declares in `publisher.json`, resolved to their
|
|
89
|
+
instructions, skill files and schedules (served, never run)
|
|
78
90
|
- name: databases
|
|
79
91
|
description: Embedded database management and access
|
|
80
92
|
- name: watch-mode
|
|
@@ -1635,11 +1647,10 @@ paths:
|
|
|
1635
1647
|
|
|
1636
1648
|
On a package with a surface (a root `index.malloy`, or a legacy `explores`), only the
|
|
1637
1649
|
files on that surface are listed, unless `includeHiddenFilesAndSources` is true. With it, every
|
|
1638
|
-
model file is listed, and `isHidden` marks the ones the package hides.
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
surface; they are listed by list-notebooks.
|
|
1650
|
+
model file is listed, and `isHidden` marks the ones the package hides. Reports (any
|
|
1651
|
+
`.malloy` outside `public/` carrying an artifact tag, other than the root `index.malloy`;
|
|
1652
|
+
see list-reports) are listed by list-reports. A grid report is not a model here on a
|
|
1653
|
+
package with a surface; a linear report is not a model here with or without one.
|
|
1643
1654
|
parameters:
|
|
1644
1655
|
- name: environmentName
|
|
1645
1656
|
in: path
|
|
@@ -1694,15 +1705,14 @@ paths:
|
|
|
1694
1705
|
On a package with a surface (a root `index.malloy`, or a legacy `explores`), a file off
|
|
1695
1706
|
that surface answers 404 with the same message a query to it gets, unless
|
|
1696
1707
|
`includeHiddenFilesAndSources` is true. With it, the file is returned with its `sourceText`, whatever
|
|
1697
|
-
sources the text names.
|
|
1698
|
-
|
|
1699
|
-
names no `kind` and sits under `notebooks/`) are always returned. A package with no surface, or with
|
|
1708
|
+
sources the text names. Reports (see list-reports), wherever they live in the package,
|
|
1709
|
+
are always returned. A package with no surface, or with
|
|
1700
1710
|
`queryableSources: "all"`, returns every file. For a file it returns, `modelDef.contents` and `modelDef.exports`,
|
|
1701
1711
|
`modelInfo`, `sources` and `sourceInfos` are limited to the names the file publishes, so
|
|
1702
1712
|
the surface file does not carry the hidden sources it imports. A join to a hidden source
|
|
1703
1713
|
keeps only its name and the names and types of its fields. `sourceText` is left out
|
|
1704
1714
|
when the text names a source the file does not publish, unless
|
|
1705
|
-
`includeHiddenFilesAndSources` is true; the text of a
|
|
1715
|
+
`includeHiddenFilesAndSources` is true; the text of a report is always returned.
|
|
1706
1716
|
parameters:
|
|
1707
1717
|
- name: environmentName
|
|
1708
1718
|
in: path
|
|
@@ -1750,15 +1760,29 @@ paths:
|
|
|
1750
1760
|
tags:
|
|
1751
1761
|
- models
|
|
1752
1762
|
operationId: update-model-source
|
|
1753
|
-
summary: Write a
|
|
1763
|
+
summary: Write a report file into the package
|
|
1754
1764
|
description: |
|
|
1755
|
-
Writes the Malloy text of a
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1765
|
+
Writes the Malloy text of a report into the package, and reloads the
|
|
1766
|
+
package in place so it is served from the new text. This is the report
|
|
1767
|
+
builder's save. A report is any `.malloy` file carrying an artifact tag
|
|
1768
|
+
(see list-reports), of either layout, wherever it lives in the package.
|
|
1769
|
+
|
|
1770
|
+
What it accepts:
|
|
1771
|
+
|
|
1772
|
+
- CREATE (no `expectedHash`): any `.malloy` path in the package that
|
|
1773
|
+
does not exist yet, outside `public/`, and never the root
|
|
1774
|
+
`index.malloy`. Missing directories are created, inside the package
|
|
1775
|
+
root only. The text must carry an artifact tag (`## artifact`, or the
|
|
1776
|
+
deprecated query-level `# artifact`): an `artifact` property anywhere
|
|
1777
|
+
on a tag line, outside a string. Text without one is refused with 400.
|
|
1778
|
+
- REPLACE (with `expectedHash`): only a file the package currently reads
|
|
1779
|
+
as an editable report: a tagged `.malloy` report of either layout,
|
|
1780
|
+
including a tagged grid report that has no tiles yet. A model, an
|
|
1781
|
+
untagged file, a `.malloynb`, the root `index.malloy` and anything in
|
|
1782
|
+
`public/` cannot be overwritten, wherever they live, and answer 400.
|
|
1783
|
+
|
|
1784
|
+
Two reports may share a basename in different directories; a report is
|
|
1785
|
+
identified by its path, so a taken basename is not refused.
|
|
1762
1786
|
|
|
1763
1787
|
The text is compiled first, as the file, and refused with its problems
|
|
1764
1788
|
when it does not compile; nothing is written. The write is atomic (a
|
|
@@ -1776,21 +1800,16 @@ paths:
|
|
|
1776
1800
|
merged: the caller re-opens and reapplies its change. Omit it to CREATE
|
|
1777
1801
|
the file: a file that already exists is then refused with 409 too, so
|
|
1778
1802
|
an unconditional overwrite is not something a caller can ask for by
|
|
1779
|
-
leaving a field out. A
|
|
1780
|
-
|
|
1781
|
-
|
|
1803
|
+
leaving a field out. A path over an existing file the package does not
|
|
1804
|
+
read as a report answers 400 instead, with or without a hash, because
|
|
1805
|
+
that check comes before the hash. The check, the write,
|
|
1782
1806
|
the reload and the restore all happen under one hold of the package
|
|
1783
1807
|
lock, so two saves racing on one file cannot both pass the check, and a
|
|
1784
1808
|
rollback cannot revert the other writer's text instead of its own.
|
|
1785
1809
|
|
|
1786
|
-
A
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
`# artifact` or `## artifact` tag (an `artifact` property anywhere on a
|
|
1790
|
-
tag line, outside a string) is refused with 400 before anything is
|
|
1791
|
-
written; a tag only inside a block comment passes that check but the
|
|
1792
|
-
compiled model carries none, so it is rolled back and answers 500. A
|
|
1793
|
-
tagged dashboard with no tiles saves but is not served until it has one.
|
|
1810
|
+
A tag only inside a block comment passes the tag check but the compiled
|
|
1811
|
+
model carries none, so it is rolled back and answers 500. A tagged grid
|
|
1812
|
+
report with no tiles saves but is not served until it has one.
|
|
1794
1813
|
|
|
1795
1814
|
A create answers 201 and an update 200; `created` in the body says the
|
|
1796
1815
|
same thing.
|
|
@@ -1813,7 +1832,7 @@ paths:
|
|
|
1813
1832
|
type: string
|
|
1814
1833
|
- name: path
|
|
1815
1834
|
in: path
|
|
1816
|
-
description: The file,
|
|
1835
|
+
description: The report file's path in the package, such as `sales/q3.malloy`
|
|
1817
1836
|
required: true
|
|
1818
1837
|
schema:
|
|
1819
1838
|
$ref: "#/components/schemas/PathPattern"
|
|
@@ -1852,9 +1871,8 @@ paths:
|
|
|
1852
1871
|
$ref: "#/components/responses/NotFound"
|
|
1853
1872
|
"409":
|
|
1854
1873
|
description:
|
|
1855
|
-
The file changed since the caller opened it, already exists and
|
|
1856
|
-
no `expectedHash` was sent
|
|
1857
|
-
file already holds
|
|
1874
|
+
The file changed since the caller opened it, or already exists and
|
|
1875
|
+
no `expectedHash` was sent
|
|
1858
1876
|
content:
|
|
1859
1877
|
application/json:
|
|
1860
1878
|
schema:
|
|
@@ -1977,9 +1995,11 @@ paths:
|
|
|
1977
1995
|
that is both gated and hidden from the caller answers 404 for the whole
|
|
1978
1996
|
request, as it does without a document. In a document, problem positions
|
|
1979
1997
|
are lines of the submitted text, problems carry no `model` tag, and
|
|
1980
|
-
`includeSql` returns no `sql`.
|
|
1981
|
-
|
|
1982
|
-
|
|
1998
|
+
`includeSql` returns no `sql`. The document's `layout` follows the one
|
|
1999
|
+
rule every report follows (see list-reports): the tag's `layout=`, else
|
|
2000
|
+
its deprecated `kind=` (`dashboard` is grid, `notebook` is linear), else
|
|
2001
|
+
grid when the tag lists `tiles` or carries a `dashboard { … }` grid tag,
|
|
2002
|
+
else linear. Where a file lives never decides it.
|
|
1983
2003
|
parameters:
|
|
1984
2004
|
- name: environmentName
|
|
1985
2005
|
in: path
|
|
@@ -2027,42 +2047,36 @@ paths:
|
|
|
2027
2047
|
"503":
|
|
2028
2048
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2029
2049
|
|
|
2030
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2050
|
+
/environments/{environmentName}/packages/{packageName}/reports:
|
|
2031
2051
|
get:
|
|
2032
2052
|
tags:
|
|
2033
|
-
-
|
|
2034
|
-
operationId: list-
|
|
2035
|
-
summary: List package
|
|
2053
|
+
- reports
|
|
2054
|
+
operationId: list-reports
|
|
2055
|
+
summary: List package reports
|
|
2036
2056
|
description: |
|
|
2037
|
-
Lists
|
|
2038
|
-
file
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
one over a hidden source may not. The dashboard file's own
|
|
2061
|
-
`export {}` and named queries add nothing to the surface. A tile over a
|
|
2062
|
-
hidden source answers 404 when it runs, and the package's `warnings`
|
|
2063
|
-
report each such tile, single query and suggest, with severity
|
|
2064
|
-
`error`, as of the last load, naming the source and the fix. Under
|
|
2065
|
-
`"all"` nothing is refused, so the situation does not arise.
|
|
2057
|
+
Lists every report in the package, in path order. A report is a
|
|
2058
|
+
`.malloy` file anywhere in the package, outside `public/`, that carries
|
|
2059
|
+
an artifact tag: a model-level `## artifact`, or the deprecated
|
|
2060
|
+
query-level `# artifact` on a `query:`. The package's root
|
|
2061
|
+
`index.malloy` is never a report (it is the surface). A legacy
|
|
2062
|
+
`.malloynb` is also a report, linear and read-only. Where a file lives
|
|
2063
|
+
carries no meaning: `dashboards/` and `notebooks/` are ordinary
|
|
2064
|
+
directory names. Everything else is an ordinary model, which a report
|
|
2065
|
+
may import.
|
|
2066
|
+
|
|
2067
|
+
A report's `layout` is decided by its tags, first match wins: the
|
|
2068
|
+
tag's `layout=` (`grid` or `linear`); else the deprecated `kind=`
|
|
2069
|
+
(`dashboard` is grid, `notebook` is linear); else grid for a
|
|
2070
|
+
query-level `# artifact`; else grid for a model-level tag that lists
|
|
2071
|
+
`tiles` or carries a `dashboard { … }` grid tag; else linear.
|
|
2072
|
+
|
|
2073
|
+
A report is identified by its `path`. `name`, its basename, is a
|
|
2074
|
+
display label only: two reports may share one.
|
|
2075
|
+
|
|
2076
|
+
Every report is listed whatever the package's surface; the surface
|
|
2077
|
+
limits what its tiles and cells may read, not whether it is listed. A
|
|
2078
|
+
report that failed to compile is listed with its `error`. A tagged grid
|
|
2079
|
+
report with no tiles yet is not served and not listed.
|
|
2066
2080
|
parameters:
|
|
2067
2081
|
- name: environmentName
|
|
2068
2082
|
in: path
|
|
@@ -2084,13 +2098,13 @@ paths:
|
|
|
2084
2098
|
$ref: "#/components/schemas/VersionIdPattern"
|
|
2085
2099
|
responses:
|
|
2086
2100
|
"200":
|
|
2087
|
-
description:
|
|
2101
|
+
description: The reports in the package
|
|
2088
2102
|
content:
|
|
2089
2103
|
application/json:
|
|
2090
2104
|
schema:
|
|
2091
2105
|
type: array
|
|
2092
2106
|
items:
|
|
2093
|
-
$ref: "#/components/schemas/
|
|
2107
|
+
$ref: "#/components/schemas/Report"
|
|
2094
2108
|
"401":
|
|
2095
2109
|
$ref: "#/components/responses/Unauthorized"
|
|
2096
2110
|
"404":
|
|
@@ -2102,19 +2116,24 @@ paths:
|
|
|
2102
2116
|
"503":
|
|
2103
2117
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2104
2118
|
|
|
2105
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2119
|
+
/environments/{environmentName}/packages/{packageName}/reports/{path}:
|
|
2106
2120
|
get:
|
|
2107
2121
|
tags:
|
|
2108
|
-
-
|
|
2109
|
-
operationId: get-
|
|
2110
|
-
summary: Get a
|
|
2122
|
+
- reports
|
|
2123
|
+
operationId: get-report
|
|
2124
|
+
summary: Get a report manifest
|
|
2111
2125
|
description: |
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
`path` as the model.
|
|
2126
|
+
Everything a viewer needs to render one report, addressed by its path in
|
|
2127
|
+
the package, including its extension, exactly as list-reports gives
|
|
2128
|
+
it (`sales/q3.malloy`). A report written as tiles, of either layout, carries the
|
|
2129
|
+
manifest fields (`tiles` or `query`, `dashboardColumns`,
|
|
2130
|
+
`startingGivens`, `autorun`, `givens`): its tiles run through the model
|
|
2131
|
+
query endpoint with `givens`, using `path` as the model. A linear
|
|
2132
|
+
report written as `run:` cells, or a `.malloynb`, carries `notebook`
|
|
2133
|
+
instead: its cells as get-notebook returned them. A `.malloy` report's
|
|
2134
|
+
cells run through the model query endpoint, each cell's `text` as
|
|
2135
|
+
`query` and `path` as the model; a `.malloynb`'s through the
|
|
2136
|
+
deprecated execute-notebook-cell.
|
|
2118
2137
|
parameters:
|
|
2119
2138
|
- name: environmentName
|
|
2120
2139
|
in: path
|
|
@@ -2128,19 +2147,14 @@ paths:
|
|
|
2128
2147
|
required: true
|
|
2129
2148
|
schema:
|
|
2130
2149
|
$ref: "#/components/schemas/IdentifierPattern"
|
|
2131
|
-
- name:
|
|
2150
|
+
- name: path
|
|
2132
2151
|
in: path
|
|
2133
2152
|
description: >-
|
|
2134
|
-
The
|
|
2135
|
-
|
|
2136
|
-
dashboards falls outside that. It is NOT constrained to it, because
|
|
2137
|
-
the name comes from a filename rather than being chosen: a file such
|
|
2138
|
-
as `dashboards/v1.2.malloy` is served, and its published `resource`
|
|
2139
|
-
carries the name percent-encoded. Send it percent-encoded.
|
|
2153
|
+
The report's path within the package, including `.malloy` (or
|
|
2154
|
+
`.malloynb`): the `path` list-reports returns.
|
|
2140
2155
|
required: true
|
|
2141
2156
|
schema:
|
|
2142
2157
|
type: string
|
|
2143
|
-
minLength: 1
|
|
2144
2158
|
- name: versionId
|
|
2145
2159
|
in: query
|
|
2146
2160
|
description: Version identifier for the package
|
|
@@ -2149,11 +2163,11 @@ paths:
|
|
|
2149
2163
|
$ref: "#/components/schemas/VersionIdPattern"
|
|
2150
2164
|
responses:
|
|
2151
2165
|
"200":
|
|
2152
|
-
description: The
|
|
2166
|
+
description: The report manifest
|
|
2153
2167
|
content:
|
|
2154
2168
|
application/json:
|
|
2155
2169
|
schema:
|
|
2156
|
-
$ref: "#/components/schemas/
|
|
2170
|
+
$ref: "#/components/schemas/ReportManifest"
|
|
2157
2171
|
"401":
|
|
2158
2172
|
$ref: "#/components/responses/Unauthorized"
|
|
2159
2173
|
"404":
|
|
@@ -2165,19 +2179,29 @@ paths:
|
|
|
2165
2179
|
"503":
|
|
2166
2180
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2167
2181
|
|
|
2168
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2182
|
+
/environments/{environmentName}/packages/{packageName}/skills:
|
|
2169
2183
|
get:
|
|
2170
2184
|
tags:
|
|
2171
|
-
-
|
|
2172
|
-
operationId: list-
|
|
2173
|
-
summary: List package
|
|
2185
|
+
- skills
|
|
2186
|
+
operationId: list-skills
|
|
2187
|
+
summary: List the agent skills in force for a package
|
|
2174
2188
|
description: |
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
is
|
|
2189
|
+
Lists the agent skills that apply to this package: the guides bundled
|
|
2190
|
+
with this server, plus any the package ships under `skills/`.
|
|
2191
|
+
|
|
2192
|
+
Resolution is name shadowing. A package skill whose `name` matches a
|
|
2193
|
+
bundled skill REPLACES it for this package; one with a new name is
|
|
2194
|
+
added. Nothing is merged, because the server does not know which guides
|
|
2195
|
+
the calling agent already holds and so cannot patch one. Read `origin`
|
|
2196
|
+
on each entry to tell a replaced skill from the original.
|
|
2197
|
+
|
|
2198
|
+
Bodies are not returned here. Fetch one with
|
|
2199
|
+
`GET .../skills/{skillName}`. An entry whose `name` contains a slash
|
|
2200
|
+
(`<skill>/<stem>`) is a skill's on-demand reference file, addressed by
|
|
2201
|
+
the pointer at the end of its parent's body.
|
|
2202
|
+
|
|
2203
|
+
The REST half of the `get_skill` MCP tool, for callers running
|
|
2204
|
+
unattended.
|
|
2181
2205
|
parameters:
|
|
2182
2206
|
- name: environmentName
|
|
2183
2207
|
in: path
|
|
@@ -2191,45 +2215,38 @@ paths:
|
|
|
2191
2215
|
required: true
|
|
2192
2216
|
schema:
|
|
2193
2217
|
$ref: "#/components/schemas/IdentifierPattern"
|
|
2194
|
-
- name: versionId
|
|
2195
|
-
in: query
|
|
2196
|
-
description: Version identifier for the package
|
|
2197
|
-
required: false
|
|
2198
|
-
schema:
|
|
2199
|
-
$ref: "#/components/schemas/VersionIdPattern"
|
|
2200
2218
|
responses:
|
|
2201
2219
|
"200":
|
|
2202
|
-
description:
|
|
2220
|
+
description: The skills in force for the package
|
|
2203
2221
|
content:
|
|
2204
2222
|
application/json:
|
|
2205
2223
|
schema:
|
|
2206
2224
|
type: array
|
|
2207
2225
|
items:
|
|
2208
|
-
$ref: "#/components/schemas/
|
|
2226
|
+
$ref: "#/components/schemas/SkillSummary"
|
|
2209
2227
|
"401":
|
|
2210
2228
|
$ref: "#/components/responses/Unauthorized"
|
|
2211
2229
|
"404":
|
|
2212
2230
|
$ref: "#/components/responses/NotFound"
|
|
2213
2231
|
"500":
|
|
2214
2232
|
$ref: "#/components/responses/InternalServerError"
|
|
2215
|
-
"501":
|
|
2216
|
-
$ref: "#/components/responses/NotImplemented"
|
|
2217
2233
|
"503":
|
|
2218
2234
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2219
2235
|
|
|
2220
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2236
|
+
/environments/{environmentName}/packages/{packageName}/skills/{skillName}:
|
|
2221
2237
|
get:
|
|
2222
2238
|
tags:
|
|
2223
|
-
-
|
|
2224
|
-
operationId: get-
|
|
2225
|
-
summary: Get
|
|
2239
|
+
- skills
|
|
2240
|
+
operationId: get-skill
|
|
2241
|
+
summary: Get one agent skill, with its body
|
|
2226
2242
|
description: |
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2243
|
+
Returns one skill in force for this package, including its full
|
|
2244
|
+
Markdown. `skillName` is a name from the listing, exactly as spelled
|
|
2245
|
+
there; a reference file is addressed as `<skill>/<stem>`. The slash may
|
|
2246
|
+
be sent literally or as `%2F`; a literal `%` in a name must be sent as
|
|
2247
|
+
`%25`.
|
|
2248
|
+
|
|
2249
|
+
404 when no skill of that name is in force.
|
|
2233
2250
|
parameters:
|
|
2234
2251
|
- name: environmentName
|
|
2235
2252
|
in: path
|
|
@@ -2242,55 +2259,44 @@ paths:
|
|
|
2242
2259
|
description: Name of the package
|
|
2243
2260
|
required: true
|
|
2244
2261
|
schema:
|
|
2245
|
-
|
|
2246
|
-
- name:
|
|
2262
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2263
|
+
- name: skillName
|
|
2247
2264
|
in: path
|
|
2248
|
-
description:
|
|
2265
|
+
description: >-
|
|
2266
|
+
Skill name as returned by the listing. A reference file is
|
|
2267
|
+
`<skill>/<stem>`; the slash may be literal or `%2F`.
|
|
2249
2268
|
required: true
|
|
2250
2269
|
schema:
|
|
2251
2270
|
type: string
|
|
2252
|
-
- name: versionId
|
|
2253
|
-
in: query
|
|
2254
|
-
description: Version identifier for the package
|
|
2255
|
-
required: false
|
|
2256
|
-
schema:
|
|
2257
|
-
$ref: "#/components/schemas/VersionIdPattern"
|
|
2258
2271
|
responses:
|
|
2259
2272
|
"200":
|
|
2260
|
-
description:
|
|
2273
|
+
description: The skill and its body
|
|
2261
2274
|
content:
|
|
2262
|
-
|
|
2275
|
+
application/json:
|
|
2263
2276
|
schema:
|
|
2264
|
-
$ref: "#/components/schemas/
|
|
2277
|
+
$ref: "#/components/schemas/Skill"
|
|
2265
2278
|
"401":
|
|
2266
2279
|
$ref: "#/components/responses/Unauthorized"
|
|
2267
2280
|
"404":
|
|
2268
2281
|
$ref: "#/components/responses/NotFound"
|
|
2269
2282
|
"500":
|
|
2270
2283
|
$ref: "#/components/responses/InternalServerError"
|
|
2271
|
-
"
|
|
2272
|
-
$ref: "#/components/responses/
|
|
2284
|
+
"503":
|
|
2285
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2273
2286
|
|
|
2274
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2287
|
+
/environments/{environmentName}/packages/{packageName}/agents:
|
|
2275
2288
|
get:
|
|
2276
2289
|
tags:
|
|
2277
|
-
-
|
|
2278
|
-
operationId:
|
|
2279
|
-
summary:
|
|
2290
|
+
- agents
|
|
2291
|
+
operationId: list-agents
|
|
2292
|
+
summary: List the agents a package declares
|
|
2280
2293
|
description: |
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
`.malloynb`.
|
|
2294
|
+
Lists the agents declared under `agents` in the package's
|
|
2295
|
+
`publisher.json` that passed validation, without instructions or
|
|
2296
|
+
skills. An agent that failed validation is not listed; the package's
|
|
2297
|
+
`warnings` say why. Empty when the manifest declares none.
|
|
2286
2298
|
|
|
2287
|
-
|
|
2288
|
-
`queryableSources` left at `"declared"`, a code cell may read only sources the surface
|
|
2289
|
-
exports. A cell over a hidden source answers 404, and 404 rather than 403 even when the
|
|
2290
|
-
source is also `#(authorize)`-gated. A source an earlier cell declares on top of a
|
|
2291
|
-
published source still works. A cell's own source over a raw table (`duckdb.table(...)`
|
|
2292
|
-
or `.sql(...)`) has no published source under it, so it is refused. The response shows
|
|
2293
|
-
only the sources the notebook may read.
|
|
2299
|
+
The REST half of the `get_agent` MCP tool.
|
|
2294
2300
|
parameters:
|
|
2295
2301
|
- name: environmentName
|
|
2296
2302
|
in: path
|
|
@@ -2303,102 +2309,39 @@ paths:
|
|
|
2303
2309
|
description: Name of the package
|
|
2304
2310
|
required: true
|
|
2305
2311
|
schema:
|
|
2306
|
-
|
|
2307
|
-
- name: path
|
|
2308
|
-
in: path
|
|
2309
|
-
description: Path to notebook within the package
|
|
2310
|
-
required: true
|
|
2311
|
-
schema:
|
|
2312
|
-
type: string
|
|
2313
|
-
- name: cellIndex
|
|
2314
|
-
in: path
|
|
2315
|
-
description: Index of the cell to execute (0-based)
|
|
2316
|
-
required: true
|
|
2317
|
-
schema:
|
|
2318
|
-
type: integer
|
|
2319
|
-
- name: versionId
|
|
2320
|
-
in: query
|
|
2321
|
-
description: Version identifier for the package
|
|
2322
|
-
required: false
|
|
2323
|
-
schema:
|
|
2324
|
-
$ref: "#/components/schemas/VersionIdPattern"
|
|
2325
|
-
- name: filter_params
|
|
2326
|
-
in: query
|
|
2327
|
-
deprecated: true
|
|
2328
|
-
description: |
|
|
2329
|
-
**DEPRECATED**: Use `givens` (native Malloy runtime parameters) instead.
|
|
2330
|
-
Targets the deprecated `#(filter)` annotation path. See docs/givens.md
|
|
2331
|
-
for migration recipes.
|
|
2332
|
-
|
|
2333
|
-
JSON-encoded filter parameter values keyed by filter name.
|
|
2334
|
-
required: false
|
|
2335
|
-
schema:
|
|
2336
|
-
type: string
|
|
2337
|
-
- name: bypass_filters
|
|
2338
|
-
in: query
|
|
2339
|
-
deprecated: true
|
|
2340
|
-
description: |
|
|
2341
|
-
**DEPRECATED**: Use `givens` (native Malloy runtime parameters) instead.
|
|
2342
|
-
See docs/givens.md for migration recipes.
|
|
2343
|
-
|
|
2344
|
-
When true, skip filter injection entirely.
|
|
2345
|
-
required: false
|
|
2346
|
-
schema:
|
|
2347
|
-
type: string
|
|
2348
|
-
enum:
|
|
2349
|
-
- "true"
|
|
2350
|
-
- "false"
|
|
2351
|
-
- name: givens
|
|
2352
|
-
in: query
|
|
2353
|
-
description:
|
|
2354
|
-
A `GivenValues` object, JSON-encoded so it can travel in a query
|
|
2355
|
-
string. Values are typed as `GivenValues` describes them, not
|
|
2356
|
-
string-encoded as `EncodedGivenValues` would be. The parameter keeps
|
|
2357
|
-
its name for compatibility; the schema it carries is the one named
|
|
2358
|
-
here.
|
|
2359
|
-
required: false
|
|
2360
|
-
schema:
|
|
2361
|
-
type: string
|
|
2312
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2362
2313
|
responses:
|
|
2363
2314
|
"200":
|
|
2364
|
-
description:
|
|
2315
|
+
description: The agents the package declares
|
|
2365
2316
|
content:
|
|
2366
|
-
|
|
2317
|
+
application/json:
|
|
2367
2318
|
schema:
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2319
|
+
type: array
|
|
2320
|
+
items:
|
|
2321
|
+
$ref: "#/components/schemas/AgentSummary"
|
|
2371
2322
|
"401":
|
|
2372
2323
|
$ref: "#/components/responses/Unauthorized"
|
|
2373
|
-
"403":
|
|
2374
|
-
$ref: "#/components/responses/Forbidden"
|
|
2375
2324
|
"404":
|
|
2376
2325
|
$ref: "#/components/responses/NotFound"
|
|
2377
|
-
"413":
|
|
2378
|
-
$ref: "#/components/responses/PayloadTooLarge"
|
|
2379
2326
|
"500":
|
|
2380
2327
|
$ref: "#/components/responses/InternalServerError"
|
|
2381
|
-
"501":
|
|
2382
|
-
$ref: "#/components/responses/NotImplemented"
|
|
2383
|
-
"424":
|
|
2384
|
-
$ref: "#/components/responses/ConnectionUnavailable"
|
|
2385
|
-
"502":
|
|
2386
|
-
$ref: "#/components/responses/DatabaseUnreachable"
|
|
2387
2328
|
"503":
|
|
2388
2329
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2389
|
-
"504":
|
|
2390
|
-
$ref: "#/components/responses/GatewayTimeout"
|
|
2391
2330
|
|
|
2392
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2331
|
+
/environments/{environmentName}/packages/{packageName}/agents/{agentName}:
|
|
2393
2332
|
get:
|
|
2394
2333
|
tags:
|
|
2395
|
-
-
|
|
2396
|
-
operationId:
|
|
2397
|
-
summary:
|
|
2334
|
+
- agents
|
|
2335
|
+
operationId: get-agent
|
|
2336
|
+
summary: Get one agent, resolved
|
|
2398
2337
|
description: |
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2338
|
+
Returns one agent with its instructions, its own skill files and each
|
|
2339
|
+
schedule's task text, plus `source`, which pins the package load and the
|
|
2340
|
+
agent's own content so a runner can prove which bytes ran. Publisher
|
|
2341
|
+
serves the definition and runs nothing: the caller's own harness
|
|
2342
|
+
executes it, and schedules are never fired by the server.
|
|
2343
|
+
|
|
2344
|
+
404 when no agent of that name is served.
|
|
2402
2345
|
parameters:
|
|
2403
2346
|
- name: environmentName
|
|
2404
2347
|
in: path
|
|
@@ -2412,48 +2355,63 @@ paths:
|
|
|
2412
2355
|
required: true
|
|
2413
2356
|
schema:
|
|
2414
2357
|
$ref: "#/components/schemas/IdentifierPattern"
|
|
2415
|
-
- name:
|
|
2358
|
+
- name: agentName
|
|
2359
|
+
in: path
|
|
2360
|
+
description: >-
|
|
2361
|
+
Agent name as returned by the listing. Names are 1-64 lowercase
|
|
2362
|
+
letters, digits and single hyphens; any other value is a 404, not a
|
|
2363
|
+
400.
|
|
2364
|
+
required: true
|
|
2365
|
+
schema:
|
|
2366
|
+
type: string
|
|
2367
|
+
pattern: "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
2368
|
+
maxLength: 64
|
|
2369
|
+
- name: skills
|
|
2416
2370
|
in: query
|
|
2417
|
-
description:
|
|
2371
|
+
description: >-
|
|
2372
|
+
`full` (the default) returns every skill file with its text.
|
|
2373
|
+
`summary` returns each file's `relative_filepath` and `bytes`, plus
|
|
2374
|
+
`name` and `description` for a `SKILL.md`, and no `file_contents`;
|
|
2375
|
+
fetch a file with `GET .../agents/{agentName}/skills/{path}`. The
|
|
2376
|
+
`source` pin is identical in both. Any other value, including an
|
|
2377
|
+
empty one, is a 400.
|
|
2418
2378
|
required: false
|
|
2419
2379
|
schema:
|
|
2420
|
-
|
|
2380
|
+
type: string
|
|
2381
|
+
enum: [full, summary]
|
|
2382
|
+
default: full
|
|
2421
2383
|
responses:
|
|
2422
2384
|
"200":
|
|
2423
|
-
description:
|
|
2385
|
+
description: The resolved agent
|
|
2424
2386
|
content:
|
|
2425
2387
|
application/json:
|
|
2426
2388
|
schema:
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2389
|
+
$ref: "#/components/schemas/Agent"
|
|
2390
|
+
"400":
|
|
2391
|
+
$ref: "#/components/responses/BadRequest"
|
|
2430
2392
|
"401":
|
|
2431
2393
|
$ref: "#/components/responses/Unauthorized"
|
|
2432
2394
|
"404":
|
|
2433
2395
|
$ref: "#/components/responses/NotFound"
|
|
2434
2396
|
"500":
|
|
2435
2397
|
$ref: "#/components/responses/InternalServerError"
|
|
2436
|
-
"501":
|
|
2437
|
-
$ref: "#/components/responses/NotImplemented"
|
|
2438
2398
|
"503":
|
|
2439
2399
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2440
2400
|
|
|
2441
|
-
/environments/{environmentName}/packages/{packageName}/
|
|
2401
|
+
/environments/{environmentName}/packages/{packageName}/agents/{agentName}/skills/{relativeFilepath}:
|
|
2442
2402
|
get:
|
|
2443
2403
|
tags:
|
|
2444
|
-
-
|
|
2445
|
-
operationId:
|
|
2446
|
-
summary:
|
|
2404
|
+
- agents
|
|
2405
|
+
operationId: get-agent-skill-file
|
|
2406
|
+
summary: Get one of an agent's skill files
|
|
2447
2407
|
description: |
|
|
2448
|
-
|
|
2449
|
-
from
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
directory. Recursive depth is capped server-side to keep this cheap on
|
|
2456
|
-
large packages.
|
|
2408
|
+
Returns one file from the agent's resolved skill set, named by a
|
|
2409
|
+
`relative_filepath` from `GET .../agents/{agentName}?skills=summary`
|
|
2410
|
+
(for example `analyst-conventions/SKILL.md`), with the same `source`
|
|
2411
|
+
pin as the full definition. The path is looked up in the resolved set,
|
|
2412
|
+
never joined onto the filesystem.
|
|
2413
|
+
|
|
2414
|
+
404 when the agent or the file is not served.
|
|
2457
2415
|
parameters:
|
|
2458
2416
|
- name: environmentName
|
|
2459
2417
|
in: path
|
|
@@ -2467,57 +2425,580 @@ paths:
|
|
|
2467
2425
|
required: true
|
|
2468
2426
|
schema:
|
|
2469
2427
|
$ref: "#/components/schemas/IdentifierPattern"
|
|
2428
|
+
- name: agentName
|
|
2429
|
+
in: path
|
|
2430
|
+
description: >-
|
|
2431
|
+
Agent name as returned by the listing. Names are 1-64 lowercase
|
|
2432
|
+
letters, digits and single hyphens; any other value is a 404, not a
|
|
2433
|
+
400.
|
|
2434
|
+
required: true
|
|
2435
|
+
schema:
|
|
2436
|
+
type: string
|
|
2437
|
+
pattern: "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
2438
|
+
maxLength: 64
|
|
2439
|
+
- name: relativeFilepath
|
|
2440
|
+
in: path
|
|
2441
|
+
description: >-
|
|
2442
|
+
A `relative_filepath` from the agent's skill summary. Slashes may be
|
|
2443
|
+
sent literally or as `%2F`; a literal `%` in a name must be sent as
|
|
2444
|
+
`%25`.
|
|
2445
|
+
required: true
|
|
2446
|
+
schema:
|
|
2447
|
+
type: string
|
|
2470
2448
|
responses:
|
|
2471
2449
|
"200":
|
|
2472
|
-
description:
|
|
2450
|
+
description: The skill file
|
|
2473
2451
|
content:
|
|
2474
2452
|
application/json:
|
|
2475
2453
|
schema:
|
|
2476
|
-
|
|
2477
|
-
items:
|
|
2478
|
-
$ref: "#/components/schemas/DataApp"
|
|
2479
|
-
"400":
|
|
2480
|
-
$ref: "#/components/responses/BadRequest"
|
|
2454
|
+
$ref: "#/components/schemas/AgentSkillRead"
|
|
2481
2455
|
"401":
|
|
2482
2456
|
$ref: "#/components/responses/Unauthorized"
|
|
2483
2457
|
"404":
|
|
2484
2458
|
$ref: "#/components/responses/NotFound"
|
|
2485
2459
|
"500":
|
|
2486
2460
|
$ref: "#/components/responses/InternalServerError"
|
|
2487
|
-
"501":
|
|
2488
|
-
$ref: "#/components/responses/NotImplemented"
|
|
2489
2461
|
"503":
|
|
2490
2462
|
$ref: "#/components/responses/ServiceUnavailable"
|
|
2491
2463
|
|
|
2492
|
-
|
|
2464
|
+
# ── DEPRECATED ──────────────────────────────────────────────────────────
|
|
2465
|
+
# The `…/dashboards*` and `…/notebooks*` routes, kept for clients that still
|
|
2466
|
+
# read them, until a later release removes them. Use `…/reports*` above.
|
|
2467
|
+
# Their schemas (`Dashboard`, `DashboardManifest`, `DashboardTile`,
|
|
2468
|
+
# `Notebook`, `RawNotebook`) are in the deprecated section of the schemas;
|
|
2469
|
+
# no report schema references them.
|
|
2470
|
+
/environments/{environmentName}/packages/{packageName}/dashboards:
|
|
2493
2471
|
get:
|
|
2494
2472
|
tags:
|
|
2495
|
-
-
|
|
2496
|
-
operationId:
|
|
2497
|
-
|
|
2473
|
+
- dashboards
|
|
2474
|
+
operationId: list-dashboards
|
|
2475
|
+
deprecated: true
|
|
2476
|
+
summary: List package dashboards (deprecated; use list-reports)
|
|
2498
2477
|
description: |
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2478
|
+
**DEPRECATED**: use list-reports, which lists every report of either
|
|
2479
|
+
layout by path. This route lists the package's grid reports (see
|
|
2480
|
+
list-reports for what makes a file a report and which layout it has),
|
|
2481
|
+
wherever they live in the package. Two may share a `name`; their `path`
|
|
2482
|
+
tells them apart. A file with no artifact tag is an ordinary model and is
|
|
2483
|
+
not listed, whether or not it compiles.
|
|
2484
|
+
|
|
2485
|
+
**Contract change since reports.** This route used to list only
|
|
2486
|
+
`.malloy` files directly under `dashboards/`, so every `name` was unique
|
|
2487
|
+
and every `path` was `dashboards/<name>.malloy`. It now lists grid
|
|
2488
|
+
reports from anywhere in the package (`sales/q3.malloy`,
|
|
2489
|
+
`notebooks/x.malloy`, `a/b/c.malloy`), so `path` may have any depth and
|
|
2490
|
+
`name` may repeat. Key on `path`.
|
|
2502
2491
|
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2492
|
+
A tagged dashboard that failed to compile is listed carrying its
|
|
2493
|
+
`error` where that state can arise at all, so a broken dashboard is
|
|
2494
|
+
visibly broken rather than silently absent. In practice it rarely does:
|
|
2495
|
+
a package whose model fails to compile is not loaded, and a reload that
|
|
2496
|
+
would break one is refused and leaves the previously loaded package
|
|
2497
|
+
serving, so `error` is only reachable on the paths that keep per-model
|
|
2498
|
+
placeholders. Treat it as present-but-uncommon rather than the normal
|
|
2499
|
+
way a broken dashboard surfaces.
|
|
2500
|
+
|
|
2501
|
+
Every tagged dashboard is listed, whatever the package's surface. To
|
|
2502
|
+
hide one, remove its `# artifact` tag. On a package with a surface (a
|
|
2503
|
+
root `index.malloy`, or a legacy `explores`) with `queryableSources`
|
|
2504
|
+
left at `"declared"`, a dashboard's tiles, its single query and its
|
|
2505
|
+
filter `suggest` queries may read only sources the surface exports. A
|
|
2506
|
+
source the dashboard declares on top of a surface source may be read;
|
|
2507
|
+
one over a hidden source may not. The dashboard file's own
|
|
2508
|
+
`export {}` and named queries add nothing to the surface. A tile over a
|
|
2509
|
+
hidden source answers 404 when it runs, and the package's `warnings`
|
|
2510
|
+
report each such tile, single query and suggest, with severity
|
|
2511
|
+
`error`, as of the last load, naming the source and the fix. Under
|
|
2512
|
+
`"all"` nothing is refused, so the situation does not arise.
|
|
2513
|
+
parameters:
|
|
2514
|
+
- name: environmentName
|
|
2515
|
+
in: path
|
|
2516
|
+
description: Name of the environment
|
|
2517
|
+
required: true
|
|
2518
|
+
schema:
|
|
2519
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2520
|
+
- name: packageName
|
|
2521
|
+
in: path
|
|
2522
|
+
description: Name of the package
|
|
2523
|
+
required: true
|
|
2524
|
+
schema:
|
|
2525
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2526
|
+
- name: versionId
|
|
2527
|
+
in: query
|
|
2528
|
+
description: Version identifier for the package
|
|
2529
|
+
required: false
|
|
2530
|
+
schema:
|
|
2531
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2532
|
+
responses:
|
|
2533
|
+
"200":
|
|
2534
|
+
description: A list of dashboards in the package
|
|
2535
|
+
content:
|
|
2536
|
+
application/json:
|
|
2537
|
+
schema:
|
|
2538
|
+
type: array
|
|
2539
|
+
items:
|
|
2540
|
+
$ref: "#/components/schemas/Dashboard"
|
|
2541
|
+
"401":
|
|
2542
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2543
|
+
"404":
|
|
2544
|
+
$ref: "#/components/responses/NotFound"
|
|
2545
|
+
"500":
|
|
2546
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2547
|
+
"501":
|
|
2548
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2549
|
+
"503":
|
|
2550
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2551
|
+
|
|
2552
|
+
/environments/{environmentName}/packages/{packageName}/dashboards/{dashboardName}:
|
|
2553
|
+
get:
|
|
2554
|
+
tags:
|
|
2555
|
+
- dashboards
|
|
2556
|
+
operationId: get-dashboard
|
|
2557
|
+
deprecated: true
|
|
2558
|
+
summary: Get a dashboard manifest (deprecated; use get-report)
|
|
2559
|
+
description: |
|
|
2560
|
+
**DEPRECATED**: use get-report, which addresses a report by its path.
|
|
2561
|
+
Retrieves everything a viewer needs to render one grid report: the
|
|
2562
|
+
artifact tag's declarations plus the control contract derived from the
|
|
2563
|
+
givens its query references. Running it needs no further endpoint — its
|
|
2564
|
+
query, each tile, and each control's suggest query all run
|
|
2565
|
+
through the model query endpoint with `givens`, using the manifest's
|
|
2566
|
+
`path` as the model.
|
|
2567
|
+
|
|
2568
|
+
`dashboardName` is a basename, which is not an identity: it resolves
|
|
2569
|
+
only when exactly one grid report in the package has it. When several
|
|
2570
|
+
do, the answer is 409 naming every matching path; address the report
|
|
2571
|
+
by path with get-report instead.
|
|
2572
|
+
|
|
2573
|
+
**Contract change since reports.** This route never answered 409
|
|
2574
|
+
before: a dashboard lived directly under `dashboards/`, so its name was
|
|
2575
|
+
unique. A grid report may now live anywhere, two may share a basename,
|
|
2576
|
+
and a client of this route must handle 409. The match also covers grid
|
|
2577
|
+
reports outside `dashboards/`.
|
|
2578
|
+
parameters:
|
|
2579
|
+
- name: environmentName
|
|
2580
|
+
in: path
|
|
2581
|
+
description: Name of the environment
|
|
2582
|
+
required: true
|
|
2583
|
+
schema:
|
|
2584
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2585
|
+
- name: packageName
|
|
2586
|
+
in: path
|
|
2587
|
+
description: Name of the package
|
|
2588
|
+
required: true
|
|
2589
|
+
schema:
|
|
2590
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2591
|
+
- name: dashboardName
|
|
2592
|
+
in: path
|
|
2593
|
+
description: >-
|
|
2594
|
+
The report's name: its filename basename. Conventionally letters,
|
|
2595
|
+
digits, "-" and "_", and a package is warned when one of its
|
|
2596
|
+
grid reports falls outside that. It is NOT constrained to it, because
|
|
2597
|
+
the name comes from a filename rather than being chosen: a file such
|
|
2598
|
+
as `v1.2.malloy` is served, and its published `resource`
|
|
2599
|
+
carries the name percent-encoded. Send it percent-encoded.
|
|
2600
|
+
required: true
|
|
2601
|
+
schema:
|
|
2602
|
+
type: string
|
|
2603
|
+
minLength: 1
|
|
2604
|
+
- name: versionId
|
|
2605
|
+
in: query
|
|
2606
|
+
description: Version identifier for the package
|
|
2607
|
+
required: false
|
|
2608
|
+
schema:
|
|
2609
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2610
|
+
responses:
|
|
2611
|
+
"200":
|
|
2612
|
+
description: The dashboard manifest
|
|
2613
|
+
content:
|
|
2614
|
+
application/json:
|
|
2615
|
+
schema:
|
|
2616
|
+
$ref: "#/components/schemas/DashboardManifest"
|
|
2617
|
+
"401":
|
|
2618
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2619
|
+
"404":
|
|
2620
|
+
$ref: "#/components/responses/NotFound"
|
|
2621
|
+
"409":
|
|
2622
|
+
description:
|
|
2623
|
+
More than one grid report in the package has this basename. The
|
|
2624
|
+
message names every matching path; use get-report with one.
|
|
2625
|
+
content:
|
|
2626
|
+
application/json:
|
|
2627
|
+
schema:
|
|
2628
|
+
$ref: "#/components/schemas/Error"
|
|
2629
|
+
"500":
|
|
2630
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2631
|
+
"501":
|
|
2632
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2633
|
+
"503":
|
|
2634
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2635
|
+
|
|
2636
|
+
/environments/{environmentName}/packages/{packageName}/notebooks:
|
|
2637
|
+
get:
|
|
2638
|
+
tags:
|
|
2639
|
+
- notebooks
|
|
2640
|
+
operationId: list-notebooks
|
|
2641
|
+
deprecated: true
|
|
2642
|
+
summary: List package notebooks (deprecated; use list-reports)
|
|
2643
|
+
description: |
|
|
2644
|
+
**DEPRECATED**: use list-reports. Lists the package's linear reports (see
|
|
2645
|
+
list-reports): every `.malloynb` file outside `public/`, and every tagged
|
|
2646
|
+
`.malloy` report whose layout is linear, wherever it lives. Each entry
|
|
2647
|
+
includes the relative path, package name, title, description, and any
|
|
2648
|
+
compilation or reading error.
|
|
2649
|
+
|
|
2650
|
+
**Contract change since reports.** This route used to list `.malloy`
|
|
2651
|
+
notebooks only directly under `notebooks/`. It now lists linear reports
|
|
2652
|
+
from anywhere in the package, including `dashboards/` and nested
|
|
2653
|
+
directories, and no longer lists a kindless tiled file in `notebooks/`,
|
|
2654
|
+
which is now grid.
|
|
2655
|
+
parameters:
|
|
2656
|
+
- name: environmentName
|
|
2657
|
+
in: path
|
|
2658
|
+
description: Name of the environment
|
|
2659
|
+
required: true
|
|
2660
|
+
schema:
|
|
2661
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2662
|
+
- name: packageName
|
|
2663
|
+
in: path
|
|
2664
|
+
description: Name of the package
|
|
2665
|
+
required: true
|
|
2666
|
+
schema:
|
|
2667
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2668
|
+
- name: versionId
|
|
2669
|
+
in: query
|
|
2670
|
+
description: Version identifier for the package
|
|
2671
|
+
required: false
|
|
2672
|
+
schema:
|
|
2673
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2674
|
+
responses:
|
|
2675
|
+
"200":
|
|
2676
|
+
description: A list of notebooks in the package
|
|
2677
|
+
content:
|
|
2678
|
+
application/json:
|
|
2679
|
+
schema:
|
|
2680
|
+
type: array
|
|
2681
|
+
items:
|
|
2682
|
+
$ref: "#/components/schemas/Notebook"
|
|
2683
|
+
"401":
|
|
2684
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2685
|
+
"404":
|
|
2686
|
+
$ref: "#/components/responses/NotFound"
|
|
2687
|
+
"500":
|
|
2688
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2689
|
+
"501":
|
|
2690
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2691
|
+
"503":
|
|
2692
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2693
|
+
|
|
2694
|
+
/environments/{environmentName}/packages/{packageName}/notebooks/{path}:
|
|
2695
|
+
get:
|
|
2696
|
+
tags:
|
|
2697
|
+
- notebooks
|
|
2698
|
+
operationId: get-notebook
|
|
2699
|
+
deprecated: true
|
|
2700
|
+
summary: Get Malloy notebook cells (deprecated; use get-report)
|
|
2701
|
+
description: |
|
|
2702
|
+
**DEPRECATED**: use get-report. Retrieves a linear report with its raw
|
|
2703
|
+
cell contents (markdown and code). A `.malloy` report's cells run
|
|
2704
|
+
through the model query endpoint (each cell's `text` as the query); a
|
|
2705
|
+
`.malloynb`'s through execute-notebook-cell. A linear `.malloy`
|
|
2706
|
+
report, wherever it lives, answers here as well as a `.malloynb`.
|
|
2707
|
+
On a package with a surface, the response shows only the sources the notebook may read.
|
|
2708
|
+
parameters:
|
|
2709
|
+
- name: environmentName
|
|
2710
|
+
in: path
|
|
2711
|
+
description: Name of the environment
|
|
2712
|
+
required: true
|
|
2713
|
+
schema:
|
|
2714
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2715
|
+
- name: packageName
|
|
2716
|
+
in: path
|
|
2717
|
+
description: Name of the package
|
|
2718
|
+
required: true
|
|
2719
|
+
schema:
|
|
2720
|
+
type: string
|
|
2721
|
+
- name: path
|
|
2722
|
+
in: path
|
|
2723
|
+
description: Path to notebook within the package.
|
|
2724
|
+
required: true
|
|
2725
|
+
schema:
|
|
2726
|
+
type: string
|
|
2727
|
+
- name: versionId
|
|
2728
|
+
in: query
|
|
2729
|
+
description: Version identifier for the package
|
|
2730
|
+
required: false
|
|
2731
|
+
schema:
|
|
2732
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2733
|
+
responses:
|
|
2734
|
+
"200":
|
|
2735
|
+
description: A Malloy notebook with raw cell contents.
|
|
2736
|
+
content:
|
|
2737
|
+
"application/json":
|
|
2738
|
+
schema:
|
|
2739
|
+
$ref: "#/components/schemas/RawNotebook"
|
|
2740
|
+
"401":
|
|
2741
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2742
|
+
"404":
|
|
2743
|
+
$ref: "#/components/responses/NotFound"
|
|
2744
|
+
"500":
|
|
2745
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2746
|
+
"501":
|
|
2747
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2748
|
+
|
|
2749
|
+
/environments/{environmentName}/packages/{packageName}/notebooks/{path}/cells/{cellIndex}:
|
|
2750
|
+
get:
|
|
2751
|
+
tags:
|
|
2752
|
+
- notebooks
|
|
2753
|
+
operationId: execute-notebook-cell
|
|
2754
|
+
deprecated: true
|
|
2755
|
+
summary: Execute a specific notebook cell (deprecated)
|
|
2756
|
+
description: |
|
|
2757
|
+
**DEPRECATED**: removed with the other notebook routes. For a `.malloy`
|
|
2758
|
+
report, run a cell through the model query endpoint instead: the
|
|
2759
|
+
report's path as the model, the cell's `text` (from get-report) as
|
|
2760
|
+
`query`, and `givens` in the body, which applies the same surface,
|
|
2761
|
+
`#(authorize)` and row-level gates. A `.malloynb` has no other route.
|
|
2762
|
+
Executes a specific cell in a linear report by index.
|
|
2763
|
+
For code cells, this compiles and runs the Malloy code, returning query
|
|
2764
|
+
results and any new sources defined. For markdown cells, this simply
|
|
2765
|
+
returns the cell content. A linear `.malloy` report, wherever it lives,
|
|
2766
|
+
answers here as well as a `.malloynb`.
|
|
2767
|
+
|
|
2768
|
+
On a package with a surface (a root `index.malloy`, or a legacy `explores`) with
|
|
2769
|
+
`queryableSources` left at `"declared"`, a code cell may read only sources the surface
|
|
2770
|
+
exports. A cell over a hidden source answers 404, and 404 rather than 403 even when the
|
|
2771
|
+
source is also `#(authorize)`-gated. A source an earlier cell declares on top of a
|
|
2772
|
+
published source still works. A cell's own source over a raw table (`duckdb.table(...)`
|
|
2773
|
+
or `.sql(...)`) has no published source under it, so it is refused. The response shows
|
|
2774
|
+
only the sources the notebook may read.
|
|
2775
|
+
parameters:
|
|
2776
|
+
- name: environmentName
|
|
2777
|
+
in: path
|
|
2778
|
+
description: Name of the environment
|
|
2779
|
+
required: true
|
|
2780
|
+
schema:
|
|
2781
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2782
|
+
- name: packageName
|
|
2783
|
+
in: path
|
|
2784
|
+
description: Name of the package
|
|
2785
|
+
required: true
|
|
2786
|
+
schema:
|
|
2787
|
+
type: string
|
|
2788
|
+
- name: path
|
|
2789
|
+
in: path
|
|
2790
|
+
description: Path to notebook within the package
|
|
2791
|
+
required: true
|
|
2792
|
+
schema:
|
|
2793
|
+
type: string
|
|
2794
|
+
- name: cellIndex
|
|
2795
|
+
in: path
|
|
2796
|
+
description: Index of the cell to execute (0-based)
|
|
2797
|
+
required: true
|
|
2798
|
+
schema:
|
|
2799
|
+
type: integer
|
|
2800
|
+
- name: versionId
|
|
2801
|
+
in: query
|
|
2802
|
+
description: Version identifier for the package
|
|
2803
|
+
required: false
|
|
2804
|
+
schema:
|
|
2805
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2806
|
+
- name: filter_params
|
|
2807
|
+
in: query
|
|
2808
|
+
deprecated: true
|
|
2809
|
+
description: |
|
|
2810
|
+
**DEPRECATED**: Use `givens` (native Malloy runtime parameters) instead.
|
|
2811
|
+
Targets the deprecated `#(filter)` annotation path. See docs/givens.md
|
|
2812
|
+
for migration recipes.
|
|
2813
|
+
|
|
2814
|
+
JSON-encoded filter parameter values keyed by filter name.
|
|
2815
|
+
required: false
|
|
2816
|
+
schema:
|
|
2817
|
+
type: string
|
|
2818
|
+
- name: bypass_filters
|
|
2819
|
+
in: query
|
|
2820
|
+
deprecated: true
|
|
2821
|
+
description: |
|
|
2822
|
+
**DEPRECATED**: Use `givens` (native Malloy runtime parameters) instead.
|
|
2823
|
+
See docs/givens.md for migration recipes.
|
|
2824
|
+
|
|
2825
|
+
When true, skip filter injection entirely.
|
|
2826
|
+
required: false
|
|
2827
|
+
schema:
|
|
2828
|
+
type: string
|
|
2829
|
+
enum:
|
|
2830
|
+
- "true"
|
|
2831
|
+
- "false"
|
|
2832
|
+
- name: givens
|
|
2833
|
+
in: query
|
|
2834
|
+
description:
|
|
2835
|
+
A `GivenValues` object, JSON-encoded so it can travel in a query
|
|
2836
|
+
string. Values are typed as `GivenValues` describes them, not
|
|
2837
|
+
string-encoded as `EncodedGivenValues` would be. The parameter keeps
|
|
2838
|
+
its name for compatibility; the schema it carries is the one named
|
|
2839
|
+
here.
|
|
2840
|
+
required: false
|
|
2841
|
+
schema:
|
|
2842
|
+
type: string
|
|
2843
|
+
responses:
|
|
2844
|
+
"200":
|
|
2845
|
+
description: Cell execution result
|
|
2846
|
+
content:
|
|
2847
|
+
"application/json":
|
|
2848
|
+
schema:
|
|
2849
|
+
$ref: "#/components/schemas/NotebookCellResult"
|
|
2850
|
+
"400":
|
|
2851
|
+
$ref: "#/components/responses/BadRequest"
|
|
2852
|
+
"401":
|
|
2853
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2854
|
+
"403":
|
|
2855
|
+
$ref: "#/components/responses/Forbidden"
|
|
2856
|
+
"404":
|
|
2857
|
+
$ref: "#/components/responses/NotFound"
|
|
2858
|
+
"413":
|
|
2859
|
+
$ref: "#/components/responses/PayloadTooLarge"
|
|
2860
|
+
"500":
|
|
2861
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2862
|
+
"501":
|
|
2863
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2864
|
+
"424":
|
|
2865
|
+
$ref: "#/components/responses/ConnectionUnavailable"
|
|
2866
|
+
"502":
|
|
2867
|
+
$ref: "#/components/responses/DatabaseUnreachable"
|
|
2868
|
+
"503":
|
|
2869
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2870
|
+
"504":
|
|
2871
|
+
$ref: "#/components/responses/GatewayTimeout"
|
|
2872
|
+
|
|
2873
|
+
/environments/{environmentName}/packages/{packageName}/databases:
|
|
2874
|
+
get:
|
|
2875
|
+
tags:
|
|
2876
|
+
- databases
|
|
2877
|
+
operationId: list-databases
|
|
2878
|
+
summary: List embedded databases
|
|
2879
|
+
description: |
|
|
2880
|
+
Retrieves a list of all embedded databases within the specified package. These are typically
|
|
2881
|
+
local data files read by DuckDB in place (.parquet, .csv, and .xlsx) that provide local data
|
|
2882
|
+
storage for the package. Each database entry includes metadata about the database structure and content.
|
|
2883
|
+
parameters:
|
|
2884
|
+
- name: environmentName
|
|
2885
|
+
in: path
|
|
2886
|
+
description: Name of the environment
|
|
2887
|
+
required: true
|
|
2888
|
+
schema:
|
|
2889
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2890
|
+
- name: packageName
|
|
2891
|
+
in: path
|
|
2892
|
+
description: Name of the package
|
|
2893
|
+
required: true
|
|
2894
|
+
schema:
|
|
2895
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2896
|
+
- name: versionId
|
|
2897
|
+
in: query
|
|
2898
|
+
description: Version identifier for the package
|
|
2899
|
+
required: false
|
|
2900
|
+
schema:
|
|
2901
|
+
$ref: "#/components/schemas/VersionIdPattern"
|
|
2902
|
+
responses:
|
|
2903
|
+
"200":
|
|
2904
|
+
description: A list of embedded databases in the package
|
|
2905
|
+
content:
|
|
2906
|
+
application/json:
|
|
2907
|
+
schema:
|
|
2908
|
+
type: array
|
|
2909
|
+
items:
|
|
2910
|
+
$ref: "#/components/schemas/Database"
|
|
2911
|
+
"401":
|
|
2912
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2913
|
+
"404":
|
|
2914
|
+
$ref: "#/components/responses/NotFound"
|
|
2915
|
+
"500":
|
|
2916
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2917
|
+
"501":
|
|
2918
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2919
|
+
"503":
|
|
2920
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2921
|
+
|
|
2922
|
+
/environments/{environmentName}/packages/{packageName}/data-apps:
|
|
2923
|
+
get:
|
|
2924
|
+
tags:
|
|
2925
|
+
- data-apps
|
|
2926
|
+
operationId: list-data-apps
|
|
2927
|
+
summary: List package data apps
|
|
2928
|
+
description: |
|
|
2929
|
+
Retrieves a list of all in-package HTML data apps (static pages served
|
|
2930
|
+
from the package's public/ directory) within the specified package. Each
|
|
2931
|
+
entry includes the relative path, the package name, a canonical resource
|
|
2932
|
+
URL, and the title (extracted from the file's <title> tag, falling back
|
|
2933
|
+
to the path). Used by the Publisher SPA to surface a clickable "Data
|
|
2934
|
+
Apps" section on the package detail view, and by anyone who wants to
|
|
2935
|
+
discover a package's data apps programmatically without scraping the
|
|
2936
|
+
directory. Recursive depth is capped server-side to keep this cheap on
|
|
2937
|
+
large packages.
|
|
2938
|
+
parameters:
|
|
2939
|
+
- name: environmentName
|
|
2940
|
+
in: path
|
|
2941
|
+
description: Name of the environment
|
|
2942
|
+
required: true
|
|
2943
|
+
schema:
|
|
2944
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2945
|
+
- name: packageName
|
|
2946
|
+
in: path
|
|
2947
|
+
description: Name of the package
|
|
2948
|
+
required: true
|
|
2949
|
+
schema:
|
|
2950
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2951
|
+
responses:
|
|
2952
|
+
"200":
|
|
2953
|
+
description: A list of data apps in the package
|
|
2954
|
+
content:
|
|
2955
|
+
application/json:
|
|
2956
|
+
schema:
|
|
2957
|
+
type: array
|
|
2958
|
+
items:
|
|
2959
|
+
$ref: "#/components/schemas/DataApp"
|
|
2960
|
+
"400":
|
|
2961
|
+
$ref: "#/components/responses/BadRequest"
|
|
2962
|
+
"401":
|
|
2963
|
+
$ref: "#/components/responses/Unauthorized"
|
|
2964
|
+
"404":
|
|
2965
|
+
$ref: "#/components/responses/NotFound"
|
|
2966
|
+
"500":
|
|
2967
|
+
$ref: "#/components/responses/InternalServerError"
|
|
2968
|
+
"501":
|
|
2969
|
+
$ref: "#/components/responses/NotImplemented"
|
|
2970
|
+
"503":
|
|
2971
|
+
$ref: "#/components/responses/ServiceUnavailable"
|
|
2972
|
+
|
|
2973
|
+
/environments/{environmentName}/packages/{packageName}/events:
|
|
2974
|
+
get:
|
|
2975
|
+
tags:
|
|
2976
|
+
- watch-mode
|
|
2977
|
+
operationId: stream-package-events
|
|
2978
|
+
summary: Stream package change events (SSE)
|
|
2979
|
+
description: |
|
|
2980
|
+
Opens a Server-Sent Events (SSE) stream of file-change events for the
|
|
2981
|
+
package, used by in-package HTML data apps (via the publisher.js
|
|
2982
|
+
runtime) to live-reload when their sources are edited.
|
|
2983
|
+
|
|
2984
|
+
This is a long-lived `text/event-stream` connection, not a JSON
|
|
2985
|
+
endpoint, and is therefore not surfaced through the generated API
|
|
2986
|
+
clients — consume it with an `EventSource`. The stream emits:
|
|
2987
|
+
- `event: hello` (`data: connected`) once on connect.
|
|
2988
|
+
- `event: mode` (`data: enabled|disabled`) reporting whether watch
|
|
2989
|
+
mode is currently active for the environment. When `disabled`, no
|
|
2990
|
+
`changed` events will follow until watch mode is started.
|
|
2991
|
+
- `event: changed` (`data: changed`) each time a watched file in the
|
|
2992
|
+
package changes.
|
|
2993
|
+
- periodic `: heartbeat` comments to keep idle proxies from closing
|
|
2994
|
+
the connection.
|
|
2995
|
+
parameters:
|
|
2996
|
+
- name: environmentName
|
|
2997
|
+
in: path
|
|
2998
|
+
description: Name of the environment
|
|
2999
|
+
required: true
|
|
3000
|
+
schema:
|
|
3001
|
+
$ref: "#/components/schemas/IdentifierPattern"
|
|
2521
3002
|
- name: packageName
|
|
2522
3003
|
in: path
|
|
2523
3004
|
description: Name of the package
|
|
@@ -3394,11 +3875,11 @@ components:
|
|
|
3394
3875
|
paths relative to the package root. Only these models are listed
|
|
3395
3876
|
via `listModels()`, and the surface is the union of their
|
|
3396
3877
|
`export {}` closures. Every other .malloy file still compiles for
|
|
3397
|
-
import/join resolution but is hidden.
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
is listed is an ordinary surface file.
|
|
3878
|
+
import/join resolution but is hidden. Reports are always listed
|
|
3879
|
+
regardless of this field, and a report needs no listing: a report
|
|
3880
|
+
listed here reads the surface and adds nothing to it, and the
|
|
3881
|
+
package warns about it (`report-on-surface`). An untagged file
|
|
3882
|
+
that is listed is an ordinary surface file, wherever it lives.
|
|
3402
3883
|
DEPRECATED, still honored. Every non-empty value gets a load
|
|
3403
3884
|
warning naming the replacement: a root `index.malloy` that imports
|
|
3404
3885
|
the listed files and exports what they publish. `[]` is deprecated
|
|
@@ -3457,23 +3938,28 @@ components:
|
|
|
3457
3938
|
`queryableSources: "declared"`, and a root file such as
|
|
3458
3939
|
`Index.malloy` that differs from `index.malloy` only in case and
|
|
3459
3940
|
so is ignored. A root `index.malloy` with no manifest keys gets no
|
|
3460
|
-
warning.
|
|
3461
|
-
|
|
3462
|
-
describe a
|
|
3463
|
-
a `# drill` naming a destination that is not a
|
|
3464
|
-
tile, single query or filter suggest that reads a
|
|
3465
|
-
surface does not export, so it won't load.
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3941
|
+
warning. Report findings (one lint pass per report, of either
|
|
3942
|
+
layout, wherever it lives): a file whose artifact tag does not
|
|
3943
|
+
parse or does not describe a report, a tile or suggest query that
|
|
3944
|
+
does not resolve, a `# drill` naming a destination that is not a
|
|
3945
|
+
report, and a tile, single query or filter suggest that reads a
|
|
3946
|
+
source the surface does not export, so it won't load. A `# drill`
|
|
3947
|
+
destination is a path from the package root (a bare name is a file
|
|
3948
|
+
at the root); one that names no report is unresolved (`error`).
|
|
3949
|
+
Curation findings: a root `index.malloy` carrying an artifact tag,
|
|
3950
|
+
which is ignored (`index-is-not-a-report`, `error`); and a report
|
|
3951
|
+
that `index.malloy` imports or `explores` lists
|
|
3952
|
+
(`report-on-surface`, `warn`). Two report findings are about
|
|
3953
|
+
Publisher rather than about the package: one when a file carrying
|
|
3954
|
+
an artifact tag could not be read and so is not served at all, and
|
|
3955
|
+
one when the lint stops early, in which case the list must be read
|
|
3956
|
+
as incomplete rather than as a clean package. A linear report whose
|
|
3957
|
+
cells could not be read gets a finding that names the line and the
|
|
3958
|
+
fix and is reported with severity `error`, because it is served
|
|
3959
|
+
with that error instead of opening. The per-file report findings
|
|
3960
|
+
each name their line and the fix and carry a `code`; they are
|
|
3961
|
+
computed at discovery and are also returned by `/compile` at file
|
|
3962
|
+
and package scope. Eight codes are `error` and fail `/compile`:
|
|
3477
3963
|
`notebook-statement-above-artifact` and `notebook-tag-above-artifact`
|
|
3478
3964
|
(a statement or a tag above a served notebook's `## artifact`),
|
|
3479
3965
|
`notebook-markdown-above-artifact` (a `(markdown)` annotation above
|
|
@@ -3484,9 +3970,21 @@ components:
|
|
|
3484
3970
|
`notebook-markdown-attached-nowhere` (a `#(markdown)` annotation
|
|
3485
3971
|
with no statement to take it), `notebook-artifact-unparsed` (an
|
|
3486
3972
|
`## artifact` tag does not parse), and `notebook-cells-unreadable`
|
|
3487
|
-
(the reader could not read a
|
|
3488
|
-
`
|
|
3489
|
-
|
|
3973
|
+
(the reader could not read a linear report's cells), plus
|
|
3974
|
+
`report-kind-removed` (a tag that sets `kind=`, which is no longer
|
|
3975
|
+
read, so the file is not a report; the finding names the `layout=`
|
|
3976
|
+
to write) and `report-layout-unknown` (a `layout=` other than
|
|
3977
|
+
`grid` or `linear`). The rest are `warn` (a mistyped `(markdown)`
|
|
3978
|
+
opener, `report-layout-implicit` for a tag that names no layout and lists
|
|
3979
|
+
no tiles, a block that never closes, and similar).
|
|
3980
|
+
Skill and agent findings, all `warn`: a package skill under
|
|
3981
|
+
`skills/` that is not served (unreadable or linked-out `SKILL.md`,
|
|
3982
|
+
a frontmatter `name` that is not its directory name, a `skills/`
|
|
3983
|
+
directory that links out of the package) or served with a gap (no
|
|
3984
|
+
`description`, a `reference/` that cannot be listed or read); and
|
|
3985
|
+
each agent the manifest declares that is not served, or is served
|
|
3986
|
+
with a finding (an agent skill with no `description`, a skills
|
|
3987
|
+
directory with no skills, an unreadable reference).
|
|
3490
3988
|
Deprecated-format findings, all `warn`: each `.malloynb` notebook
|
|
3491
3989
|
(`model` is its path), and each source a file declares deprecated
|
|
3492
3990
|
`#(filter)` annotations on (`model` is that file, `subject` the
|
|
@@ -3582,8 +4080,8 @@ components:
|
|
|
3582
4080
|
description: >-
|
|
3583
4081
|
What the finding is about: the query or view a render finding
|
|
3584
4082
|
sits on (`by_carrier`, `flights -> by_carrier`), the source a
|
|
3585
|
-
materialization finding belongs to, or, for a
|
|
3586
|
-
finding, the
|
|
4083
|
+
materialization finding belongs to, or, for a report
|
|
4084
|
+
finding, the report's name or the `source.dimension` a
|
|
3587
4085
|
`# drill` is declared on. Absent when a finding sits on none
|
|
3588
4086
|
of those, either because it spans several, in which case the
|
|
3589
4087
|
message names them, or because it is about the lint itself
|
|
@@ -3591,13 +4089,33 @@ components:
|
|
|
3591
4089
|
message:
|
|
3592
4090
|
type: string
|
|
3593
4091
|
description: A description of the problem.
|
|
4092
|
+
code:
|
|
4093
|
+
type: string
|
|
4094
|
+
description: >-
|
|
4095
|
+
A stable identifier for the finding's family, for a client that
|
|
4096
|
+
acts on it rather than only showing it; absent for a family that
|
|
4097
|
+
has none yet. `deprecated-malloynb-notebook`: a `.malloynb`
|
|
4098
|
+
notebook, the deprecated cell format (one per file, `model`
|
|
4099
|
+
naming it). `deprecated-filter-annotation`: a source declaring
|
|
4100
|
+
deprecated `#(filter)` annotations (one per declaring source,
|
|
4101
|
+
`model` naming its file and `subject` the source).
|
|
4102
|
+
`report-name-ambiguous`: two or more grid reports share a
|
|
4103
|
+
basename, so the deprecated `GET …/dashboards/{name}` route
|
|
4104
|
+
answers 409 for it (one per name, `subject` naming it and the
|
|
4105
|
+
message every path; `warn`). The per-file
|
|
4106
|
+
report findings (`notebook-…`, `report-…`) and the report
|
|
4107
|
+
curation findings (`report-on-surface`,
|
|
4108
|
+
`index-is-not-a-report`). The message wording may change; the
|
|
4109
|
+
code does not.
|
|
3594
4110
|
severity:
|
|
3595
4111
|
type: string
|
|
3596
4112
|
enum:
|
|
3597
4113
|
- error
|
|
3598
4114
|
- warn
|
|
3599
4115
|
description: >-
|
|
3600
|
-
Finding severity
|
|
4116
|
+
Finding severity, `error` or `warn` and nothing else; a
|
|
4117
|
+
deprecated form that still loads (such as
|
|
4118
|
+
`deprecated-malloynb-notebook`) is `warn`. Render-tag findings use both: `error` for
|
|
3601
4119
|
a tag malformed for the field it sits on, which renders as
|
|
3602
4120
|
"[object Object]" or an inline error at query time, and `warn`
|
|
3603
4121
|
for one that is well-formed but inert where it sits and so is
|
|
@@ -3905,10 +4423,242 @@ components:
|
|
|
3905
4423
|
- type: "null"
|
|
3906
4424
|
readOnly: true
|
|
3907
4425
|
description: >-
|
|
3908
|
-
Server-computed, read-only: the state of this package's semantic
|
|
3909
|
-
discovery index, which is what `get_context` ranks against
|
|
3910
|
-
when an embedding provider is configured. `status: lexical` when
|
|
3911
|
-
the server has no provider, because there is no index to describe.
|
|
4426
|
+
Server-computed, read-only: the state of this package's semantic
|
|
4427
|
+
discovery index, which is what `get_context` ranks against
|
|
4428
|
+
when an embedding provider is configured. `status: lexical` when
|
|
4429
|
+
the server has no provider, because there is no index to describe.
|
|
4430
|
+
servedRevision:
|
|
4431
|
+
type: string
|
|
4432
|
+
readOnly: true
|
|
4433
|
+
description: >-
|
|
4434
|
+
Server-computed, read-only: an identifier for the load that produced
|
|
4435
|
+
what this package is currently serving. Minted fresh per load, so
|
|
4436
|
+
two loads of byte-identical files carry different revisions. Use it
|
|
4437
|
+
to tell one load from another, NOT to tell whether content changed:
|
|
4438
|
+
it moves on every reload regardless. `sourceContentSha` answers that.
|
|
4439
|
+
sourceContentSha:
|
|
4440
|
+
type: string
|
|
4441
|
+
readOnly: true
|
|
4442
|
+
description: >-
|
|
4443
|
+
Server-computed, read-only: SHA-256 over the package-relative path
|
|
4444
|
+
and bytes of every file the package is serving: each model file,
|
|
4445
|
+
each package skill file under `skills/`, and, when the manifest
|
|
4446
|
+
declares `agents`, the canonical form of that `agents` object plus
|
|
4447
|
+
every instructions, task and skill file those agents read.
|
|
4448
|
+
|
|
4449
|
+
This is the reload receipt. Publisher serves a COPY of a package
|
|
4450
|
+
under `publisher_data/<env>/<pkg>/` unless the environment was
|
|
4451
|
+
started with `--watch-env`, so an edit to the original source
|
|
4452
|
+
directory reaches nothing and the reload still reports success.
|
|
4453
|
+
Comparing this value across a reload is what distinguishes "the
|
|
4454
|
+
server recompiled my edit" from "the server recompiled the same
|
|
4455
|
+
bytes it already had".
|
|
4456
|
+
|
|
4457
|
+
It covers EVERY model path in the package, so an edit to an imported
|
|
4458
|
+
file moves it where a hash of one model path would not. It covers
|
|
4459
|
+
nothing outside the list above: a data file, a `public/` asset, a
|
|
4460
|
+
`version` bump or any other key in publisher.json (`retrieval`,
|
|
4461
|
+
`explores`, `queryableSources`, `scope`) all leave it unchanged,
|
|
4462
|
+
although some of those do change what is served. An unchanged value
|
|
4463
|
+
therefore proves an edit to a hashed file did not reach the served
|
|
4464
|
+
copy, and says nothing about an edit to anything else.
|
|
4465
|
+
agents:
|
|
4466
|
+
type: array
|
|
4467
|
+
readOnly: true
|
|
4468
|
+
description: >-
|
|
4469
|
+
Server-computed, read-only: the agents this package's
|
|
4470
|
+
`publisher.json` declares and the server accepted, without their
|
|
4471
|
+
instructions. Absent when the manifest declares no `agents`. An
|
|
4472
|
+
agent that failed validation is left out and named in `warnings`.
|
|
4473
|
+
Fetch one with `GET .../agents/{agentName}`.
|
|
4474
|
+
items:
|
|
4475
|
+
$ref: "#/components/schemas/AgentSummary"
|
|
4476
|
+
|
|
4477
|
+
AgentSchedule:
|
|
4478
|
+
type: object
|
|
4479
|
+
readOnly: true
|
|
4480
|
+
description: >-
|
|
4481
|
+
A cron schedule an agent declares. Validated and exposed only: the
|
|
4482
|
+
server never runs it.
|
|
4483
|
+
properties:
|
|
4484
|
+
cron:
|
|
4485
|
+
type: string
|
|
4486
|
+
description: A 5-field UNIX cron expression, evaluated in UTC.
|
|
4487
|
+
task:
|
|
4488
|
+
type: string
|
|
4489
|
+
description: Package-relative path of the task file, as written in the manifest.
|
|
4490
|
+
taskContent:
|
|
4491
|
+
type: string
|
|
4492
|
+
description: >-
|
|
4493
|
+
The task file's Markdown. Only on the resolved agent, not the
|
|
4494
|
+
listing.
|
|
4495
|
+
|
|
4496
|
+
AgentSummary:
|
|
4497
|
+
type: object
|
|
4498
|
+
readOnly: true
|
|
4499
|
+
description: One agent a package declares, without its instructions or skills.
|
|
4500
|
+
properties:
|
|
4501
|
+
name:
|
|
4502
|
+
type: string
|
|
4503
|
+
description: The agent's name (its key in the manifest's `agents` object).
|
|
4504
|
+
description:
|
|
4505
|
+
type: string
|
|
4506
|
+
model:
|
|
4507
|
+
type: string
|
|
4508
|
+
description: The model the agent asks for; `inherit` when the manifest sets none.
|
|
4509
|
+
schedules:
|
|
4510
|
+
type: array
|
|
4511
|
+
items:
|
|
4512
|
+
$ref: "#/components/schemas/AgentSchedule"
|
|
4513
|
+
|
|
4514
|
+
AgentSkillFile:
|
|
4515
|
+
type: object
|
|
4516
|
+
readOnly: true
|
|
4517
|
+
description: >-
|
|
4518
|
+
One of an agent's skill files. The snake_case keys
|
|
4519
|
+
(`relative_filepath`, `file_contents`) mirror the MCP `get_agent` tool
|
|
4520
|
+
the shape is shared with, unlike the camelCase used elsewhere in this
|
|
4521
|
+
API.
|
|
4522
|
+
properties:
|
|
4523
|
+
relative_filepath:
|
|
4524
|
+
type: string
|
|
4525
|
+
description: >-
|
|
4526
|
+
Path relative to the agent's skills directory, for example
|
|
4527
|
+
`analyst-conventions/SKILL.md` or
|
|
4528
|
+
`analyst-conventions/reference/glossary.md`.
|
|
4529
|
+
file_contents:
|
|
4530
|
+
type: string
|
|
4531
|
+
description: >-
|
|
4532
|
+
A `SKILL.md` is re-emitted with only a quoted `name` and
|
|
4533
|
+
`description` in its frontmatter; reference files are served raw.
|
|
4534
|
+
Absent when the agent was fetched with `skills=summary`.
|
|
4535
|
+
name:
|
|
4536
|
+
type: string
|
|
4537
|
+
description: A `SKILL.md`'s name. Only in the `skills=summary` view.
|
|
4538
|
+
description:
|
|
4539
|
+
type: string
|
|
4540
|
+
description: A `SKILL.md`'s description. Only in the `skills=summary` view.
|
|
4541
|
+
bytes:
|
|
4542
|
+
type: integer
|
|
4543
|
+
description: Size of `file_contents` in UTF-8 bytes. Only in the `skills=summary` view.
|
|
4544
|
+
|
|
4545
|
+
AgentSkillRead:
|
|
4546
|
+
type: object
|
|
4547
|
+
readOnly: true
|
|
4548
|
+
description: One agent skill file, with the pin of the definition it belongs to.
|
|
4549
|
+
properties:
|
|
4550
|
+
relative_filepath:
|
|
4551
|
+
type: string
|
|
4552
|
+
file_contents:
|
|
4553
|
+
type: string
|
|
4554
|
+
source:
|
|
4555
|
+
$ref: "#/components/schemas/AgentSource"
|
|
4556
|
+
|
|
4557
|
+
AgentSource:
|
|
4558
|
+
type: object
|
|
4559
|
+
readOnly: true
|
|
4560
|
+
description: What a resolved agent was read from, so a runner can prove which bytes ran.
|
|
4561
|
+
properties:
|
|
4562
|
+
environment:
|
|
4563
|
+
type: string
|
|
4564
|
+
package:
|
|
4565
|
+
type: string
|
|
4566
|
+
sourceContentSha:
|
|
4567
|
+
type: string
|
|
4568
|
+
description: The package's `sourceContentSha` at the load this definition came from.
|
|
4569
|
+
definitionSha:
|
|
4570
|
+
type: string
|
|
4571
|
+
description: >-
|
|
4572
|
+
SHA-256 over this agent's canonical config, instructions, skill
|
|
4573
|
+
files and task files. Editing another agent, or a model, does not
|
|
4574
|
+
move it.
|
|
4575
|
+
servedRevision:
|
|
4576
|
+
type: string
|
|
4577
|
+
description: The package's `servedRevision` at the load this definition came from.
|
|
4578
|
+
|
|
4579
|
+
Agent:
|
|
4580
|
+
type: object
|
|
4581
|
+
readOnly: true
|
|
4582
|
+
description: >-
|
|
4583
|
+
An agent a package declares, resolved to its instructions, skill files
|
|
4584
|
+
and schedules. Adopt it only when the user asks for it by name.
|
|
4585
|
+
properties:
|
|
4586
|
+
name:
|
|
4587
|
+
type: string
|
|
4588
|
+
description:
|
|
4589
|
+
type: string
|
|
4590
|
+
model:
|
|
4591
|
+
type: string
|
|
4592
|
+
description: The model the agent asks for; `inherit` when the manifest sets none.
|
|
4593
|
+
instructions:
|
|
4594
|
+
type: string
|
|
4595
|
+
description: The instructions file's Markdown, at most 16 KB.
|
|
4596
|
+
skills:
|
|
4597
|
+
type: array
|
|
4598
|
+
description: The agent's own skill files, sorted by `relative_filepath`.
|
|
4599
|
+
items:
|
|
4600
|
+
$ref: "#/components/schemas/AgentSkillFile"
|
|
4601
|
+
schedules:
|
|
4602
|
+
type: array
|
|
4603
|
+
items:
|
|
4604
|
+
$ref: "#/components/schemas/AgentSchedule"
|
|
4605
|
+
warnings:
|
|
4606
|
+
type: array
|
|
4607
|
+
items:
|
|
4608
|
+
type: string
|
|
4609
|
+
source:
|
|
4610
|
+
$ref: "#/components/schemas/AgentSource"
|
|
4611
|
+
|
|
4612
|
+
SkillSummary:
|
|
4613
|
+
type: object
|
|
4614
|
+
readOnly: true
|
|
4615
|
+
description: >-
|
|
4616
|
+
One agent skill in force for a package, without its body. This is what
|
|
4617
|
+
a caller reads to decide which skill to fetch.
|
|
4618
|
+
properties:
|
|
4619
|
+
name:
|
|
4620
|
+
type: string
|
|
4621
|
+
description: >-
|
|
4622
|
+
The skill's name, and the identifier for fetching it. A name
|
|
4623
|
+
containing a slash (`<skill>/<stem>`) is one skill's on-demand
|
|
4624
|
+
reference file rather than a skill in its own right.
|
|
4625
|
+
description:
|
|
4626
|
+
type: string
|
|
4627
|
+
description: >-
|
|
4628
|
+
One line saying when to read this skill. Empty when the package
|
|
4629
|
+
author omitted it, which is also reported as a package warning.
|
|
4630
|
+
origin:
|
|
4631
|
+
type: string
|
|
4632
|
+
enum:
|
|
4633
|
+
- bundled
|
|
4634
|
+
- package
|
|
4635
|
+
description: >-
|
|
4636
|
+
`bundled` = shipped with this server. `package` = shipped by the
|
|
4637
|
+
package under `skills/`, which includes a package skill whose name
|
|
4638
|
+
matches a bundled one and therefore REPLACES it for this package.
|
|
4639
|
+
Present so a caller can tell a replaced skill from the original,
|
|
4640
|
+
which is otherwise invisible.
|
|
4641
|
+
|
|
4642
|
+
Skill:
|
|
4643
|
+
type: object
|
|
4644
|
+
readOnly: true
|
|
4645
|
+
description: An agent skill with its full Markdown body.
|
|
4646
|
+
properties:
|
|
4647
|
+
name:
|
|
4648
|
+
type: string
|
|
4649
|
+
description: The skill's name.
|
|
4650
|
+
description:
|
|
4651
|
+
type: string
|
|
4652
|
+
description: One line saying when to read this skill.
|
|
4653
|
+
content:
|
|
4654
|
+
type: string
|
|
4655
|
+
description: The skill's full guidance, Markdown.
|
|
4656
|
+
origin:
|
|
4657
|
+
type: string
|
|
4658
|
+
enum:
|
|
4659
|
+
- bundled
|
|
4660
|
+
- package
|
|
4661
|
+
description: Where this skill came from. See SkillSummary.origin.
|
|
3912
4662
|
|
|
3913
4663
|
PackageEmbeddingIndex:
|
|
3914
4664
|
type: object
|
|
@@ -4170,35 +4920,350 @@ components:
|
|
|
4170
4920
|
Declared query-time behavior when the freshness window is missed:
|
|
4171
4921
|
serve live, serve the stale table, or fail the query.
|
|
4172
4922
|
|
|
4173
|
-
Model:
|
|
4923
|
+
Model:
|
|
4924
|
+
type: object
|
|
4925
|
+
description: Malloy model metadata and status information
|
|
4926
|
+
properties:
|
|
4927
|
+
resource:
|
|
4928
|
+
type: string
|
|
4929
|
+
description: Resource path to the model
|
|
4930
|
+
packageName:
|
|
4931
|
+
type: string
|
|
4932
|
+
description: Name of the package containing this model
|
|
4933
|
+
path:
|
|
4934
|
+
type: string
|
|
4935
|
+
description: Relative path to the model file within its package directory
|
|
4936
|
+
isHidden:
|
|
4937
|
+
type: boolean
|
|
4938
|
+
description: |
|
|
4939
|
+
True for a file this route lists only because the request set
|
|
4940
|
+
`includeHiddenFilesAndSources`: a file the package's `index.malloy` (or a
|
|
4941
|
+
legacy `explores`) does not expose. False for every other file, so every
|
|
4942
|
+
entry is false without that option. It says whether the file is hidden, not
|
|
4943
|
+
whether a query can reach it: under `queryableSources: "all"` a hidden file
|
|
4944
|
+
can still be queried.
|
|
4945
|
+
error:
|
|
4946
|
+
type: string
|
|
4947
|
+
description: Error message if the model failed to compile or load
|
|
4948
|
+
|
|
4949
|
+
Report:
|
|
4950
|
+
type: object
|
|
4951
|
+
required: [resource, packageName, path, name, layout, title, editable]
|
|
4952
|
+
description: |
|
|
4953
|
+
One report in a package, as list-reports lists it: a `.malloy` file
|
|
4954
|
+
whose model-level `## artifact` tag makes it one, wherever it lives
|
|
4955
|
+
outside `public/`, or a `.malloynb`. See ReportManifest for the detail a viewer needs to render
|
|
4956
|
+
one.
|
|
4957
|
+
properties:
|
|
4958
|
+
resource:
|
|
4959
|
+
type: string
|
|
4960
|
+
description: Resource path to the report (get-report)
|
|
4961
|
+
packageName:
|
|
4962
|
+
type: string
|
|
4963
|
+
description: Name of the package containing this report
|
|
4964
|
+
path:
|
|
4965
|
+
type: string
|
|
4966
|
+
description: >-
|
|
4967
|
+
The report's path within its package, such as `sales/q3.malloy`.
|
|
4968
|
+
Its identity, and the only thing that addresses it.
|
|
4969
|
+
name:
|
|
4970
|
+
type: string
|
|
4971
|
+
description: >-
|
|
4972
|
+
The file's basename without its extension. A display label only:
|
|
4973
|
+
two reports in different directories may share it.
|
|
4974
|
+
layout:
|
|
4975
|
+
type: string
|
|
4976
|
+
enum: [grid, linear]
|
|
4977
|
+
description: >-
|
|
4978
|
+
How its tiles are placed: `linear` top to bottom, one column, or
|
|
4979
|
+
`grid` by `columns`, `colspan` and `break`. Decided by its tags (see
|
|
4980
|
+
list-reports), never by where the file lives.
|
|
4981
|
+
title:
|
|
4982
|
+
type: string
|
|
4983
|
+
description: >-
|
|
4984
|
+
Human title: the artifact tag's `title`, else the first line of the
|
|
4985
|
+
`"` notes above the tag, else,
|
|
4986
|
+
for a linear report, its first markdown heading, else `name`.
|
|
4987
|
+
description:
|
|
4988
|
+
type: string
|
|
4989
|
+
description: The report's doc comment, when it has one.
|
|
4990
|
+
editable:
|
|
4991
|
+
type: boolean
|
|
4992
|
+
description: >-
|
|
4993
|
+
Whether the builder opens it as it is: false for a `.malloynb` and
|
|
4994
|
+
for a linear report written as `run:` cells.
|
|
4995
|
+
error:
|
|
4996
|
+
type: string
|
|
4997
|
+
description: >-
|
|
4998
|
+
Error message when the report failed to compile, or its cells could
|
|
4999
|
+
not be read.
|
|
5000
|
+
|
|
5001
|
+
ReportManifest:
|
|
5002
|
+
description: |
|
|
5003
|
+
A `Report` plus what a viewer needs to draw it. A report written as
|
|
5004
|
+
tiles, of either layout, carries `tiles`, `dashboardColumns`,
|
|
5005
|
+
`startingGivens`, `autorun` and `givens`, whose tiles and suggest
|
|
5006
|
+
queries run through `POST …/models/{path}/query` with `givens`. A
|
|
5007
|
+
linear report written as `run:` cells, or a `.malloynb`, carries
|
|
5008
|
+
`notebook` instead.
|
|
5009
|
+
allOf:
|
|
5010
|
+
- $ref: "#/components/schemas/Report"
|
|
5011
|
+
- type: object
|
|
5012
|
+
properties:
|
|
5013
|
+
tiles:
|
|
5014
|
+
type: array
|
|
5015
|
+
description: >-
|
|
5016
|
+
The report's tiles, each run as its own query (or shown as text),
|
|
5017
|
+
in order. Absent on a `run:`-cell report.
|
|
5018
|
+
items:
|
|
5019
|
+
$ref: "#/components/schemas/ReportTile"
|
|
5020
|
+
dashboardColumns:
|
|
5021
|
+
type: integer
|
|
5022
|
+
description: >-
|
|
5023
|
+
Grid width, from the `# dashboard {columns=N}` tag beside the
|
|
5024
|
+
artifact tag. 1 on a linear report. Absent means the viewer's
|
|
5025
|
+
default.
|
|
5026
|
+
startingGivens:
|
|
5027
|
+
allOf:
|
|
5028
|
+
- $ref: "#/components/schemas/EncodedGivenValues"
|
|
5029
|
+
description: >-
|
|
5030
|
+
Starting values for controls, from the artifact tag. URL
|
|
5031
|
+
parameters override these.
|
|
5032
|
+
autorun:
|
|
5033
|
+
type: boolean
|
|
5034
|
+
description: >-
|
|
5035
|
+
False batches control changes behind an Apply button instead of
|
|
5036
|
+
re-running on every change. Defaults to true.
|
|
5037
|
+
givens:
|
|
5038
|
+
type: array
|
|
5039
|
+
description: >-
|
|
5040
|
+
The control row: one entry per given the report's tiles run with
|
|
5041
|
+
(less a given only a source's gate reads, which a host injects),
|
|
5042
|
+
widened to every given the entry file surfaces when a tile cannot be
|
|
5043
|
+
resolved (see `ReportTile.givenNames`). `default` is the value the
|
|
5044
|
+
query endpoint takes, not the Malloy literal: a `filter<…>` given
|
|
5045
|
+
declared `f'West'` publishes `West`.
|
|
5046
|
+
items:
|
|
5047
|
+
$ref: "#/components/schemas/Given"
|
|
5048
|
+
notebook:
|
|
5049
|
+
allOf:
|
|
5050
|
+
- $ref: "#/components/schemas/ReportCells"
|
|
5051
|
+
description: >-
|
|
5052
|
+
For a linear report written as `run:` cells, or a `.malloynb`: its
|
|
5053
|
+
cells and model. Run a `.malloy`
|
|
5054
|
+
report's cell through the model query endpoint, its `text` as
|
|
5055
|
+
`query`; a `.malloynb`'s with execute-notebook-cell. Absent on a
|
|
5056
|
+
report written as tiles, and on a
|
|
5057
|
+
report that failed to compile.
|
|
5058
|
+
|
|
5059
|
+
ReportTile:
|
|
5060
|
+
type: object
|
|
5061
|
+
description: >-
|
|
5062
|
+
One tile of a report. A `query` tile (the default) runs a query; a
|
|
5063
|
+
`text` tile shows markdown and runs nothing, so a caller that runs a
|
|
5064
|
+
report's tiles skips the ones with `kind` `text`.
|
|
5065
|
+
properties:
|
|
5066
|
+
kind:
|
|
5067
|
+
type: string
|
|
5068
|
+
enum: [query, text]
|
|
5069
|
+
description: >-
|
|
5070
|
+
`query` runs `query` through the model query endpoint; `text` shows
|
|
5071
|
+
`markdown`. Absent means `query`.
|
|
5072
|
+
name:
|
|
5073
|
+
type: string
|
|
5074
|
+
description: >-
|
|
5075
|
+
A text tile's name: the bare word in `tiles=[…]` and on its
|
|
5076
|
+
`##|(markdown) name` block. Absent on a query tile.
|
|
5077
|
+
markdown:
|
|
5078
|
+
type: string
|
|
5079
|
+
description: >-
|
|
5080
|
+
A text tile's body, the text of its `##|(markdown) name` block
|
|
5081
|
+
without the opener. Empty when the file has no such block. Absent on
|
|
5082
|
+
a query tile.
|
|
5083
|
+
query:
|
|
5084
|
+
type: string
|
|
5085
|
+
description: >-
|
|
5086
|
+
Absent on a text tile. The run expression exactly as written in `tiles=[…]`, for example
|
|
5087
|
+
"orders -> by_month". An EXPRESSION rather than a name, so it goes in
|
|
5088
|
+
the `query` field of a `POST …/models/{path}/query` body, prefixed
|
|
5089
|
+
with `run:`.
|
|
5090
|
+
restricted:
|
|
5091
|
+
type: boolean
|
|
5092
|
+
description: >-
|
|
5093
|
+
Set on a tile of a compiled document (`CompileResult.document`) whose
|
|
5094
|
+
source the caller may not read. The tile carries its `query` and
|
|
5095
|
+
nothing derived from the source: no `givenNames`, no layout tags.
|
|
5096
|
+
givenNames:
|
|
5097
|
+
type: array
|
|
5098
|
+
items:
|
|
5099
|
+
type: string
|
|
5100
|
+
description: |
|
|
5101
|
+
Names of the givens this tile's compiled query reads: through its
|
|
5102
|
+
view, its source's `where:`, a joined source's `where:`, a
|
|
5103
|
+
dimension or measure it uses, and its source's `#(authorize)` and
|
|
5104
|
+
`#(access_filter)` gates. A control not listed does not change the
|
|
5105
|
+
tile, which is what a viewer's "Doesn't respond to" chip says. It
|
|
5106
|
+
also tells a caller which tiles a changed control needs to re-run;
|
|
5107
|
+
running a tile with the dashboard's whole control row also works,
|
|
5108
|
+
because an unreferenced given is ignored. Absent when discovery
|
|
5109
|
+
could not resolve the tile (its expression neither compiles nor is
|
|
5110
|
+
a plain `source -> view` or named query the static walk reads), in
|
|
5111
|
+
which case send the whole control row. One such tile
|
|
5112
|
+
widens `ReportManifest.givens` to every given the entry file
|
|
5113
|
+
surfaces, rather than the union over the resolvable tiles, so that
|
|
5114
|
+
the row actually contains the givens that tile filters by.
|
|
5115
|
+
label:
|
|
5116
|
+
type: string
|
|
5117
|
+
description: >-
|
|
5118
|
+
Heading for the tile, from a `# label` on the view or query it names.
|
|
5119
|
+
Absent when it carries none, in which case a viewer derives one from
|
|
5120
|
+
the run expression.
|
|
5121
|
+
subtitle:
|
|
5122
|
+
type: string
|
|
5123
|
+
description:
|
|
5124
|
+
Second line under the heading, from a `# subtitle` on the view or
|
|
5125
|
+
query it names.
|
|
5126
|
+
colspan:
|
|
5127
|
+
type: integer
|
|
5128
|
+
description: >-
|
|
5129
|
+
Grid columns this tile spans, from a `# colspan=N` on the view or
|
|
5130
|
+
query it names, or from `colspan=N` on a text tile's entry in
|
|
5131
|
+
`tiles=[…]`. Clamped to `dashboardColumns` at render time. Absent
|
|
5132
|
+
means one column.
|
|
5133
|
+
break:
|
|
5134
|
+
type: boolean
|
|
5135
|
+
description: >-
|
|
5136
|
+
Start a new grid row at this tile, from a `# break` on the view or
|
|
5137
|
+
query it names, or from `break` on a text tile's entry in
|
|
5138
|
+
`tiles=[…]`. Named for the tag, so every per-tile field on this
|
|
5139
|
+
schema is spelled the way an author writes it. A generated client
|
|
5140
|
+
escapes the attribute where the word is reserved (the Python client
|
|
5141
|
+
exposes `break_`) while the wire key stays `break`.
|
|
5142
|
+
borderless:
|
|
5143
|
+
type: boolean
|
|
5144
|
+
description: >-
|
|
5145
|
+
Draw the result with no card around it, from a `# borderless` on the
|
|
5146
|
+
view or query it names. Together with `label`, `subtitle`, `colspan`
|
|
5147
|
+
and `break` this is the whole per-child tag set `@malloydata/render`
|
|
5148
|
+
resolves for a `# dashboard` nest child, read the same way here so one
|
|
5149
|
+
view presents identically as a tile and as a nest.
|
|
5150
|
+
|
|
5151
|
+
ReportCells:
|
|
5152
|
+
type: object
|
|
5153
|
+
description: >-
|
|
5154
|
+
A linear report written as cells, or a `.malloynb`: its cells, unexecuted,
|
|
5155
|
+
and its model.
|
|
5156
|
+
properties:
|
|
5157
|
+
type:
|
|
5158
|
+
type: string
|
|
5159
|
+
description: Always `notebook`. Distinguishes the payload from the
|
|
5160
|
+
compiled-model shape returned by the model endpoint.
|
|
5161
|
+
packageName:
|
|
5162
|
+
type: string
|
|
5163
|
+
description: Name of the package containing this notebook
|
|
5164
|
+
modelPath:
|
|
5165
|
+
type: string
|
|
5166
|
+
description: Relative path to the notebook file within its package directory
|
|
5167
|
+
format:
|
|
5168
|
+
type: string
|
|
5169
|
+
enum: ["malloynb", "malloy"]
|
|
5170
|
+
description:
|
|
5171
|
+
The file format the notebook is written in. `malloynb` is the
|
|
5172
|
+
cell-separated format; `malloy` is a linear `.malloy` report (see
|
|
5173
|
+
list-reports), wherever it lives, whose cells are
|
|
5174
|
+
its statements and its floating `(markdown)` notes in file order.
|
|
5175
|
+
malloyVersion:
|
|
5176
|
+
type: string
|
|
5177
|
+
description: Version of the Malloy compiler used to generate the notebook data
|
|
5178
|
+
modelInfo:
|
|
5179
|
+
type: string
|
|
5180
|
+
description: JSON string containing model metadata and structure information
|
|
5181
|
+
notebookCells:
|
|
5182
|
+
type: array
|
|
5183
|
+
description: Array of notebook cells containing raw markdown and code content
|
|
5184
|
+
items:
|
|
5185
|
+
$ref: "#/components/schemas/NotebookCell"
|
|
5186
|
+
annotations:
|
|
5187
|
+
type: array
|
|
5188
|
+
description:
|
|
5189
|
+
Array of file-level (##) annotations attached to the notebook. For
|
|
5190
|
+
a `.malloy` notebook, every own note that is not a floating
|
|
5191
|
+
`(markdown)` cell, in file order, each note once. A `"` or `(text)`
|
|
5192
|
+
note below the `## artifact` tag is dropped and not listed.
|
|
5193
|
+
items:
|
|
5194
|
+
type: string
|
|
5195
|
+
startingGivens:
|
|
5196
|
+
allOf:
|
|
5197
|
+
- $ref: "#/components/schemas/EncodedGivenValues"
|
|
5198
|
+
description:
|
|
5199
|
+
Starting values for the notebook's controls. A `.malloy` notebook
|
|
5200
|
+
declares them in its artifact tag (`## artifact { givens { … } }`),
|
|
5201
|
+
a `.malloynb` in its file-level tags (`## givens { … }`). URL
|
|
5202
|
+
parameters override these, which is why the two share a shape.
|
|
5203
|
+
Omitted when the notebook declares none.
|
|
5204
|
+
autorun:
|
|
5205
|
+
type: boolean
|
|
5206
|
+
description:
|
|
5207
|
+
False batches control changes behind an Apply button instead of
|
|
5208
|
+
re-running on every change. Defaults to true. A `.malloy` notebook
|
|
5209
|
+
reads it from its artifact tag (`## artifact { autorun=false }`), a
|
|
5210
|
+
`.malloynb` from its file-level tags (`## autorun=false`). The same
|
|
5211
|
+
flag, with the same default, that `DashboardManifest.autorun`
|
|
5212
|
+
carries.
|
|
5213
|
+
sources:
|
|
5214
|
+
type: array
|
|
5215
|
+
description: Sources defined in the notebook's model
|
|
5216
|
+
items:
|
|
5217
|
+
$ref: "#/components/schemas/Source"
|
|
5218
|
+
queries:
|
|
5219
|
+
type: array
|
|
5220
|
+
description: Named queries defined in the notebook's model
|
|
5221
|
+
items:
|
|
5222
|
+
$ref: "#/components/schemas/Query"
|
|
5223
|
+
|
|
5224
|
+
DataApp:
|
|
4174
5225
|
type: object
|
|
4175
|
-
description:
|
|
5226
|
+
description:
|
|
5227
|
+
An in-package HTML data app within a Malloy package - a static page
|
|
5228
|
+
served from the package's public/ directory
|
|
4176
5229
|
properties:
|
|
4177
5230
|
resource:
|
|
4178
5231
|
type: string
|
|
4179
|
-
description:
|
|
5232
|
+
description:
|
|
5233
|
+
Canonical URL to the served data app. Root-relative and does
|
|
5234
|
+
NOT carry the /api/v0 prefix, because a data app is a static asset
|
|
5235
|
+
served off the server root rather than an API resource.
|
|
4180
5236
|
packageName:
|
|
4181
5237
|
type: string
|
|
4182
|
-
description: Name of the package containing this
|
|
5238
|
+
description: Name of the package containing this data app
|
|
4183
5239
|
path:
|
|
4184
5240
|
type: string
|
|
4185
|
-
description: Relative path to the
|
|
4186
|
-
|
|
4187
|
-
type: boolean
|
|
4188
|
-
description: |
|
|
4189
|
-
True for a file this route lists only because the request set
|
|
4190
|
-
`includeHiddenFilesAndSources`: a file the package's `index.malloy` (or a
|
|
4191
|
-
legacy `explores`) does not expose. False for every other file, so every
|
|
4192
|
-
entry is false without that option. It says whether the file is hidden, not
|
|
4193
|
-
whether a query can reach it: under `queryableSources: "all"` a hidden file
|
|
4194
|
-
can still be queried.
|
|
4195
|
-
error:
|
|
5241
|
+
description: Relative path to the HTML file within its package directory
|
|
5242
|
+
title:
|
|
4196
5243
|
type: string
|
|
4197
|
-
description:
|
|
5244
|
+
description:
|
|
5245
|
+
Title extracted from the file's <title> tag, or the path if
|
|
5246
|
+
not present
|
|
5247
|
+
fit:
|
|
5248
|
+
type: string
|
|
5249
|
+
enum:
|
|
5250
|
+
- viewport
|
|
5251
|
+
description:
|
|
5252
|
+
Layout hint read from a <meta name="publisher:fit"> tag in the
|
|
5253
|
+
page <head>. "viewport" tells the embedded viewer to fill the
|
|
5254
|
+
available height instead of auto-sizing to the content height, for
|
|
5255
|
+
full-screen apps like slide decks. Omitted for an ordinary
|
|
5256
|
+
content-driven app, which keeps content-height auto-sizing.
|
|
5257
|
+
|
|
5258
|
+
# ── DEPRECATED ────────────────────────────────────────────────────────
|
|
5259
|
+
# The shapes of the deprecated `…/dashboards*` and `…/notebooks*` routes.
|
|
5260
|
+
# No report schema references them; each removal deletes its block here.
|
|
4198
5261
|
|
|
4199
5262
|
Notebook:
|
|
4200
5263
|
type: object
|
|
4201
|
-
|
|
5264
|
+
deprecated: true
|
|
5265
|
+
description: DEPRECATED, use `Report`. A linear report as the deprecated
|
|
5266
|
+
list-notebooks route lists it.
|
|
4202
5267
|
properties:
|
|
4203
5268
|
environmentName:
|
|
4204
5269
|
type: string
|
|
@@ -4230,10 +5295,10 @@ components:
|
|
|
4230
5295
|
|
|
4231
5296
|
Dashboard:
|
|
4232
5297
|
type: object
|
|
5298
|
+
deprecated: true
|
|
4233
5299
|
description: |
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
model-level `## artifact`) annotation. The list entry; see
|
|
5300
|
+
DEPRECATED: use `Report`. A grid report (see list-reports), as the
|
|
5301
|
+
deprecated list-dashboards route lists it. The list entry; see
|
|
4237
5302
|
DashboardManifest for the detail a viewer needs to render one.
|
|
4238
5303
|
properties:
|
|
4239
5304
|
resource:
|
|
@@ -4244,14 +5309,17 @@ components:
|
|
|
4244
5309
|
description: Name of the package containing this dashboard
|
|
4245
5310
|
name:
|
|
4246
5311
|
type: string
|
|
4247
|
-
description:
|
|
4248
|
-
The
|
|
4249
|
-
|
|
5312
|
+
description: >-
|
|
5313
|
+
The report's filename basename: a display label, and the segment of
|
|
5314
|
+
the deprecated get-dashboard URL. Not an identity: two reports may
|
|
5315
|
+
share it. A change since reports: it used to be unique within the
|
|
5316
|
+
package (every dashboard was directly under `dashboards/`), and a
|
|
5317
|
+
client that keyed a map on it must key on `path` instead.
|
|
4250
5318
|
path:
|
|
4251
5319
|
type: string
|
|
4252
5320
|
description:
|
|
4253
|
-
Relative path to the
|
|
4254
|
-
|
|
5321
|
+
Relative path to the report file within its package directory,
|
|
5322
|
+
which is its identity
|
|
4255
5323
|
title:
|
|
4256
5324
|
type: string
|
|
4257
5325
|
description:
|
|
@@ -4269,7 +5337,9 @@ components:
|
|
|
4269
5337
|
|
|
4270
5338
|
DashboardManifest:
|
|
4271
5339
|
type: object
|
|
5340
|
+
deprecated: true
|
|
4272
5341
|
description: |
|
|
5342
|
+
DEPRECATED: use `ReportManifest`.
|
|
4273
5343
|
Everything a viewer needs to render one dashboard: the artifact tag's
|
|
4274
5344
|
declarations plus the control contract derived from the givens its query
|
|
4275
5345
|
references. Running needs no dashboard-specific endpoint — the query,
|
|
@@ -4284,14 +5354,17 @@ components:
|
|
|
4284
5354
|
description: Name of the package containing this dashboard
|
|
4285
5355
|
name:
|
|
4286
5356
|
type: string
|
|
4287
|
-
description:
|
|
4288
|
-
The
|
|
4289
|
-
|
|
5357
|
+
description: >-
|
|
5358
|
+
The report's filename basename: a display label, and the segment of
|
|
5359
|
+
the deprecated get-dashboard URL. Not an identity: two reports may
|
|
5360
|
+
share it. A change since reports: it used to be unique within the
|
|
5361
|
+
package (every dashboard was directly under `dashboards/`), and a
|
|
5362
|
+
client that keyed a map on it must key on `path` instead.
|
|
4290
5363
|
path:
|
|
4291
5364
|
type: string
|
|
4292
5365
|
description: |
|
|
4293
|
-
Relative path to the
|
|
4294
|
-
|
|
5366
|
+
Relative path to the report file within its package directory,
|
|
5367
|
+
which is its identity. This is also the model to POST to:
|
|
4295
5368
|
`query`, each tile, and each control's suggest query all run through
|
|
4296
5369
|
`POST /environments/{environmentName}/packages/{packageName}/models/{path}/query`
|
|
4297
5370
|
with `givens`, which is why there is no dashboard-specific run
|
|
@@ -4310,32 +5383,27 @@ components:
|
|
|
4310
5383
|
error:
|
|
4311
5384
|
type: string
|
|
4312
5385
|
description: Error message if the dashboard file failed to compile
|
|
4313
|
-
|
|
5386
|
+
layout:
|
|
4314
5387
|
type: string
|
|
4315
|
-
enum: [
|
|
5388
|
+
enum: [grid, linear]
|
|
4316
5389
|
description: >-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
whatever the file says. Always `dashboard` on
|
|
4321
|
-
`GET …/dashboards/{dashboardName}`; a notebook's manifest is the
|
|
4322
|
-
`dashboard` field of `GET …/notebooks/{path}`.
|
|
4323
|
-
query:
|
|
5390
|
+
The report's layout (see list-reports). A `linear` report is laid
|
|
5391
|
+
out as one column: `dashboardColumns` is 1 whatever the file says.
|
|
5392
|
+
kind:
|
|
4324
5393
|
type: string
|
|
5394
|
+
enum: [dashboard, notebook]
|
|
5395
|
+
deprecated: true
|
|
4325
5396
|
description: >-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
`
|
|
4331
|
-
and is not interchangeable with this one; see `DashboardTile.query`.
|
|
5397
|
+
DEPRECATED: read `layout`. The same thing in the old vocabulary:
|
|
5398
|
+
`dashboard` for a grid report, `notebook` for a linear one. Always
|
|
5399
|
+
`dashboard` on `GET …/dashboards/{dashboardName}`; a linear
|
|
5400
|
+
report's manifest is the `dashboard` field of
|
|
5401
|
+
`GET …/notebooks/{path}`.
|
|
4332
5402
|
tiles:
|
|
4333
5403
|
type: array
|
|
4334
5404
|
description: >-
|
|
4335
5405
|
The dashboard's tiles, each run as its own query and combined into one
|
|
4336
|
-
grid.
|
|
4337
|
-
that can span sources. Absent when the `# artifact` tag sits on a
|
|
4338
|
-
`query:` instead, in which case `query` is set.
|
|
5406
|
+
grid. Absent on a dashboard listed with its compile `error`.
|
|
4339
5407
|
items:
|
|
4340
5408
|
$ref: "#/components/schemas/DashboardTile"
|
|
4341
5409
|
dashboardColumns:
|
|
@@ -4391,213 +5459,32 @@ components:
|
|
|
4391
5459
|
$ref: "#/components/schemas/Given"
|
|
4392
5460
|
|
|
4393
5461
|
DashboardTile:
|
|
4394
|
-
|
|
5462
|
+
deprecated: true
|
|
4395
5463
|
description: >-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
kind:
|
|
4401
|
-
type: string
|
|
4402
|
-
enum: [query, text]
|
|
4403
|
-
description: >-
|
|
4404
|
-
`query` runs `query` through the model query endpoint; `text` shows
|
|
4405
|
-
`markdown`. Absent means `query`.
|
|
4406
|
-
name:
|
|
4407
|
-
type: string
|
|
4408
|
-
description: >-
|
|
4409
|
-
A text tile's name: the bare word in `tiles=[…]` and on its
|
|
4410
|
-
`##|(markdown) name` block. Absent on a query tile.
|
|
4411
|
-
markdown:
|
|
4412
|
-
type: string
|
|
4413
|
-
description: >-
|
|
4414
|
-
A text tile's body, the text of its `##|(markdown) name` block
|
|
4415
|
-
without the opener. Empty when the file has no such block. Absent on
|
|
4416
|
-
a query tile.
|
|
4417
|
-
query:
|
|
4418
|
-
type: string
|
|
4419
|
-
description: >-
|
|
4420
|
-
Absent on a text tile. The run expression exactly as written in `tiles=[…]`, for example
|
|
4421
|
-
"orders -> by_month". An EXPRESSION rather than a name, so it goes in
|
|
4422
|
-
the `query` field of a `POST …/models/{path}/query` body, prefixed
|
|
4423
|
-
with `run:`. Sending it in `queryName`, the field
|
|
4424
|
-
`DashboardManifest.query` takes, is rejected.
|
|
4425
|
-
restricted:
|
|
4426
|
-
type: boolean
|
|
4427
|
-
description: >-
|
|
4428
|
-
Set on a tile of a compiled document (`CompileResult.document`) whose
|
|
4429
|
-
source the caller may not read. The tile carries its `query` and
|
|
4430
|
-
nothing derived from the source: no `givenNames`, no layout tags.
|
|
4431
|
-
givenNames:
|
|
4432
|
-
type: array
|
|
4433
|
-
items:
|
|
4434
|
-
type: string
|
|
4435
|
-
description: |
|
|
4436
|
-
Names of the givens this tile's compiled query reads: through its
|
|
4437
|
-
view, its source's `where:`, a joined source's `where:`, a
|
|
4438
|
-
dimension or measure it uses, and its source's `#(authorize)` and
|
|
4439
|
-
`#(access_filter)` gates. A control not listed does not change the
|
|
4440
|
-
tile, which is what a viewer's "Doesn't respond to" chip says. It
|
|
4441
|
-
also tells a caller which tiles a changed control needs to re-run;
|
|
4442
|
-
running a tile with the dashboard's whole control row also works,
|
|
4443
|
-
because an unreferenced given is ignored. Absent when discovery
|
|
4444
|
-
could not resolve the tile (its expression neither compiles nor is
|
|
4445
|
-
a plain `source -> view` or named query the static walk reads), in
|
|
4446
|
-
which case send the whole control row. One such tile
|
|
4447
|
-
widens `DashboardManifest.givens` to every given the entry file
|
|
4448
|
-
surfaces, rather than the union over the resolvable tiles, so that
|
|
4449
|
-
the row actually contains the givens that tile filters by.
|
|
4450
|
-
label:
|
|
4451
|
-
type: string
|
|
4452
|
-
description: >-
|
|
4453
|
-
Heading for the tile, from a `# label` on the view or query it names.
|
|
4454
|
-
Absent when it carries none, in which case a viewer derives one from
|
|
4455
|
-
the run expression.
|
|
4456
|
-
subtitle:
|
|
4457
|
-
type: string
|
|
4458
|
-
description:
|
|
4459
|
-
Second line under the heading, from a `# subtitle` on the view or
|
|
4460
|
-
query it names.
|
|
4461
|
-
colspan:
|
|
4462
|
-
type: integer
|
|
4463
|
-
description: >-
|
|
4464
|
-
Grid columns this tile spans, from a `# colspan=N` on the view or
|
|
4465
|
-
query it names, or from `colspan=N` on a text tile's entry in
|
|
4466
|
-
`tiles=[…]`. Clamped to `dashboardColumns` at render time. Absent
|
|
4467
|
-
means one column.
|
|
4468
|
-
break:
|
|
4469
|
-
type: boolean
|
|
4470
|
-
description: >-
|
|
4471
|
-
Start a new grid row at this tile, from a `# break` on the view or
|
|
4472
|
-
query it names, or from `break` on a text tile's entry in
|
|
4473
|
-
`tiles=[…]`. Named for the tag, so every per-tile field on this
|
|
4474
|
-
schema is spelled the way an author writes it. A generated client
|
|
4475
|
-
escapes the attribute where the word is reserved (the Python client
|
|
4476
|
-
exposes `break_`) while the wire key stays `break`.
|
|
4477
|
-
borderless:
|
|
4478
|
-
type: boolean
|
|
4479
|
-
description: >-
|
|
4480
|
-
Draw the result with no card around it, from a `# borderless` on the
|
|
4481
|
-
view or query it names. Together with `label`, `subtitle`, `colspan`
|
|
4482
|
-
and `break` this is the whole per-child tag set `@malloydata/render`
|
|
4483
|
-
resolves for a `# dashboard` nest child, read the same way here so one
|
|
4484
|
-
view presents identically as a tile and as a nest.
|
|
4485
|
-
|
|
4486
|
-
DataApp:
|
|
4487
|
-
type: object
|
|
4488
|
-
description:
|
|
4489
|
-
An in-package HTML data app within a Malloy package - a static page
|
|
4490
|
-
served from the package's public/ directory
|
|
4491
|
-
properties:
|
|
4492
|
-
resource:
|
|
4493
|
-
type: string
|
|
4494
|
-
description:
|
|
4495
|
-
Canonical URL to the served data app. Root-relative and does
|
|
4496
|
-
NOT carry the /api/v0 prefix, because a data app is a static asset
|
|
4497
|
-
served off the server root rather than an API resource.
|
|
4498
|
-
packageName:
|
|
4499
|
-
type: string
|
|
4500
|
-
description: Name of the package containing this data app
|
|
4501
|
-
path:
|
|
4502
|
-
type: string
|
|
4503
|
-
description: Relative path to the HTML file within its package directory
|
|
4504
|
-
title:
|
|
4505
|
-
type: string
|
|
4506
|
-
description:
|
|
4507
|
-
Title extracted from the file's <title> tag, or the path if
|
|
4508
|
-
not present
|
|
4509
|
-
fit:
|
|
4510
|
-
type: string
|
|
4511
|
-
enum:
|
|
4512
|
-
- viewport
|
|
4513
|
-
description:
|
|
4514
|
-
Layout hint read from a <meta name="publisher:fit"> tag in the
|
|
4515
|
-
page <head>. "viewport" tells the embedded viewer to fill the
|
|
4516
|
-
available height instead of auto-sizing to the content height, for
|
|
4517
|
-
full-screen apps like slide decks. Omitted for an ordinary
|
|
4518
|
-
content-driven app, which keeps content-height auto-sizing.
|
|
5464
|
+
DEPRECATED: `ReportTile`, under the name the deprecated dashboard
|
|
5465
|
+
routes gave it.
|
|
5466
|
+
allOf:
|
|
5467
|
+
- $ref: "#/components/schemas/ReportTile"
|
|
4519
5468
|
|
|
4520
5469
|
RawNotebook:
|
|
4521
|
-
|
|
4522
|
-
description:
|
|
4523
|
-
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
|
|
4530
|
-
|
|
4531
|
-
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4537
|
-
|
|
4538
|
-
|
|
4539
|
-
cell-separated format; `malloy` is a `.malloy` at the top of `notebooks/` or
|
|
4540
|
-
`dashboards/` whose model-level `## artifact` tag says `kind=notebook` (or names no
|
|
4541
|
-
`kind` and sits under `notebooks/`), whose cells are
|
|
4542
|
-
its statements and its floating `(markdown)` notes in file order.
|
|
4543
|
-
malloyVersion:
|
|
4544
|
-
type: string
|
|
4545
|
-
description: Version of the Malloy compiler used to generate the notebook data
|
|
4546
|
-
modelInfo:
|
|
4547
|
-
type: string
|
|
4548
|
-
description: JSON string containing model metadata and structure information
|
|
4549
|
-
notebookCells:
|
|
4550
|
-
type: array
|
|
4551
|
-
description: Array of notebook cells containing raw markdown and code content
|
|
4552
|
-
items:
|
|
4553
|
-
$ref: "#/components/schemas/NotebookCell"
|
|
4554
|
-
dashboard:
|
|
4555
|
-
allOf:
|
|
4556
|
-
- $ref: "#/components/schemas/DashboardManifest"
|
|
4557
|
-
description: >-
|
|
4558
|
-
The tile layout of a notebook written as one (`## artifact {
|
|
4559
|
-
kind=notebook tiles=[…] }`), in the shape a dashboard has, with
|
|
4560
|
-
`kind` `notebook` and one column. Absent on a notebook written as
|
|
4561
|
-
cells. Its tiles run through the model query endpoint at
|
|
4562
|
-
`modelPath`; `notebookCells` carries the same content as cells for
|
|
4563
|
-
readers that do not draw a layout.
|
|
4564
|
-
annotations:
|
|
4565
|
-
type: array
|
|
4566
|
-
description:
|
|
4567
|
-
Array of file-level (##) annotations attached to the notebook. For
|
|
4568
|
-
a `.malloy` notebook, every own note that is not a floating
|
|
4569
|
-
`(markdown)` cell, in file order, each note once. A `"` or `(text)`
|
|
4570
|
-
note below the `## artifact` tag is dropped and not listed.
|
|
4571
|
-
items:
|
|
4572
|
-
type: string
|
|
4573
|
-
startingGivens:
|
|
4574
|
-
allOf:
|
|
4575
|
-
- $ref: "#/components/schemas/EncodedGivenValues"
|
|
4576
|
-
description:
|
|
4577
|
-
Starting values for the notebook's controls. A `.malloy` notebook
|
|
4578
|
-
declares them in its artifact tag (`## artifact { givens { … } }`),
|
|
4579
|
-
a `.malloynb` in its file-level tags (`## givens { … }`). URL
|
|
4580
|
-
parameters override these, which is why the two share a shape.
|
|
4581
|
-
Omitted when the notebook declares none.
|
|
4582
|
-
autorun:
|
|
4583
|
-
type: boolean
|
|
4584
|
-
description:
|
|
4585
|
-
False batches control changes behind an Apply button instead of
|
|
4586
|
-
re-running on every change. Defaults to true. A `.malloy` notebook
|
|
4587
|
-
reads it from its artifact tag (`## artifact { autorun=false }`), a
|
|
4588
|
-
`.malloynb` from its file-level tags (`## autorun=false`). The same
|
|
4589
|
-
flag, with the same default, that `DashboardManifest.autorun`
|
|
4590
|
-
carries.
|
|
4591
|
-
sources:
|
|
4592
|
-
type: array
|
|
4593
|
-
description: Sources defined in the notebook's model
|
|
4594
|
-
items:
|
|
4595
|
-
$ref: "#/components/schemas/Source"
|
|
4596
|
-
queries:
|
|
4597
|
-
type: array
|
|
4598
|
-
description: Named queries defined in the notebook's model
|
|
4599
|
-
items:
|
|
4600
|
-
$ref: "#/components/schemas/Query"
|
|
5470
|
+
deprecated: true
|
|
5471
|
+
description: >-
|
|
5472
|
+
DEPRECATED: `ReportCells`, as get-notebook answers them, plus the tile
|
|
5473
|
+
layout of a linear report written as tiles.
|
|
5474
|
+
allOf:
|
|
5475
|
+
- $ref: "#/components/schemas/ReportCells"
|
|
5476
|
+
- type: object
|
|
5477
|
+
properties:
|
|
5478
|
+
dashboard:
|
|
5479
|
+
allOf:
|
|
5480
|
+
- $ref: "#/components/schemas/DashboardManifest"
|
|
5481
|
+
description: >-
|
|
5482
|
+
The tile layout of a linear report written as one (`## artifact {
|
|
5483
|
+
layout=linear tiles=[…] }`), in the shape a dashboard has, with
|
|
5484
|
+
`layout` `linear` and one column. Absent on a notebook written as
|
|
5485
|
+
cells. Its tiles run through the model query endpoint at
|
|
5486
|
+
`modelPath`; `notebookCells` carries the same content as cells for
|
|
5487
|
+
readers that do not draw a layout.
|
|
4601
5488
|
|
|
4602
5489
|
CompiledModel:
|
|
4603
5490
|
type: object
|
|
@@ -5792,8 +6679,7 @@ components:
|
|
|
5792
6679
|
type: integer
|
|
5793
6680
|
minimum: 1
|
|
5794
6681
|
maximum: 2147483647
|
|
5795
|
-
description:
|
|
5796
|
-
Maximum run time of each statement on the database, in
|
|
6682
|
+
description: Maximum run time of each statement on the database, in
|
|
5797
6683
|
milliseconds. The database cancels a statement that exceeds it.
|
|
5798
6684
|
When omitted, the database's own statement_timeout applies. Not
|
|
5799
6685
|
applied to a DuckLake catalog connection.
|
|
@@ -5999,6 +6885,7 @@ components:
|
|
|
5999
6885
|
required:
|
|
6000
6886
|
- storage
|
|
6001
6887
|
- catalog
|
|
6888
|
+
|
|
6002
6889
|
BigqueryConnection:
|
|
6003
6890
|
type: object
|
|
6004
6891
|
description: Google BigQuery database connection configuration
|
|
@@ -6216,6 +7103,7 @@ components:
|
|
|
6216
7103
|
azureConnection:
|
|
6217
7104
|
$ref: "#/components/schemas/AzureConnection"
|
|
6218
7105
|
# TODO: What is this? Can we remove it?
|
|
7106
|
+
|
|
6219
7107
|
SqlSource:
|
|
6220
7108
|
type: object
|
|
6221
7109
|
properties:
|
|
@@ -6538,13 +7426,20 @@ components:
|
|
|
6538
7426
|
serves once saved. Present only when the source carries a model-level
|
|
6539
7427
|
`## artifact` tag and compiled far enough to read.
|
|
6540
7428
|
properties:
|
|
7429
|
+
layout:
|
|
7430
|
+
type: string
|
|
7431
|
+
enum: [grid, linear]
|
|
7432
|
+
description: >-
|
|
7433
|
+
The report's layout, by the one rule every report follows: the
|
|
7434
|
+
tag's `layout=`, else grid when it lists `tiles` or carries a
|
|
7435
|
+
`dashboard { … }` grid tag, else linear.
|
|
6541
7436
|
kind:
|
|
6542
7437
|
type: string
|
|
6543
7438
|
enum: [dashboard, notebook]
|
|
7439
|
+
deprecated: true
|
|
6544
7440
|
description: >-
|
|
6545
|
-
|
|
6546
|
-
`
|
|
6547
|
-
any other is a notebook: submitted text has no folder to decide.
|
|
7441
|
+
DEPRECATED: read `layout`. The same thing in the old vocabulary:
|
|
7442
|
+
`dashboard` for grid, `notebook` for linear.
|
|
6548
7443
|
manifest:
|
|
6549
7444
|
allOf:
|
|
6550
7445
|
- $ref: "#/components/schemas/DashboardManifest"
|
|
@@ -6932,6 +7827,7 @@ components:
|
|
|
6932
7827
|
The given names this term reads, in first-seen order. A reader must
|
|
6933
7828
|
bind these for the term to apply; binding none applies each given's
|
|
6934
7829
|
declared default, as a live query would.
|
|
7830
|
+
|
|
6935
7831
|
JoinedTerms:
|
|
6936
7832
|
type: object
|
|
6937
7833
|
required: [alias, source, terms]
|
|
@@ -6954,6 +7850,7 @@ components:
|
|
|
6954
7850
|
description: >-
|
|
6955
7851
|
The joined source's own stripped terms, which its binding re-applies
|
|
6956
7852
|
with the caller's values.
|
|
7853
|
+
|
|
6957
7854
|
PersistSourcePlan:
|
|
6958
7855
|
type: object
|
|
6959
7856
|
required: [name, sourceID, connectionName, sourceEntityId, sql, columns]
|