@reunionstudio/airlock-mcp 0.1.5 → 0.1.6

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.
@@ -246,6 +246,17 @@ For read-only planning and audit, use `observe.reference_context`,
246
246
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
247
247
  without querying raw reference rows.
248
248
 
249
+ Attachments remain governed evidence. Agents should discover and manage them
250
+ through installed Airlock procedures, not by reading Airlock-owned stages or
251
+ generated storage directly. The Streamlit Native App can preview images and
252
+ text inline and can render bounded page-at-a-time PDF previews for files up to
253
+ 100 MB and 2,000 pages. PDFs larger than 12 MB require an explicit open action;
254
+ the selected page and next two pages warm a private session cache. Full-file
255
+ download remains a short-lived Snowflake link when available. Successful PDF
256
+ page previews emit metadata-only `ATTACHMENT_PREVIEW` activity, never document
257
+ content or stage URLs. This UI preview capability does not grant MCP clients
258
+ direct attachment bytes.
259
+
249
260
  Help the app follow the loop:
250
261
 
251
262
  - Observe/read: fetch existing governed data through approved Airlock or
package/README.md CHANGED
@@ -240,6 +240,18 @@ inspect `observe.usage_limits`, `observe.usage_limit`, and
240
240
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
241
241
  without reading raw reference rows.
242
242
 
243
+ Airlock's Streamlit Native App can inspect governed attachment evidence without
244
+ moving it into a separate document service. Images and text preview inline.
245
+ PDFs up to 100 MB and 2,000 pages render one selected page at a time; the
246
+ selected page and next two pages are loaded as one bounded window so ordinary
247
+ forward navigation can use the session cache. PDFs larger than 12 MB require an
248
+ explicit open action. Rendering is bounded by time, dimensions, concurrency,
249
+ output size, session storage, and expiry, while full-file access remains a
250
+ short-lived Snowflake download when available. Successful PDF page previews
251
+ emit metadata-only `ATTACHMENT_PREVIEW` activity. This human-facing capability
252
+ does not permit an MCP agent to bypass attachment procedures or read underlying
253
+ stage objects directly.
254
+
243
255
  For governed Markdown knowledge, use the `okf-knowledge-bundle` pattern. It
244
256
  sets `core_config.payload_adapter` to `okf_knowledge_bundle` so installed
245
257
  Airlock can load locally validated bundles through
@@ -38,6 +38,14 @@ known lookup value and purpose, with `observe.reference_context`,
38
38
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
39
39
  for planning and audit.
40
40
 
41
+ The installed Streamlit Native App also provides governed attachment
42
+ inspection: inline image/text previews and bounded, page-at-a-time PDF preview
43
+ for documents up to 100 MB and 2,000 pages. The selected PDF page warms the next
44
+ two pages in the session cache; large PDFs require explicit open, and full-file
45
+ access uses Snowflake download links when available. Successful PDF page
46
+ previews emit metadata-only `ATTACHMENT_PREVIEW` activity. This UI capability
47
+ does not grant MCP clients direct stage access.
48
+
41
49
  The connector package and MCP server live in `reunionstudio/airlock-mcp`.
42
50
  This workbench provides the spec-building implementation inside that one
43
51
  installed Airlock MCP experience.
package/docs/workflows.md CHANGED
@@ -187,6 +187,17 @@ budgeting. Use `observe.reference_context`, `observe.usage_limits`,
187
187
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
188
188
  for planning and audit without reading raw reference rows.
189
189
 
190
+ ## Governed Attachment Preview
191
+
192
+ Attachments remain governed evidence. Agents should discover and manage them
193
+ through installed Airlock procedures rather than reading Airlock-owned stages.
194
+ In the Streamlit Native App, images and text can preview inline, and PDFs up to
195
+ 100 MB and 2,000 pages can render one selected page at a time. Airlock renders a
196
+ bounded three-page window so the next two pages are normally session-cache
197
+ hits; PDFs larger than 12 MB require an explicit open action. Full-file download
198
+ remains available through a short-lived Snowflake link when the runtime can
199
+ create one. Preview activity emits metadata-only `ATTACHMENT_PREVIEW` events.
200
+
190
201
  The app should follow the loop:
191
202
 
192
203
  1. Observe/read governed records through approved Airlock or Snowflake surfaces.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reunionstudio/airlock-mcp",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Single-install MCP interface for Airlock agents.",
5
5
  "type": "module",
6
6
  "repository": {
package/setup.py CHANGED
@@ -27,7 +27,7 @@ def data_files():
27
27
 
28
28
  setup(
29
29
  name="airlock-mcp",
30
- version="0.1.5",
30
+ version="0.1.6",
31
31
  description="Codex-first workbench and CLI for drafting Airlock specs.",
32
32
  packages=find_packages("src"),
33
33
  package_dir={"": "src"},
@@ -1,3 +1,3 @@
1
1
  """Airlock MCP CLI package."""
2
2
 
3
- __version__ = "0.1.5"
3
+ __version__ = "0.1.6"
@@ -54,6 +54,14 @@ purpose, and role lens. Use `observe.reference_context`,
54
54
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
55
55
  for planning and audit without reading raw reference rows.
56
56
 
57
+ Attachments remain governed evidence. Agents should discover and manage them
58
+ through installed Airlock procedures, not by reading Airlock-owned stages.
59
+ The Streamlit Native App can preview images and text inline and can render
60
+ bounded page-at-a-time PDF previews for files up to 100 MB and 2,000 pages.
61
+ PDFs larger than 12 MB require explicit open; successful page previews emit
62
+ metadata-only `ATTACHMENT_PREVIEW` activity and do not grant MCP clients direct
63
+ attachment bytes.
64
+
57
65
  Do not store credentials here. Do not write directly to Airlock-owned tables,
58
66
  stages, generated views, or generated tables. Use approved Airlock/Snowflake
59
67
  access paths and submit governed decisions or actions through spec contracts.
@@ -102,6 +110,11 @@ known lookup value and purpose, and use `observe.reference_context`,
102
110
  `observe.usage_limits`, `observe.usage_limit`, and
103
111
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
104
112
  for planning and audit.
113
+
114
+ For attachments, use installed Airlock procedures and governed UI surfaces.
115
+ The Streamlit Native App can preview images/text and bounded PDF pages, but
116
+ `ATTACHMENT_PREVIEW` activity is metadata-only and MCP clients must not read
117
+ Airlock-owned stages directly.
105
118
  """
106
119
 
107
120
 
@@ -162,6 +175,7 @@ def _manifest(mode: str, entries: list[dict[str, Any]]) -> dict[str, Any]:
162
175
  "agent": "governed agent work in the actor scope",
163
176
  "admin": "administrative mutation and operational changes",
164
177
  "restricted_reference": "one-record reference lookup through agent.get_reference_record; do not enumerate protected reference paths",
178
+ "attachment_preview": "governed Streamlit preview emits metadata-only ATTACHMENT_PREVIEW; MCP clients do not get direct stage access",
165
179
  },
166
180
  "specs": entries,
167
181
  "tracks": {
@@ -139,6 +139,15 @@ value, purpose, and role lens. Use `observe.usage_limits`,
139
139
  `observe.explain_access(action => 'get_reference_record', object_key => ...)`
140
140
  for planning and audit without reading raw reference rows.
141
141
 
142
+ Attachments remain governed evidence. Agents should discover and manage them
143
+ through installed Airlock procedures, not by reading Airlock-owned stages
144
+ directly. The Streamlit Native App can preview images and text inline and can
145
+ render bounded page-at-a-time PDF previews for files up to 100 MB and 2,000
146
+ pages. PDFs larger than 12 MB require an explicit open action; the selected
147
+ page and next two pages warm a private session cache. Successful PDF page
148
+ previews emit metadata-only `ATTACHMENT_PREVIEW` activity and do not grant MCP
149
+ clients direct attachment bytes.
150
+
142
151
  The app may orient the user with summaries, comparisons, rankings, exception
143
152
  queues, proposals, or dashboards. It should submit governed choices back
144
153
  through an Airlock spec contract. Do not write directly to Airlock-owned tables,
package/src/mcp.mjs CHANGED
@@ -44,7 +44,7 @@ export function handleMcpRequest(message) {
44
44
  },
45
45
  serverInfo: {
46
46
  name: "airlock",
47
- version: "0.1.5",
47
+ version: "0.1.6",
48
48
  },
49
49
  instructions:
50
50
  "Airlock MCP helps agents improve processes with Airlock specs and build apps or workflows that use existing specs. Use airlock_start for orientation or the airlock_* tools to bootstrap, draft, check, summarize, export, and render specs.",
package/src/text.mjs CHANGED
@@ -79,6 +79,12 @@ role lens. It returns at most one record, applies reference row filters, checks
79
79
  \`observe.reference_context\`, \`observe.usage_limits\`, \`observe.usage_limit\`,
80
80
  and \`observe.explain_access(action => 'get_reference_record', object_key => ...)\`
81
81
  for read-only planning and audit.
82
+ Attachments remain governed evidence. Agents should discover and manage them
83
+ through installed Airlock procedures, not by reading Airlock-owned stages.
84
+ The Streamlit Native App can preview images/text and bounded page-at-a-time
85
+ PDFs up to 100 MB and 2,000 pages; PDFs larger than 12 MB require explicit
86
+ open. Successful page previews emit metadata-only \`ATTACHMENT_PREVIEW\`
87
+ activity and do not grant MCP clients direct attachment bytes.
82
88
 
83
89
  Do not use retired admin read wrappers such as
84
90
  \`admin.list_specs\`, \`admin.describe_role\`, or \`admin.list_events\`; use
@@ -204,6 +210,9 @@ read wrappers such as \`admin.list_specs\`, \`admin.describe_role\`, or
204
210
  \`reference_config.restricted_reference\`, do not enumerate the protected
205
211
  reference; use \`agent.get_reference_record\` for a known lookup value and
206
212
  \`observe.usage_limits\` / \`observe.usage_limit\` for budget visibility. It can
213
+ also explain governed attachment preview: Streamlit can preview images/text and
214
+ bounded PDF pages, while \`ATTACHMENT_PREVIEW\` remains metadata-only and agents
215
+ must use Airlock procedures instead of direct stage reads. Airlock MCP can
207
216
  seed an app repo with \`airlock/specs.manifest.json\`, spec snapshots, sample
208
217
  records, and generated helper folders. The app should submit decisions,
209
218
  approvals, actions, comments, or follow-ups through Airlock spec contracts, not