@ai-ecoverse/slicc-spectrum 2.0.3 → 2.2.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.
@@ -2,7 +2,7 @@ import '@adobe/spectrum-wc/components/button/swc-button.js';
2
2
  import '@adobe/spectrum-wc-icons/swc-icon-alert-triangle.js';
3
3
  import '@spectrum-web-components/alert-dialog/sp-alert-dialog.js';
4
4
  import { type PropertyValues } from 'lit';
5
- import type { Approval, ApprovalDecision, GuestMessageApproval, GuestToolApproval, SliccModel, SudoApproval, TrayApproval } from '../model/types.js';
5
+ import type { Approval, ApprovalDecision, GuestMessageApproval, GuestToolApproval, SecretApproval, SliccModel, SudoApproval, TrayApproval } from '../model/types.js';
6
6
  import { ModelElement } from './base.js';
7
7
  export { deadline } from './messages.js';
8
8
  export declare function countdown(ms: number): string;
@@ -13,6 +13,11 @@ export declare function guestAlwaysHint(approval: GuestMessageApproval | GuestTo
13
13
  export declare function guestAsking(approval: GuestMessageApproval | GuestToolApproval): string;
14
14
  export declare function trayTitle(approval: TrayApproval): string;
15
15
  export declare function trayAsking(approval: TrayApproval): string;
16
+ export declare function secretTitle(approval: SecretApproval): string;
17
+ export declare function secretAsking(approval: SecretApproval): string;
18
+ export declare function processLine(approval: SecretApproval): string;
19
+ export declare function revealWarning(approval: SecretApproval): string;
20
+ export declare function secretWaiting(approval: SecretApproval): string;
16
21
  export declare function approved(approval: Approval): string;
17
22
  export declare function truncated(approval: Approval): boolean;
18
23
  export declare function guestWaiting(approval: GuestMessageApproval | GuestToolApproval): string;
@@ -20,6 +25,7 @@ type Judged = GuestMessageApproval | GuestToolApproval | SudoApproval;
20
25
  export declare function offersAlways(approval: Approval): boolean;
21
26
  export declare function verdictNote(approval: Judged): string;
22
27
  export declare function waiting(model: SliccModel | null, now: number): Approval[];
28
+ export declare const approvalKinds: readonly Approval['kind'][];
23
29
  export declare class SliccApprovals extends ModelElement {
24
30
  #private;
25
31
  static properties: {
@@ -38,6 +44,9 @@ export declare class SliccApprovals extends ModelElement {
38
44
  gone: {
39
45
  state: boolean;
40
46
  };
47
+ frameError: {
48
+ state: boolean;
49
+ };
41
50
  };
42
51
  now: number;
43
52
  busy: ApprovalDecision | '';
@@ -49,6 +58,10 @@ export declare class SliccApprovals extends ModelElement {
49
58
  approval: Approval;
50
59
  reason: 'elsewhere' | 'expired';
51
60
  } | null;
61
+ frameError: {
62
+ id: string;
63
+ message: string;
64
+ } | null;
52
65
  arming: number;
53
66
  constructor();
54
67
  static styles: (import("lit").CSSResult[] | import("lit").CSSResult)[];
@@ -8,7 +8,7 @@ import '@adobe/spectrum-wc/patterns/ai-toolkit/conversation-thread/swc-conversat
8
8
  import '@adobe/spectrum-wc-icons/swc-icon-attach.js';
9
9
  import '@adobe/spectrum-wc-icons/swc-icon-chevron-down.js';
10
10
  import '@adobe/spectrum-wc-icons/swc-icon-new.js';
11
- import { type TemplateResult } from 'lit';
11
+ import { type PropertyValues, type TemplateResult } from 'lit';
12
12
  import type { Message, SliccModel } from '../model/types.js';
13
13
  import { ThemedElement } from './base.js';
14
14
  export declare function carriesFiles(event: DragEvent): boolean;
@@ -40,6 +40,7 @@ export declare class SliccChat extends ThemedElement {
40
40
  protected subscribe(model: SliccModel): Array<() => void>;
41
41
  connectedCallback(): void;
42
42
  disconnectedCallback(): void;
43
+ protected willUpdate(changed: PropertyValues): void;
43
44
  protected updated(): void;
44
45
  protected firstUpdated(): void;
45
46
  focus(): void;
@@ -1,3 +1,4 @@
1
1
  import { type TemplateResult } from 'lit';
2
+ export declare const controlStyles: import("lit").CSSResult;
2
3
  export declare function displayCommand(command: string): string;
3
4
  export declare function commandText(command: string, multiline?: boolean): Array<string | TemplateResult>;
@@ -17,6 +17,7 @@ export declare class Ends {
17
17
  has(id: string): boolean;
18
18
  hidden(id: string): boolean;
19
19
  clear(): void;
20
+ forget(id: string): void;
20
21
  observe(): void;
21
22
  disconnect(): void;
22
23
  }
@@ -7,7 +7,7 @@ import '@adobe/spectrum-wc-icons/swc-icon-info-circle.js';
7
7
  import '@spectrum-web-components/menu/sp-menu-item.js';
8
8
  import '@spectrum-web-components/picker/sp-picker.js';
9
9
  import { nothing, type PropertyValues, type TemplateResult } from 'lit';
10
- import type { AuditEntry, EndpointsEntry, ImportCandidate, ImportKind, LinkedDevice, PendingRequest, PolicyEntry, PutOptions, SecretView, SliccModel, VaultPort } from '../model/types.js';
10
+ import type { AskRevealEntry, AuditEntry, EndpointsEntry, ImportCandidate, ImportKind, LinkedDevice, PendingRequest, PolicyEntry, PutOptions, RevealEntry, SecretView, SliccModel, VaultPort } from '../model/types.js';
11
11
  import { ThemedElement } from './base.js';
12
12
  import { type PopupDetail } from './vault.js';
13
13
  export declare function until(at: number, now?: number): string;
@@ -21,6 +21,7 @@ export declare function putOptions(secret: SecretView): PutOptions | undefined;
21
21
  export declare function agentUse(secret: SecretView): boolean;
22
22
  export declare function byName(a: SecretView, b: SecretView): number;
23
23
  export declare function sourceLine(secret: SecretView, devices: readonly LinkedDevice[]): string;
24
+ export declare function toProgram(entry: AuditEntry): entry is RevealEntry | AskRevealEntry;
24
25
  export declare function revealed(name: string, entries: readonly AuditEntry[], now?: number, more?: boolean): TemplateResult | null;
25
26
  export declare function changes(entry: PolicyEntry, devices: readonly LinkedDevice[]): string[][];
26
27
  export declare function endpointsLine(entry: EndpointsEntry, named?: (provider: string) => string): TemplateResult;
@@ -1,5 +1,5 @@
1
1
  import { LitElement, type PropertyValues } from 'lit';
2
- import type { ButtonConfig, ExecGrant, ExecMode, ExitName, LinkedDevice, PolicyChange, PopupIntent, PopupState, Rule, SliccModel, VaultPort, Widening } from '../model/types.js';
2
+ import type { ButtonConfig, ExecGrant, ExecMode, ExitName, LinkedDevice, PolicyChange, PopupIntent, PopupState, Rule, SliccModel, ValueConfig, ValueEvent, VaultPort, Widening } from '../model/types.js';
3
3
  export declare function devicesOf(model: SliccModel | null): readonly LinkedDevice[];
4
4
  export declare function deviceName(id: string, devices: readonly LinkedDevice[]): string;
5
5
  export declare function exitLabel(exit: ExitName, devices: readonly LinkedDevice[]): string;
@@ -40,3 +40,31 @@ export declare class SliccVaultButton extends LitElement {
40
40
  focus(): void;
41
41
  protected updated(changed: PropertyValues): void;
42
42
  }
43
+ export type ValueDetail = Extract<ValueEvent, {
44
+ event: 'done' | 'gone' | 'error' | 'escape';
45
+ }>;
46
+ export declare const frameHeight = 480;
47
+ export declare const frameInset = 4;
48
+ export declare class SliccVaultValue extends LitElement {
49
+ #private;
50
+ static properties: {
51
+ vault: {
52
+ attribute: boolean;
53
+ };
54
+ request: {
55
+ attribute: boolean;
56
+ };
57
+ config: {
58
+ attribute: boolean;
59
+ };
60
+ };
61
+ vault: VaultPort | null | undefined;
62
+ request: string;
63
+ config: ValueConfig;
64
+ static styles: import("lit").CSSResult;
65
+ constructor();
66
+ connectedCallback(): void;
67
+ disconnectedCallback(): void;
68
+ focus(): void;
69
+ protected updated(changed: PropertyValues): void;
70
+ }
@@ -4,6 +4,8 @@ import type { Clock } from './clock.js';
4
4
  import { type Effects } from './script.js';
5
5
  export declare class DummyAgent extends Emitter<AgentEvents> implements AgentPort {
6
6
  #private;
7
+ olderTicks: number;
8
+ readonly olderCalls: string[];
7
9
  importProfile?: AgentPort['importProfile'];
8
10
  importCancel?: AgentPort['importCancel'];
9
11
  importing?: AgentPort['importing'];
@@ -33,7 +35,10 @@ export declare class DummyAgent extends Emitter<AgentEvents> implements AgentPor
33
35
  clear(agentId: string): void;
34
36
  setModel(agentId: string, model: string): void;
35
37
  setThinking(agentId: string, thinking: Thinking): void;
36
- older(): Promise<readonly Message[]>;
38
+ paginate(keep: number, size: number, ids?: readonly string[]): void;
39
+ failOlder(times?: number): void;
40
+ hasOlder(agentId: string): boolean;
41
+ older(agentId: string): Promise<readonly Message[]>;
37
42
  commands(agentId: string): readonly SlashCommand[];
38
43
  ready(): Promise<void>;
39
44
  createScoop(parentId: string, name: string): Agent;
@@ -1,14 +1,16 @@
1
1
  import { Emitter } from '../model/emitter.js';
2
- import type { Approval, ApprovalDecision, ApprovalEnd, ApprovalsEvents, ApprovalsPort } from '../model/types.js';
2
+ import type { Approval, ApprovalDecision, ApprovalEnd, ApprovalsEvents, ApprovalsPort, PendingRequest, SecretApproval } from '../model/types.js';
3
3
  import type { Clock } from './clock.js';
4
- export type ApprovalScenario = 'agent' | 'user' | 'many' | 'follower' | 'fail' | 'soon' | 'elsewhere' | 'withdrawn' | 'secrets' | 'judge-denied' | 'level-1' | 'level-2' | 'level-3' | 'checking' | 'no-verdict' | 'legacy' | 'guest' | 'guest-follower' | 'guest-always' | 'long' | 'controls-cr' | 'controls-lf' | 'controls-place' | 'controls-cwd' | 'guest-args' | 'guest-empty' | 'guest-truncated' | 'tray' | 'tray-url' | 'tray-rotate' | 'tray-unlink' | 'tray-expired' | 'none';
4
+ import type { DummyVault } from './vault.js';
5
+ export type ApprovalScenario = 'agent' | 'user' | 'many' | 'follower' | 'fail' | 'soon' | 'elsewhere' | 'withdrawn' | 'secrets' | 'judge-denied' | 'level-1' | 'level-2' | 'level-3' | 'checking' | 'no-verdict' | 'legacy' | 'guest' | 'guest-follower' | 'guest-always' | 'long' | 'controls-cr' | 'controls-lf' | 'controls-place' | 'controls-cwd' | 'guest-args' | 'guest-empty' | 'guest-truncated' | 'tray' | 'tray-url' | 'tray-rotate' | 'tray-unlink' | 'tray-expired' | 'secret' | 'secret-enter' | 'secret-reveal' | 'secret-long' | 'none';
5
6
  export declare const guestArgs: string;
7
+ export declare function pendingAsk(approval: SecretApproval): PendingRequest;
6
8
  export declare function approvalFixtures(scenario: ApprovalScenario, now?: number): Approval[];
7
9
  export declare class DummyApprovals extends Emitter<ApprovalsEvents> implements ApprovalsPort {
8
10
  #private;
9
11
  decisions: Array<[string, ApprovalDecision]>;
10
12
  decide?: (id: string, decision: ApprovalDecision) => Promise<void>;
11
- constructor(scenario: ApprovalScenario, time: Clock);
13
+ constructor(scenario: ApprovalScenario, time: Clock, vault?: DummyVault);
12
14
  raise(approval: Approval): void;
13
15
  end(id: string, reason: ApprovalEnd): void;
14
16
  list(): readonly Approval[];
@@ -47,6 +47,7 @@ export interface DummyOptions {
47
47
  import?: ImportScenario | 'off';
48
48
  login?: DummyLogin;
49
49
  budget?: BudgetScenario;
50
+ older?: 'paged' | 'off';
50
51
  }
51
52
  export interface DummyModel extends SliccModel {
52
53
  settings: DummySettings;
@@ -63,4 +64,4 @@ export interface DummyModel extends SliccModel {
63
64
  export declare function vaultAccounts(accounts: readonly Account[]): Account[];
64
65
  export declare const docsUrl = "https://docs.example/mcp";
65
66
  export declare const movedDocs = "https://docs.eu.example/mcp";
66
- export declare function createDummyModel({ delay, storage, updates, packages, confirm, beta, mounts, network, tailnet, links, leaders, changes, notices, tabs, approvals, asks, follow, vault, guests, accounts, providers, mcp, servers, transport, hold, readonly, agent: arrival, browser: scenario, sprinkles, monitor, import: imports, login, budget, }?: DummyOptions): DummyModel;
67
+ export declare function createDummyModel({ delay, storage, updates, packages, confirm, beta, mounts, network, tailnet, links, leaders, changes, notices, tabs, approvals, asks, follow, vault, guests, accounts, providers, mcp, servers, transport, hold, readonly, agent: arrival, browser: scenario, sprinkles, monitor, import: imports, login, budget, older, }?: DummyOptions): DummyModel;
@@ -1,5 +1,5 @@
1
1
  import { Emitter } from '../model/emitter.js';
2
- import type { AuditEntry, AuditPage, Availability, ButtonConfig, ButtonEvent, ButtonMessage, ErrorCode, ImportKind, ImportPick, ImportResult, PolicyNotice, PopupIntent, PutOptions, RecordKind, RefusedRule, RequestState, SealResult, SecretView, VaultButton, VaultEndpointChange, VaultError, VaultEvents, VaultList, VaultPort, VaultStatus } from '../model/types.js';
2
+ import type { AuditEntry, AuditPage, Availability, ButtonConfig, ButtonEvent, ButtonMessage, ErrorCode, ImportKind, ImportPick, ImportResult, PendingRequest, PolicyNotice, PopupIntent, PutOptions, RecordKind, RefusedRule, RequestState, SealResult, SecretView, ValueConfig, ValueEvent, ValueMessage, VaultButton, VaultEndpointChange, VaultError, VaultEvents, VaultList, VaultPort, VaultStatus, VaultValueFrame } from '../model/types.js';
3
3
  import type { Clock } from './clock.js';
4
4
  export type VaultScenario = 'empty' | 'secrets' | 'policy' | 'notice' | 'locked' | 'paused' | 'request' | 'backup' | 'waiting' | 'purged' | 'session' | 'endpoints-fail';
5
5
  export declare function vaultSecrets(now?: number): SecretView[];
@@ -25,6 +25,17 @@ export declare class DummyVaultButton implements VaultButton {
25
25
  post(message: ButtonMessage): void;
26
26
  listen(listener: (event: ButtonEvent) => void): () => void;
27
27
  }
28
+ export declare class DummyValueFrame implements VaultValueFrame {
29
+ #private;
30
+ element: HTMLElement;
31
+ request: string;
32
+ config: ValueConfig | null;
33
+ messages: ValueMessage[];
34
+ arming: number;
35
+ constructor(vault: DummyVault, time: Clock, request: string);
36
+ post(message: ValueMessage): void;
37
+ listen(listener: (event: ValueEvent) => void): () => void;
38
+ }
28
39
  export interface DummyImport {
29
40
  kind: ImportKind;
30
41
  size: number;
@@ -34,6 +45,9 @@ export interface DummyImport {
34
45
  export declare class DummyVault extends Emitter<VaultEvents> implements VaultPort {
35
46
  #private;
36
47
  buttons: DummyVaultButton[];
48
+ frames: DummyValueFrame[];
49
+ answered: Set<string>;
50
+ revealed: string[];
37
51
  puts: {
38
52
  name: string;
39
53
  request?: string;
@@ -72,6 +86,11 @@ export declare class DummyVault extends Emitter<VaultEvents> implements VaultPor
72
86
  export(passphrase: string): Promise<Uint8Array>;
73
87
  lock(): Promise<void>;
74
88
  button(): DummyVaultButton;
89
+ valueFrame(request: string): DummyValueFrame;
90
+ hold(request: PendingRequest): void;
91
+ ask(request: string): PendingRequest | undefined;
92
+ seal(request: string, value: string): Promise<SealResult>;
93
+ allow(request: string): Promise<void>;
75
94
  autoLabel(): string;
76
95
  autoIntent(): PopupIntent;
77
96
  answer(intent: PopupIntent): Promise<void>;
@@ -26,4 +26,4 @@ export { DummyTabs, tabsFixtures } from './dummy/tabs.js';
26
26
  export type { BetaScenario, DummyUpdatesOptions, PackageConfirm, PackageScenario, UpdateScenario, } from './dummy/updates.js';
27
27
  export { betaFixtures, DummyUpdates, packageFixtures, updateFixtures, } from './dummy/updates.js';
28
28
  export type { VaultScenario } from './dummy/vault.js';
29
- export { DummyVault, DummyVaultButton, vaultAudit, vaultFixtures, vaultNotice, vaultOlder, vaultPaused, vaultPinned, vaultPolicy, vaultPurged, vaultRefused, vaultSecrets, vaultSessions, } from './dummy/vault.js';
29
+ export { DummyValueFrame, DummyVault, DummyVaultButton, vaultAudit, vaultFixtures, vaultNotice, vaultOlder, vaultPaused, vaultPinned, vaultPolicy, vaultPurged, vaultRefused, vaultSecrets, vaultSessions, } from './dummy/vault.js';
@@ -293,6 +293,7 @@ export interface AgentPort extends Subscribable<AgentEvents> {
293
293
  setModel(agentId: string, model: string): void;
294
294
  setThinking(agentId: string, thinking: Thinking): void;
295
295
  older(agentId: string, before: string): Promise<readonly Message[]>;
296
+ hasOlder?(agentId: string): boolean;
296
297
  commands(agentId: string): readonly SlashCommand[];
297
298
  toolLabel?(agentId: string, callIds: readonly string[]): Promise<string | null>;
298
299
  ready(): Promise<void>;
@@ -1057,7 +1058,27 @@ export interface TrayApproval {
1057
1058
  createdAt: number;
1058
1059
  expiresAt: number;
1059
1060
  }
1060
- export type Approval = SudoApproval | GuestMessageApproval | GuestToolApproval | TrayApproval;
1061
+ export interface SecretApproval {
1062
+ id: string;
1063
+ kind: 'secret';
1064
+ mode: 'enter' | 'reveal';
1065
+ name: string;
1066
+ prompt?: string;
1067
+ reveal: boolean;
1068
+ requester: {
1069
+ kind: 'agent' | 'user';
1070
+ name: string;
1071
+ where?: string;
1072
+ };
1073
+ process: {
1074
+ exe: string;
1075
+ argv: string[];
1076
+ cwd: string;
1077
+ };
1078
+ createdAt: number;
1079
+ expiresAt: number;
1080
+ }
1081
+ export type Approval = SudoApproval | GuestMessageApproval | GuestToolApproval | TrayApproval | SecretApproval;
1061
1082
  export type ApprovalEnd = 'answered' | 'withdrawn' | 'expired';
1062
1083
  export interface ApprovalsEvents {
1063
1084
  approvals: readonly Approval[];
@@ -1104,8 +1125,8 @@ export type RecordKind = 'secret' | 'grant' | 'model' | 'mcp';
1104
1125
  export type RecordState = 'active' | 'inert' | 'removed';
1105
1126
  export type RecordSource = 'settings' | 'popup' | 'process' | `jerk:${string}@${DeviceId}` | `oauth:${string}` | `import:${string}`;
1106
1127
  export type LockMode = 'auto' | 'passkey' | 'passphrase';
1107
- export type RequestKind = 'value' | 'oauth' | 'jerk-seal' | 'jerk' | 'unseal';
1108
- export type RequestState = 'pending' | 'done' | 'cancelled' | 'expired';
1128
+ export type RequestKind = 'value' | 'oauth' | 'jerk-seal' | 'jerk' | 'unseal' | 'ask';
1129
+ export type RequestState = 'pending' | 'done' | 'cancelled' | 'expired' | 'withdrawn';
1109
1130
  export type ErrorCode = 'EINVAL' | 'ENOENT' | 'EACCES' | 'EEXIST' | 'EAGAIN' | 'ETIMEDOUT' | 'ENOTCONN' | 'ENOTSUP';
1110
1131
  export type ErrorCause = 'policy-paused' | 'no-placeholder' | 'url-invalid' | 'placeholder-in-url' | 'placeholder-in-header-name' | 'url-credentials' | 'insecure-destination' | 'path-ambiguous' | 'exit-encoded-bodies' | 'record-removed' | 'record-kind' | 'record-expired' | 'vault-locked' | 'no-rule' | 'rule-domain' | 'rule-request' | 'rule-exit' | 'placeholder-repeated' | 'mcp-server' | 'exit-follows-redirects' | 'value-overlaps' | 'basic-invalid' | 'basic-user' | 'header-unsafe' | 'users-off' | 'endpoint-protected' | 'endpoint-model' | 'mcp-body-framing' | 'changed';
1111
1132
  export interface VaultError {
@@ -1159,11 +1180,25 @@ export interface PendingRequest {
1159
1180
  name?: string;
1160
1181
  provider?: string;
1161
1182
  prompt?: string;
1183
+ mode?: 'enter' | 'reveal';
1184
+ reveal?: boolean;
1185
+ replace?: boolean;
1186
+ requester?: AskRequester;
1162
1187
  uid: number;
1163
1188
  tag: string | null;
1164
1189
  createdAt: number;
1165
1190
  expiresAt: number;
1166
1191
  }
1192
+ export interface AskRequester {
1193
+ kind: 'agent' | 'user';
1194
+ name?: string;
1195
+ where?: string;
1196
+ exe: string;
1197
+ argv: string[];
1198
+ cwd: string;
1199
+ tty: string | null;
1200
+ stdin: 'tty' | 'none' | 'pipe' | 'file';
1201
+ }
1167
1202
  export interface ScrubState {
1168
1203
  needed: boolean;
1169
1204
  version: number;
@@ -1240,6 +1275,11 @@ export type PolicyChange = {
1240
1275
  field: string;
1241
1276
  from: number;
1242
1277
  to: number;
1278
+ } | {
1279
+ kind: 'reveal';
1280
+ field: 'agent';
1281
+ from: boolean;
1282
+ to: boolean;
1243
1283
  };
1244
1284
  export type PolicyFile = '/etc/fnox/config.toml' | '/etc/slicc/secrets-policy.toml';
1245
1285
  export interface PolicyNotice {
@@ -1292,6 +1332,15 @@ export interface RevealEntry extends AuditBase {
1292
1332
  ticket: string;
1293
1333
  consumed: boolean;
1294
1334
  }
1335
+ export interface AskRevealEntry extends AuditBase {
1336
+ type: 'reveal';
1337
+ uid: number;
1338
+ exe: string;
1339
+ argv: string;
1340
+ cwd: string;
1341
+ requester: 'agent' | 'user';
1342
+ request: string;
1343
+ }
1295
1344
  export interface SealEntry extends AuditBase {
1296
1345
  type: 'seal';
1297
1346
  source: RecordSource;
@@ -1349,7 +1398,7 @@ export interface PolicyEntry {
1349
1398
  changes?: PolicyChange[];
1350
1399
  warning?: string;
1351
1400
  }
1352
- export type AuditEntry = InjectionEntry | SessionEntry | McpEntry | RevealEntry | SealEntry | RemoveEntry | RefreshEntry | EndpointsEntry | PolicyEntry;
1401
+ export type AuditEntry = InjectionEntry | SessionEntry | McpEntry | RevealEntry | AskRevealEntry | SealEntry | RemoveEntry | RefreshEntry | EndpointsEntry | PolicyEntry;
1353
1402
  export interface AuditPage {
1354
1403
  audit: AuditEntry[];
1355
1404
  more: boolean;
@@ -1477,6 +1526,56 @@ export interface VaultButton {
1477
1526
  post(message: ButtonMessage): void;
1478
1527
  listen(listener: (event: ButtonEvent) => void): () => void;
1479
1528
  }
1529
+ export interface ValueConfig {
1530
+ theme?: 'light' | 'dark';
1531
+ dir?: 'ltr' | 'rtl';
1532
+ lang?: string;
1533
+ scale?: 'medium' | 'large';
1534
+ }
1535
+ export type ValueMessage = {
1536
+ type: 'slicc-vault';
1537
+ v: 1;
1538
+ op: 'value';
1539
+ request: string;
1540
+ config: ValueConfig;
1541
+ } | {
1542
+ type: 'slicc-vault';
1543
+ v: 1;
1544
+ op: 'focus';
1545
+ };
1546
+ export type ValueEvent = {
1547
+ type: 'slicc-vault';
1548
+ v: 1;
1549
+ } & ({
1550
+ event: 'ready';
1551
+ } | {
1552
+ event: 'size';
1553
+ width: number;
1554
+ height: number;
1555
+ inset: number;
1556
+ } | {
1557
+ event: 'focus';
1558
+ direction: 'next' | 'previous';
1559
+ } | {
1560
+ event: 'done';
1561
+ request: string;
1562
+ state: 'sealed' | 'allowed';
1563
+ } | {
1564
+ event: 'gone';
1565
+ request: string;
1566
+ state: RequestState;
1567
+ } | {
1568
+ event: 'error';
1569
+ code: ErrorCode;
1570
+ message: string;
1571
+ } | {
1572
+ event: 'escape';
1573
+ });
1574
+ export interface VaultValueFrame {
1575
+ element: HTMLElement;
1576
+ post(message: ValueMessage): void;
1577
+ listen(listener: (event: ValueEvent) => void): () => void;
1578
+ }
1480
1579
  export interface VaultEvents {
1481
1580
  status: VaultStatus;
1482
1581
  list: VaultList;
@@ -1510,6 +1609,7 @@ export interface VaultPort extends Subscribable<VaultEvents> {
1510
1609
  endpoints?(change: VaultEndpointChange): Promise<void>;
1511
1610
  settings?(name: string, kind: RecordKind, settings: Record<string, string>): Promise<void>;
1512
1611
  button(): VaultButton;
1612
+ valueFrame?(request: string): VaultValueFrame;
1513
1613
  }
1514
1614
  export type GuestGate = 'user' | 'cone' | 'agent' | `scoop:${string}` | 'off';
1515
1615
  export interface GuestGates {
@@ -1,7 +1,7 @@
1
1
  import './app/spectrum.ts';
2
2
  import { SliccAgents } from './app/agents.js';
3
3
  import { SliccApp } from './app/app.js';
4
- import { SliccApprovals } from './app/approvals.js';
4
+ import { approvalKinds, SliccApprovals } from './app/approvals.js';
5
5
  import { SliccBrowser } from './app/browser.js';
6
6
  import { SliccChanges, SliccDiffPanel } from './app/changes.js';
7
7
  import { SliccChat } from './app/chat.js';
@@ -16,7 +16,7 @@ import { SliccNotices } from './app/notices.js';
16
16
  import { SliccSecrets } from './app/secrets.js';
17
17
  import { SliccUpdates } from './app/updates.js';
18
18
  import { SliccValueRequest } from './app/value-request.js';
19
- import { SliccVaultButton } from './app/vault.js';
19
+ import { SliccVaultButton, SliccVaultValue } from './app/vault.js';
20
20
  import { SliccCodeView, SliccDiffView } from './components/code-view.js';
21
21
  import { SliccDock } from './components/dock.js';
22
22
  import { SliccFileTree } from './components/file-tree.js';
@@ -36,5 +36,5 @@ export type { Listener, Subscribable } from './model/emitter.js';
36
36
  export { Emitter } from './model/emitter.js';
37
37
  export type * from './model/types.js';
38
38
  export { isVaultFailure } from './model/values.js';
39
- export { SliccAgents, SliccApp, SliccApprovals, SliccBrowser, SliccChanges, SliccChat, SliccCodeView, SliccComposer, SliccConfirm, SliccDiffPanel, SliccDiffView, SliccDock, SliccFiles, SliccFileTree, SliccFileView, SliccFollow, SliccFreezerImport, SliccGuestInvite, SliccNetwork, SliccNotices, SliccPrompt, SliccSecrets, SliccUpdates, SliccValueRequest, SliccVaultButton, };
39
+ export { approvalKinds, SliccAgents, SliccApp, SliccApprovals, SliccBrowser, SliccChanges, SliccChat, SliccCodeView, SliccComposer, SliccConfirm, SliccDiffPanel, SliccDiffView, SliccDock, SliccFiles, SliccFileTree, SliccFileView, SliccFollow, SliccFreezerImport, SliccGuestInvite, SliccNetwork, SliccNotices, SliccPrompt, SliccSecrets, SliccUpdates, SliccValueRequest, SliccVaultButton, SliccVaultValue, };
40
40
  export declare function define(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-spectrum",
3
- "version": "2.0.3",
3
+ "version": "2.2.0",
4
4
  "description": "Web components for SLICC on Spectrum Web Components: the terminal, the app shell and its surfaces",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -62,10 +62,10 @@
62
62
  "devDependencies": {
63
63
  "@adobe/spectrum-wc": "2.0.0-beta.6",
64
64
  "@adobe/spectrum-wc-icons": "2.0.0-beta.6",
65
- "@ai-ecoverse/slicc-cdp": "1.46.2",
66
- "@ai-ecoverse/slicc-kernel": "1.174.0",
65
+ "@ai-ecoverse/slicc-cdp": "1.46.4",
66
+ "@ai-ecoverse/slicc-kernel": "1.174.2",
67
67
  "@ai-ecoverse/slicc-shared-web": "2.13.10",
68
- "@ai-ecoverse/slicc-vault": "1.22.1",
68
+ "@ai-ecoverse/slicc-vault": "1.23.0",
69
69
  "@ai-ecoverse/wasm-bash": "5.3.0-23",
70
70
  "@ai-ecoverse/wasm-coreutils": "9.12.0-15",
71
71
  "@biomejs/biome": "2.6.4",
@@ -89,7 +89,7 @@
89
89
  "@wterm/core": "0.5.7",
90
90
  "@wterm/dom": "0.5.7",
91
91
  "@wterm/ghostty": "0.5.7",
92
- "dockview-core": "8.8.2",
92
+ "dockview-core": "8.8.3",
93
93
  "esbuild": "0.28.2",
94
94
  "happy-dom": "21.0.4",
95
95
  "lefthook": "2.2.2",