@omercnet/paseo-omp 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/client/external-url.ts +2 -11
- package/client/omp-config-styles.ts +284 -0
- package/client/omp-config-surface.tsx +16 -286
- package/client/omp-routing-editor.tsx +1 -3
- package/client/provider-launch-settings.tsx +118 -0
- package/index.client.tsx +21 -2
- package/index.server.ts +10 -0
- package/package.json +14 -9
- package/paseo-plugin.json +2 -1
- package/scripts/prepare-dependencies.mjs +44 -11
- package/server/omp-models.ts +2 -6
- package/server/package-version.ts +1 -1
- package/server/protocol-violation-diagnostics.ts +1 -1
- package/server/provider/catalog.ts +2 -1
- package/server/provider/config-normalization.ts +19 -3
- package/server/provider/connection.ts +30 -0
- package/server/provider/host-tools.ts +2 -2
- package/server/provider/mcp-transport.ts +9 -2
- package/server/provider/omp-rpc-environment.ts +368 -0
- package/server/provider/omp-rpc-process.ts +119 -0
- package/server/provider/omp-rpc-protocol.ts +1949 -0
- package/server/provider/omp-rpc-transport.ts +1373 -0
- package/server/provider/omp-rpc-values.ts +31 -0
- package/server/provider/omp-rpc.ts +267 -3311
- package/server/provider/profile-providers.ts +2 -1
- package/server/provider/prompt-payload.ts +253 -0
- package/server/provider/registration.ts +10 -2
- package/server/provider/session-compaction.ts +187 -0
- package/server/provider/session-descriptors.ts +52 -18
- package/server/provider/session-events.ts +42 -0
- package/server/provider/session-permissions.ts +987 -0
- package/server/provider/session-terminal.ts +307 -0
- package/server/provider/session-usage.ts +234 -0
- package/server/provider/session.ts +145 -1853
- package/server/provider/settings.ts +8 -5
- package/server/provider/subsessions.ts +30 -9
- package/server/provider/timeline-projector.ts +140 -29
- package/shared/external-url.ts +0 -9
- package/shared/provider-launch-settings.ts +18 -0
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ before capture.
|
|
|
20
20
|
|
|
21
21
|
## Quick start
|
|
22
22
|
|
|
23
|
-
Requirements: Paseo
|
|
23
|
+
Requirements: Paseo `^0.9.0`, OMP `18.1.15` or newer, and OMP RPC protocol v2. Paseo 0.9 is required for the Help report's supported copy and external-link APIs, nested provider-subagent ancestry, spawning-tool links, npm-managed installation, and the complete client integration.
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
paseo plugin install npm:@omercnet/paseo-omp@<version>
|
|
@@ -36,7 +36,7 @@ Open the **OMP** sidebar to review the provider-profile contract, choose which c
|
|
|
36
36
|
- [Core-provider issue and parity audit](docs/core-provider-issue-audit.md)
|
|
37
37
|
- [Alpha release checklist](docs/alpha-release-checklist.md)
|
|
38
38
|
|
|
39
|
-
The plugin uses public Paseo 0.9
|
|
39
|
+
The plugin uses public Paseo 0.9 provider and client contracts and registers distinct `omp-plugin` and `omp-plugin-<profile>` identities; it does not modify the bundled `omp` provider.
|
|
40
40
|
|
|
41
41
|
## Named OMP profiles
|
|
42
42
|
|
|
@@ -50,7 +50,7 @@ Profile selection is request-local: concurrent clients cannot change each other'
|
|
|
50
50
|
|
|
51
51
|
## Paseo provider SDK coverage
|
|
52
52
|
|
|
53
|
-
This matrix inventories the complete capability set exported by the pinned `@getpaseo/plugin` 0.9.0
|
|
53
|
+
This matrix inventories the complete capability set exported by the pinned `@getpaseo/plugin` 0.9.0 provider SDK. It measures strict SDK surface coverage, not general product quality.
|
|
54
54
|
|
|
55
55
|
**Current capability completeness: 61.8%.** The provider advertises 11 of 17 capabilities (64.7%); ten are complete and `session.configure` is partial.
|
|
56
56
|
|
|
@@ -86,12 +86,12 @@ Provider functionality outside the capability flags is tracked separately:
|
|
|
86
86
|
| Provider SDK surface | Completeness | Implementation |
|
|
87
87
|
| --- | ---: | --- |
|
|
88
88
|
| Registration metadata and sanitized SVG icon | **100%** | Stable `omp-plugin` identity, label, description, and bundled icon. |
|
|
89
|
-
| Strict `providerOptionsSchema` | **100%** | Command, literal
|
|
89
|
+
| Strict `providerOptionsSchema` | **100%** | Command, literal environment, names-only profile inherited environment, output-redaction mode, session directory, RPC timeout, and role-model options are validated and normalized. Host-wide inherited names are separately persisted and merged at launch. |
|
|
90
90
|
| Availability diagnostics | **100%** | Bounded checks distinguish missing, unrunnable, incompatible, and available OMP runtimes. |
|
|
91
|
-
| Catalog cache identity | **100%** | Hash includes effective options,
|
|
91
|
+
| Catalog cache identity | **100%** | Hash includes effective options, merged host/profile inherited-environment names, settings, scope, cwd, and default command, but never resolves or fingerprints inherited values. |
|
|
92
92
|
| Models, modes, and thinking catalog | **100%** | Native catalog is mapped to opaque public model IDs with committed defaults and permission-gated modes. |
|
|
93
93
|
| Connection `send` / `onEvent` / `close` lifecycle | **100%** | Request correlation, multi-session ownership, process recovery, teardown, and provider reload/removal are covered. |
|
|
94
|
-
| Session launch: cwd, env, system prompt, title, and persistence | **100%** | Complete launch configuration is bounded, validated, forwarded, and re-read on recovery; selected daemon environment values are resolved only when catalog and session children spawn. |
|
|
94
|
+
| Session launch: cwd, env, system prompt, title, and persistence | **100%** | Complete launch configuration is bounded, validated, forwarded, and re-read on recovery; selected host and profile daemon environment values are resolved only when catalog and session children spawn. |
|
|
95
95
|
| MCP server forwarding and host tools | **100%** | Configured MCP tools are discovered, namespaced, labeled, executed, canceled, and bounded. Caller-scoped Paseo orchestration tools retain their native names, such as `create_agent` and `list_profiles`, so OMP skills can invoke them directly. The MCP composer control delegates native server management to OMP instead of duplicating its profile and workspace precedence. Exact `toolPolicy` remains the separate 0% capability above. |
|
|
96
96
|
| Denied native tools | **100%** | `disallowedTools` becomes an explicit OMP allow-list; unknown names fail closed. |
|
|
97
97
|
| Commands and committed session state events | **100%** | Publishes `session.commands`, `session.opened`, `session.config`, `session.ready`, and request completion in protocol order. |
|
|
@@ -113,7 +113,7 @@ Existing agents whose provider is `omp` remain owned by the bundled provider. Ne
|
|
|
113
113
|
|
|
114
114
|
OMP `18.1.15` is the oldest version tested end to end. The direct provider's hard compatibility gate is `rpc-ui` protocol v2: metadata-free legacy ready frames and v1-only runtimes are rejected before a provider session opens because they cannot support the advertised persistence and conversation-rewind capabilities. Typed tool approvals remain capability-gated and fall back as described above. For terminal completion, a matching `agent_end.requestId` is authoritative and mismatches are ignored before state changes. Released OMP 18.2.x builds that omit that field use an ordered fallback requiring a fresh correlated native user entry followed by current-turn assistant activity, an idle non-compacting runtime, and no conflicting permission, tool, steer, or child-session work. Ambiguous events while OMP is active are ignored; unresolved ambiguity after confirmed idle fails only the Paseo turn. This trades a bounded residual same-agent stale-event risk for compatibility with released OMP instead of terminating and lazily restarting the runtime after every later prompt. Paseo clients, including mobile clients inside reconnect grace, do not own or terminate the daemon-managed OMP session.
|
|
115
115
|
|
|
116
|
-
Paseo 0.9.0-beta.1
|
|
116
|
+
Paseo 0.9.0 is the minimum supported release. The verified controlled canary evidence remains on the 0.9.0-beta.1 image, where the full Docker canary passed with OMP 18.1.15 and 18.2.0. That canary preserved nested provider-subagent ancestry and spawning-tool links, and validated npm-managed plugin sources, platform-owned external URL opening, and whole-item timeline transforms before Overview grouping.
|
|
117
117
|
|
|
118
118
|
Install, update, disable, or remove `paseo-omp` independently of the bundled provider. Verify the provider snapshot contains `omp-plugin` after installation; a bundled `omp` entry may remain present and is not modified by this plugin.
|
|
119
119
|
|
|
@@ -121,7 +121,7 @@ Install, update, disable, or remove `paseo-omp` independently of the bundled pro
|
|
|
121
121
|
|
|
122
122
|
The plugin validates OMP protocol data and bounds public strings and structured values. It does not heuristically redact or rewrite content produced by native OMP, models, or tools. Do not put credentials in prompts or tool output, because that content may be published unchanged after validation and bounding.
|
|
123
123
|
|
|
124
|
-
`providerOptions.outputRedaction` defaults to `none`, preserving native content subject to those bounds. `configured-values` provides best-effort literal replacement for explicitly supplied credential values and every non-empty daemon value selected through `inheritEnv`, regardless of its name. It does not detect generated secrets or encoded, transformed, or independently streamed fragments of configured values. Centralized Paseo policy is required when a deployment needs redaction guarantees.
|
|
124
|
+
`providerOptions.outputRedaction` defaults to `none`, preserving native content subject to those bounds. `configured-values` provides best-effort literal replacement for explicitly supplied credential values and every non-empty daemon value selected through host or profile `inheritEnv`, regardless of its name. It does not detect generated secrets or encoded, transformed, or independently streamed fragments of configured values. Centralized Paseo policy is required when a deployment needs redaction guarantees.
|
|
125
125
|
|
|
126
126
|
Unexpected or internal launch failures use fixed fallback messages rather than serializing the launch configuration. Explicit public validation errors may include caller-supplied configuration names or values. Deployments that require host-wide content redaction should implement it in a dedicated host or plugin layer rather than this protocol adapter.
|
|
127
127
|
|
package/client/external-url.ts
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { selectExternalUrlOpener, validatedHttpUrl } from "../shared/external-url";
|
|
4
|
-
|
|
5
|
-
const paseoOpenExternalUrl =
|
|
6
|
-
"openExternalUrl" in paseoClient && typeof paseoClient.openExternalUrl === "function"
|
|
7
|
-
? paseoClient.openExternalUrl
|
|
8
|
-
: undefined;
|
|
9
|
-
const openExternalUrl = selectExternalUrlOpener(paseoOpenExternalUrl, (url) =>
|
|
10
|
-
Linking.openURL(url),
|
|
11
|
-
);
|
|
1
|
+
import { openExternalUrl } from "@getpaseo/plugin/client";
|
|
2
|
+
import { validatedHttpUrl } from "../shared/external-url";
|
|
12
3
|
|
|
13
4
|
export function openOmpExternalUrl(url: string): Promise<void> {
|
|
14
5
|
return openExternalUrl(validatedHttpUrl(url));
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import type { PluginSurfaceProps } from "@getpaseo/plugin/client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import type { TextStyle, ViewStyle } from "react-native";
|
|
4
|
+
|
|
5
|
+
export interface OmpConfigStyles {
|
|
6
|
+
root: ViewStyle;
|
|
7
|
+
pageTitle: TextStyle;
|
|
8
|
+
topTabs: ViewStyle;
|
|
9
|
+
topTab: ViewStyle;
|
|
10
|
+
topTabActive: ViewStyle;
|
|
11
|
+
topTabLabel: TextStyle;
|
|
12
|
+
topTabLabelActive: TextStyle;
|
|
13
|
+
workspace: ViewStyle;
|
|
14
|
+
categoryRail: ViewStyle;
|
|
15
|
+
categoryList: ViewStyle;
|
|
16
|
+
categoryButton: ViewStyle;
|
|
17
|
+
categoryButtonActive: ViewStyle;
|
|
18
|
+
categoryLabel: TextStyle;
|
|
19
|
+
categoryLabelActive: TextStyle;
|
|
20
|
+
categoryContent: ViewStyle;
|
|
21
|
+
search: TextStyle;
|
|
22
|
+
sectionHeader: ViewStyle;
|
|
23
|
+
sectionHeaderRow: ViewStyle;
|
|
24
|
+
sectionTitle: TextStyle;
|
|
25
|
+
source: TextStyle;
|
|
26
|
+
muted: TextStyle;
|
|
27
|
+
error: TextStyle;
|
|
28
|
+
refresh: ViewStyle;
|
|
29
|
+
docsActions: ViewStyle;
|
|
30
|
+
docLink: ViewStyle;
|
|
31
|
+
docLinkPressed: ViewStyle;
|
|
32
|
+
docLinkText: TextStyle;
|
|
33
|
+
refreshLabel: TextStyle;
|
|
34
|
+
helpActions: ViewStyle;
|
|
35
|
+
helpReport: ViewStyle;
|
|
36
|
+
helpReportText: TextStyle;
|
|
37
|
+
helpLinkText: TextStyle;
|
|
38
|
+
card: ViewStyle;
|
|
39
|
+
cardHeader: ViewStyle;
|
|
40
|
+
cardTitle: TextStyle;
|
|
41
|
+
row: ViewStyle;
|
|
42
|
+
rowLabel: TextStyle;
|
|
43
|
+
rowValue: TextStyle;
|
|
44
|
+
setting: ViewStyle;
|
|
45
|
+
settingHeader: ViewStyle;
|
|
46
|
+
settingPath: TextStyle;
|
|
47
|
+
settingDescription: TextStyle;
|
|
48
|
+
settingValue: TextStyle;
|
|
49
|
+
collectionSummary: TextStyle;
|
|
50
|
+
chipList: ViewStyle;
|
|
51
|
+
chip: ViewStyle;
|
|
52
|
+
chipText: TextStyle;
|
|
53
|
+
recordList: ViewStyle;
|
|
54
|
+
recordRow: ViewStyle;
|
|
55
|
+
recordKey: TextStyle;
|
|
56
|
+
recordValue: TextStyle;
|
|
57
|
+
editorActions: ViewStyle;
|
|
58
|
+
editorAction: ViewStyle;
|
|
59
|
+
editorActionPrimary: ViewStyle;
|
|
60
|
+
editorActionText: TextStyle;
|
|
61
|
+
editorActionTextPrimary: TextStyle;
|
|
62
|
+
scalarInput: TextStyle;
|
|
63
|
+
resetAction: TextStyle;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function useConfigStyles(
|
|
67
|
+
theme: PluginSurfaceProps["theme"],
|
|
68
|
+
compact: boolean,
|
|
69
|
+
): OmpConfigStyles {
|
|
70
|
+
return useMemo(
|
|
71
|
+
() => ({
|
|
72
|
+
root: {
|
|
73
|
+
flex: 1,
|
|
74
|
+
gap: compact ? 10 : 14,
|
|
75
|
+
padding: compact ? 16 : 24,
|
|
76
|
+
backgroundColor: theme.colors.surface0,
|
|
77
|
+
},
|
|
78
|
+
pageTitle: {
|
|
79
|
+
color: theme.colors.foreground,
|
|
80
|
+
fontSize: compact ? 22 : 26,
|
|
81
|
+
fontWeight: "700",
|
|
82
|
+
},
|
|
83
|
+
topTabs: {
|
|
84
|
+
flexWrap: "wrap",
|
|
85
|
+
flexDirection: "row",
|
|
86
|
+
alignSelf: "flex-start",
|
|
87
|
+
gap: 4,
|
|
88
|
+
padding: 4,
|
|
89
|
+
borderWidth: 1,
|
|
90
|
+
borderColor: theme.colors.border,
|
|
91
|
+
borderRadius: 10,
|
|
92
|
+
backgroundColor: theme.colors.surface1,
|
|
93
|
+
},
|
|
94
|
+
topTab: {
|
|
95
|
+
paddingHorizontal: compact ? 10 : 14,
|
|
96
|
+
paddingVertical: 8,
|
|
97
|
+
borderRadius: 7,
|
|
98
|
+
},
|
|
99
|
+
topTabActive: { backgroundColor: theme.colors.accent },
|
|
100
|
+
topTabLabel: { color: theme.colors.foregroundMuted, fontSize: 13, fontWeight: "600" },
|
|
101
|
+
topTabLabelActive: { color: theme.colors.accentForeground },
|
|
102
|
+
workspace: {
|
|
103
|
+
flexDirection: compact ? "column" : "row",
|
|
104
|
+
alignItems: compact ? "stretch" : "flex-start",
|
|
105
|
+
gap: compact ? 10 : 18,
|
|
106
|
+
},
|
|
107
|
+
categoryRail: {
|
|
108
|
+
width: compact ? "100%" : 220,
|
|
109
|
+
gap: 10,
|
|
110
|
+
padding: 10,
|
|
111
|
+
borderWidth: 1,
|
|
112
|
+
borderColor: theme.colors.border,
|
|
113
|
+
borderRadius: 10,
|
|
114
|
+
backgroundColor: theme.colors.surface1,
|
|
115
|
+
},
|
|
116
|
+
categoryList: { gap: 4 },
|
|
117
|
+
categoryButton: { paddingHorizontal: 10, paddingVertical: 9, borderRadius: 7 },
|
|
118
|
+
categoryButtonActive: { backgroundColor: theme.colors.surface2 },
|
|
119
|
+
categoryLabel: { color: theme.colors.foregroundMuted, fontSize: 13, fontWeight: "500" },
|
|
120
|
+
categoryLabelActive: { color: theme.colors.foreground, fontWeight: "700" },
|
|
121
|
+
categoryContent: { flex: compact ? undefined : 1, minWidth: 0, gap: 10 },
|
|
122
|
+
search: {
|
|
123
|
+
color: theme.colors.foreground,
|
|
124
|
+
borderWidth: 1,
|
|
125
|
+
borderColor: theme.colors.border,
|
|
126
|
+
borderRadius: 8,
|
|
127
|
+
backgroundColor: theme.colors.surface0,
|
|
128
|
+
paddingHorizontal: 10,
|
|
129
|
+
paddingVertical: 8,
|
|
130
|
+
fontSize: 13,
|
|
131
|
+
},
|
|
132
|
+
sectionHeader: { gap: 4, marginTop: compact ? 2 : 4 },
|
|
133
|
+
sectionHeaderRow: { flexDirection: "row", alignItems: "center", flexWrap: "wrap", gap: 10 },
|
|
134
|
+
sectionTitle: {
|
|
135
|
+
color: theme.colors.foreground,
|
|
136
|
+
fontSize: compact ? 16 : 18,
|
|
137
|
+
fontWeight: "600",
|
|
138
|
+
},
|
|
139
|
+
source: { color: theme.colors.foregroundMuted, fontSize: 12 },
|
|
140
|
+
muted: { color: theme.colors.foregroundMuted, fontSize: 13 },
|
|
141
|
+
error: { color: theme.colors.statusDanger, fontSize: 13 },
|
|
142
|
+
docsActions: { flexDirection: "row", alignItems: "center", flexWrap: "wrap", gap: 6 },
|
|
143
|
+
docLink: {
|
|
144
|
+
paddingHorizontal: 8,
|
|
145
|
+
paddingVertical: 5,
|
|
146
|
+
borderWidth: 1,
|
|
147
|
+
borderColor: theme.colors.border,
|
|
148
|
+
borderRadius: 7,
|
|
149
|
+
backgroundColor: theme.colors.surface1,
|
|
150
|
+
},
|
|
151
|
+
docLinkPressed: { opacity: 0.72 },
|
|
152
|
+
docLinkText: { color: theme.colors.accent, fontSize: 12, fontWeight: "600" },
|
|
153
|
+
refresh: {
|
|
154
|
+
flexDirection: "row",
|
|
155
|
+
alignItems: "center",
|
|
156
|
+
gap: 6,
|
|
157
|
+
paddingHorizontal: 10,
|
|
158
|
+
paddingVertical: 6,
|
|
159
|
+
borderWidth: 1,
|
|
160
|
+
borderColor: theme.colors.border,
|
|
161
|
+
borderRadius: 8,
|
|
162
|
+
backgroundColor: theme.colors.surface1,
|
|
163
|
+
},
|
|
164
|
+
refreshLabel: { color: theme.colors.foreground, fontSize: 13 },
|
|
165
|
+
helpActions: {
|
|
166
|
+
flexDirection: "row",
|
|
167
|
+
alignItems: "center",
|
|
168
|
+
flexWrap: "wrap",
|
|
169
|
+
gap: 8,
|
|
170
|
+
},
|
|
171
|
+
helpReport: {
|
|
172
|
+
maxWidth: "100%",
|
|
173
|
+
padding: compact ? 10 : 12,
|
|
174
|
+
borderWidth: 1,
|
|
175
|
+
borderColor: theme.colors.border,
|
|
176
|
+
borderRadius: 10,
|
|
177
|
+
backgroundColor: theme.colors.surface1,
|
|
178
|
+
},
|
|
179
|
+
helpReportText: {
|
|
180
|
+
color: theme.colors.foreground,
|
|
181
|
+
fontSize: compact ? 11 : 12,
|
|
182
|
+
lineHeight: compact ? 16 : 18,
|
|
183
|
+
},
|
|
184
|
+
helpLinkText: { color: theme.colors.accent, fontSize: 13, fontWeight: "600" },
|
|
185
|
+
cardHeader: {
|
|
186
|
+
flexDirection: "row",
|
|
187
|
+
alignItems: "center",
|
|
188
|
+
justifyContent: "space-between",
|
|
189
|
+
flexWrap: "wrap",
|
|
190
|
+
gap: 8,
|
|
191
|
+
},
|
|
192
|
+
card: {
|
|
193
|
+
gap: 8,
|
|
194
|
+
padding: compact ? 10 : 12,
|
|
195
|
+
borderWidth: 1,
|
|
196
|
+
borderColor: theme.colors.border,
|
|
197
|
+
borderRadius: 10,
|
|
198
|
+
backgroundColor: theme.colors.surface1,
|
|
199
|
+
},
|
|
200
|
+
cardTitle: { color: theme.colors.foreground, fontSize: 14, fontWeight: "600" },
|
|
201
|
+
row: { flexDirection: "row", gap: 8, flexWrap: "wrap" },
|
|
202
|
+
rowLabel: { color: theme.colors.foregroundMuted, fontSize: 13 },
|
|
203
|
+
rowValue: { color: theme.colors.foreground, fontSize: 13, flexShrink: 1 },
|
|
204
|
+
setting: {
|
|
205
|
+
gap: 5,
|
|
206
|
+
paddingVertical: 10,
|
|
207
|
+
borderTopWidth: 1,
|
|
208
|
+
borderTopColor: theme.colors.border,
|
|
209
|
+
},
|
|
210
|
+
settingHeader: {
|
|
211
|
+
flexDirection: "row",
|
|
212
|
+
alignItems: "baseline",
|
|
213
|
+
justifyContent: "space-between",
|
|
214
|
+
gap: 12,
|
|
215
|
+
},
|
|
216
|
+
settingPath: { color: theme.colors.foregroundMuted, fontSize: 11, flexShrink: 1 },
|
|
217
|
+
settingDescription: { color: theme.colors.foregroundMuted, fontSize: 12, lineHeight: 17 },
|
|
218
|
+
settingValue: { color: theme.colors.foreground, fontSize: 13, fontWeight: "600" },
|
|
219
|
+
collectionSummary: { color: theme.colors.foregroundMuted, fontSize: 12 },
|
|
220
|
+
chipList: { flexDirection: "row", flexWrap: "wrap", gap: 6 },
|
|
221
|
+
chip: {
|
|
222
|
+
paddingHorizontal: 8,
|
|
223
|
+
paddingVertical: 5,
|
|
224
|
+
borderWidth: 1,
|
|
225
|
+
borderColor: theme.colors.border,
|
|
226
|
+
borderRadius: 999,
|
|
227
|
+
backgroundColor: theme.colors.surface2,
|
|
228
|
+
},
|
|
229
|
+
chipText: { color: theme.colors.foreground, fontSize: 12 },
|
|
230
|
+
recordList: { gap: 6 },
|
|
231
|
+
recordRow: {
|
|
232
|
+
flexDirection: compact ? "column" : "row",
|
|
233
|
+
alignItems: compact ? "flex-start" : "baseline",
|
|
234
|
+
gap: compact ? 2 : 12,
|
|
235
|
+
paddingVertical: 5,
|
|
236
|
+
},
|
|
237
|
+
recordKey: {
|
|
238
|
+
width: compact ? undefined : 150,
|
|
239
|
+
color: theme.colors.foregroundMuted,
|
|
240
|
+
fontSize: 12,
|
|
241
|
+
fontWeight: "600",
|
|
242
|
+
},
|
|
243
|
+
recordValue: { flex: 1, color: theme.colors.foreground, fontSize: 12 },
|
|
244
|
+
editorActions: {
|
|
245
|
+
flexDirection: "row",
|
|
246
|
+
alignItems: "center",
|
|
247
|
+
justifyContent: "flex-end",
|
|
248
|
+
gap: 8,
|
|
249
|
+
padding: 10,
|
|
250
|
+
borderWidth: 1,
|
|
251
|
+
borderColor: theme.colors.border,
|
|
252
|
+
borderRadius: 10,
|
|
253
|
+
backgroundColor: theme.colors.surface1,
|
|
254
|
+
},
|
|
255
|
+
editorAction: {
|
|
256
|
+
paddingHorizontal: 12,
|
|
257
|
+
paddingVertical: 8,
|
|
258
|
+
borderWidth: 1,
|
|
259
|
+
borderColor: theme.colors.border,
|
|
260
|
+
borderRadius: 8,
|
|
261
|
+
},
|
|
262
|
+
editorActionPrimary: {
|
|
263
|
+
backgroundColor: theme.colors.accent,
|
|
264
|
+
borderColor: theme.colors.accent,
|
|
265
|
+
},
|
|
266
|
+
editorActionText: { color: theme.colors.foreground, fontSize: 13, fontWeight: "600" },
|
|
267
|
+
editorActionTextPrimary: { color: theme.colors.accentForeground },
|
|
268
|
+
scalarInput: {
|
|
269
|
+
minWidth: 180,
|
|
270
|
+
maxWidth: 420,
|
|
271
|
+
color: theme.colors.foreground,
|
|
272
|
+
borderWidth: 1,
|
|
273
|
+
borderColor: theme.colors.border,
|
|
274
|
+
borderRadius: 7,
|
|
275
|
+
backgroundColor: theme.colors.surface0,
|
|
276
|
+
paddingHorizontal: 9,
|
|
277
|
+
paddingVertical: 6,
|
|
278
|
+
fontSize: 13,
|
|
279
|
+
},
|
|
280
|
+
resetAction: { color: theme.colors.accent, fontSize: 12, fontWeight: "600" },
|
|
281
|
+
}),
|
|
282
|
+
[compact, theme],
|
|
283
|
+
);
|
|
284
|
+
}
|