ftown 0.19.51 → 0.19.53

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.
Files changed (129) hide show
  1. package/claude-mod/hooks/register.js +6 -5
  2. package/dist/attention-store.d.ts +8 -0
  3. package/dist/attention-store.js +30 -0
  4. package/dist/attention-store.js.map +1 -1
  5. package/dist/bridge-auth.d.ts +1 -0
  6. package/dist/bridge-auth.js +2 -2
  7. package/dist/bridge-auth.js.map +1 -1
  8. package/dist/browser-access.js +8 -1
  9. package/dist/browser-access.js.map +1 -1
  10. package/dist/centrifugo-client.d.ts +11 -1
  11. package/dist/centrifugo-client.js +71 -69
  12. package/dist/centrifugo-client.js.map +1 -1
  13. package/dist/cli-client.d.ts +6 -0
  14. package/dist/cli-client.js +43 -18
  15. package/dist/cli-client.js.map +1 -1
  16. package/dist/command-rpc.d.ts +7 -2
  17. package/dist/command-rpc.js +62 -4
  18. package/dist/command-rpc.js.map +1 -1
  19. package/dist/direct-transport/loopback-server.d.ts +5 -1
  20. package/dist/direct-transport/loopback-server.js +19 -6
  21. package/dist/direct-transport/loopback-server.js.map +1 -1
  22. package/dist/direct-transport/peer-manager.d.ts +4 -0
  23. package/dist/direct-transport/peer-manager.js +16 -2
  24. package/dist/direct-transport/peer-manager.js.map +1 -1
  25. package/dist/ftown-cli.js +4 -1
  26. package/dist/ftown-cli.js.map +1 -1
  27. package/dist/index.js +54 -36
  28. package/dist/index.js.map +1 -1
  29. package/dist/local-api-server.d.ts +12 -0
  30. package/dist/local-api-server.js +190 -44
  31. package/dist/local-api-server.js.map +1 -1
  32. package/dist/local-pair-cli.d.ts +2 -3
  33. package/dist/local-pair-cli.js +12 -53
  34. package/dist/local-pair-cli.js.map +1 -1
  35. package/dist/mcp/fleet.d.ts +11 -9
  36. package/dist/mcp/fleet.js +61 -44
  37. package/dist/mcp/fleet.js.map +1 -1
  38. package/dist/mcp/http.d.ts +10 -9
  39. package/dist/mcp/http.js +133 -8
  40. package/dist/mcp/http.js.map +1 -1
  41. package/dist/mcp/legacy-relay.d.ts +2 -2
  42. package/dist/mcp/legacy-relay.js +4 -43
  43. package/dist/mcp/legacy-relay.js.map +1 -1
  44. package/dist/mcp/mcp-key-store.d.ts +52 -0
  45. package/dist/mcp/mcp-key-store.js +206 -0
  46. package/dist/mcp/mcp-key-store.js.map +1 -0
  47. package/dist/mcp/oauth.d.ts +5 -1
  48. package/dist/mcp/oauth.js +113 -39
  49. package/dist/mcp/oauth.js.map +1 -1
  50. package/dist/mcp/relay-handler.d.ts +2 -1
  51. package/dist/mcp/relay-handler.js +5 -40
  52. package/dist/mcp/relay-handler.js.map +1 -1
  53. package/dist/mcp/relay.d.ts +4 -4
  54. package/dist/mcp/relay.js +35 -85
  55. package/dist/mcp/relay.js.map +1 -1
  56. package/dist/mcp/secure-client.d.ts +23 -0
  57. package/dist/mcp/secure-client.js +124 -0
  58. package/dist/mcp/secure-client.js.map +1 -0
  59. package/dist/mcp/security-events.d.ts +65 -0
  60. package/dist/mcp/security-events.js +210 -0
  61. package/dist/mcp/security-events.js.map +1 -0
  62. package/dist/mcp/server.d.ts +1 -0
  63. package/dist/mcp/server.js +2 -2
  64. package/dist/mcp/server.js.map +1 -1
  65. package/dist/mcp/test-support.d.ts +32 -0
  66. package/dist/mcp/test-support.js +120 -0
  67. package/dist/mcp/test-support.js.map +1 -0
  68. package/dist/mcp-cli.js +56 -36
  69. package/dist/mcp-cli.js.map +1 -1
  70. package/dist/pairing-client.d.ts +1 -0
  71. package/dist/pairing-client.js +2 -2
  72. package/dist/pairing-client.js.map +1 -1
  73. package/dist/push-notifier.js +3 -1
  74. package/dist/push-notifier.js.map +1 -1
  75. package/dist/security/bridge/audit.d.ts +37 -0
  76. package/dist/security/bridge/audit.js +185 -0
  77. package/dist/security/bridge/audit.js.map +1 -0
  78. package/dist/security/bridge/direct.d.ts +22 -0
  79. package/dist/security/bridge/direct.js +72 -0
  80. package/dist/security/bridge/direct.js.map +1 -0
  81. package/dist/security/bridge/errors.d.ts +7 -0
  82. package/dist/security/bridge/errors.js +12 -0
  83. package/dist/security/bridge/errors.js.map +1 -0
  84. package/dist/security/bridge/execute.d.ts +3 -0
  85. package/dist/security/bridge/execute.js +37 -0
  86. package/dist/security/bridge/execute.js.map +1 -0
  87. package/dist/security/bridge/identity.d.ts +5 -0
  88. package/dist/security/bridge/identity.js +42 -0
  89. package/dist/security/bridge/identity.js.map +1 -0
  90. package/dist/security/bridge/local-client.d.ts +4 -0
  91. package/dist/security/bridge/local-client.js +43 -0
  92. package/dist/security/bridge/local-client.js.map +1 -0
  93. package/dist/security/bridge/metadata.d.ts +99 -0
  94. package/dist/security/bridge/metadata.js +23 -0
  95. package/dist/security/bridge/metadata.js.map +1 -0
  96. package/dist/security/bridge/native-wake.d.ts +16 -0
  97. package/dist/security/bridge/native-wake.js +15 -0
  98. package/dist/security/bridge/native-wake.js.map +1 -0
  99. package/dist/security/bridge/permissions.d.ts +11 -0
  100. package/dist/security/bridge/permissions.js +97 -0
  101. package/dist/security/bridge/permissions.js.map +1 -0
  102. package/dist/security/bridge/policy.d.ts +35 -0
  103. package/dist/security/bridge/policy.js +263 -0
  104. package/dist/security/bridge/policy.js.map +1 -0
  105. package/dist/security/bridge/security.d.ts +50 -0
  106. package/dist/security/bridge/security.js +298 -0
  107. package/dist/security/bridge/security.js.map +1 -0
  108. package/dist/security/bridge/snapshot.d.ts +14 -0
  109. package/dist/security/bridge/snapshot.js +77 -0
  110. package/dist/security/bridge/snapshot.js.map +1 -0
  111. package/dist/security/crypto.d.ts +17 -0
  112. package/dist/security/crypto.js +280 -0
  113. package/dist/security/crypto.js.map +1 -0
  114. package/dist/security/protocol.d.ts +389 -0
  115. package/dist/security/protocol.js +9 -0
  116. package/dist/security/protocol.js.map +1 -0
  117. package/dist/security-cli.d.ts +3 -0
  118. package/dist/security-cli.js +62 -0
  119. package/dist/security-cli.js.map +1 -0
  120. package/dist/solo/solo-server.js +24 -2
  121. package/dist/solo/solo-server.js.map +1 -1
  122. package/dist/types.d.ts +9 -2
  123. package/dist/wire-types.d.ts +3 -0
  124. package/dist/wire-types.js.map +1 -1
  125. package/hooks/notify.sh +1 -1
  126. package/muse-plugin/lib/ftown-hook.sh +6 -22
  127. package/opencode-plugin/ftown.js +33 -5
  128. package/package.json +4 -2
  129. package/pi-extension/ftown.js +33 -5
@@ -0,0 +1,389 @@
1
+ /**
2
+ * FROZEN CONTRACT — immutable once fan-out has started.
3
+ * If this contract is wrong or incomplete, STOP and report to the orchestrator;
4
+ * do not amend locally. Local amendments cause parallel implementers to diverge.
5
+ * Behavior/security rules: docs/investigations/2026-10-24-e2ee-contract.md.
6
+ * Types only. All implementation modules depend on this file, never vice versa.
7
+ */
8
+ /** Existing application JSON is intentionally open; domain handlers validate it. */
9
+ export type ApplicationJson = null | boolean | number | string | ApplicationJson[] | {
10
+ [key: string]: ApplicationJson;
11
+ };
12
+ export type EndpointKind = 'bridge' | 'browser' | 'mcp' | 'local-cli';
13
+ export type EndpointPermission = 'read' | 'control' | 'admin';
14
+ export type EnvelopePurpose = 'application' | 'hello' | 'welcome' | 'enroll' | 'enrolled' | 'mcp-approval';
15
+ export type SecureTransport = 'cloud' | 'local-http' | 'local-events' | 'loopback-ws' | 'webrtc';
16
+ export interface EndpointPublic {
17
+ version: 1;
18
+ /** Canonical base64url SHA-256 of the raw 65-byte P-256 public point. */
19
+ id: string;
20
+ /** Immutable account UUID, or solo:<bridgeId>; never an email alias. */
21
+ ownerId: string;
22
+ kind: EndpointKind;
23
+ /** Canonical unpadded base64url uncompressed P-256 point. */
24
+ publicKey: string;
25
+ }
26
+ export interface EndpointIdentity {
27
+ endpoint: EndpointPublic;
28
+ /** Full pair is required by HPKE Auth when privateKey is non-extractable. */
29
+ keyPair: CryptoKeyPair;
30
+ }
31
+ export interface EnvelopeHeader {
32
+ type: 'ftown_encrypted';
33
+ version: 1;
34
+ senderId: string;
35
+ recipientId: string;
36
+ ownerId: string;
37
+ bridgeId: string;
38
+ /** Actual transport-derived channel; included in authenticated data. */
39
+ channel: string;
40
+ purpose: EnvelopePurpose;
41
+ messageId: string;
42
+ createdAt: number;
43
+ expiresAt: number;
44
+ /** Null only for bootstrap/non-executable endpoint publications. */
45
+ receiverEpoch: string | null;
46
+ }
47
+ export interface SecureEnvelope extends EnvelopeHeader {
48
+ enc: string;
49
+ ciphertext: string;
50
+ }
51
+ export interface SecurePublication {
52
+ type: 'ftown_encrypted_batch';
53
+ version: 1;
54
+ envelopes: SecureEnvelope[];
55
+ }
56
+ export interface EnrollmentPacket {
57
+ type: 'ftown_enrollment';
58
+ version: 1;
59
+ /** Untrusted until the encrypted invitation is atomically redeemed. */
60
+ candidate: EndpointPublic;
61
+ envelope: SecureEnvelope;
62
+ }
63
+ export type SecureWirePacket = SecureEnvelope | SecurePublication | EnrollmentPacket;
64
+ export interface OpenContext {
65
+ ownerId: string;
66
+ bridgeId: string;
67
+ channel: string;
68
+ recipientId: string;
69
+ purpose: EnvelopePurpose;
70
+ }
71
+ /** Implemented/exported as named functions by ./crypto.ts. */
72
+ export interface SecureCrypto {
73
+ generateEndpoint(ownerId: string, kind: EndpointKind, extractable?: boolean): Promise<EndpointIdentity>;
74
+ importEndpoint(endpoint: EndpointPublic, privateKey: JsonWebKey, extractable?: boolean): Promise<EndpointIdentity>;
75
+ exportPublicKey(key: CryptoKey): Promise<string>;
76
+ importPublicKey(raw: string): Promise<CryptoKey>;
77
+ seal(identity: EndpointIdentity, recipient: EndpointPublic, header: EnvelopeHeader, plaintext: Uint8Array): Promise<SecureEnvelope>;
78
+ open(identity: EndpointIdentity, sender: EndpointPublic, envelope: SecureEnvelope, expected: OpenContext): Promise<Uint8Array>;
79
+ /** Untrusted wire input is intentionally unknown at this decoding boundary. */
80
+ parseSecureEnvelope(value: unknown): SecureEnvelope;
81
+ parseSecurePublication(value: unknown): SecurePublication;
82
+ }
83
+ export type SecurityErrorCode = 'security_setup_required' | 'secure_context_required' | 'storage_unavailable' | 'upgrade_required' | 'approval_required' | 'key_changed' | 'endpoint_revoked' | 'invalid_envelope' | 'authentication_failed' | 'wrong_context' | 'expired' | 'replayed' | 'epoch_changed' | 'permission_denied' | 'invitation_invalid' | 'invitation_expired' | 'invitation_consumed' | 'capacity_exceeded' | 'audit_unavailable' | 'outcome_unknown' | 'bridge_offline' | 'invalid_cursor' | 'key_unavailable';
84
+ /** Implementations throw sanitized errors with these fields; never raw secrets. */
85
+ export interface SecurityFailure {
86
+ code: SecurityErrorCode;
87
+ message: string;
88
+ retryable: boolean;
89
+ }
90
+ export interface ApprovedEndpoint {
91
+ endpoint: EndpointPublic;
92
+ label: string;
93
+ permissions: EndpointPermission[];
94
+ approvedAt: string;
95
+ /** Null for browser/local CLI; immutable OAuth grant for MCP. */
96
+ grantId: string | null;
97
+ /** Null means no time expiry; revocation remains enforced. */
98
+ expiresAt: string | null;
99
+ }
100
+ export interface ApprovedBridge {
101
+ bridgeId: string;
102
+ endpoint: EndpointPublic;
103
+ permissions: EndpointPermission[];
104
+ }
105
+ export interface BridgeInvitation {
106
+ version: 1;
107
+ invitationId: string;
108
+ ownerId: string;
109
+ bridgeId: string;
110
+ bridge: EndpointPublic;
111
+ /** Secret is only shown locally/in fragment and sent inside ciphertext. */
112
+ secret: string;
113
+ expiresAt: string;
114
+ /** Broker WebSocket URL is routing metadata, not a trust anchor; never the web/API origin. */
115
+ relayUrl: string | null;
116
+ /** Optional local discovery origin; never grants authorization. */
117
+ localOrigin: string | null;
118
+ }
119
+ export interface HelloMessage {
120
+ type: 'hello';
121
+ challenge: string;
122
+ }
123
+ export interface WelcomeMessage {
124
+ type: 'welcome';
125
+ challenge: string;
126
+ receiverEpoch: string;
127
+ }
128
+ export interface EnrollmentMessage {
129
+ type: 'enroll';
130
+ candidate: EndpointPublic;
131
+ invitationId: string;
132
+ invitationSecret: string;
133
+ label: string;
134
+ }
135
+ export interface EnrollmentReceipt {
136
+ type: 'enrolled';
137
+ invitationId: string;
138
+ approved: ApprovedEndpoint;
139
+ receiverEpoch: string;
140
+ }
141
+ export interface McpActionContext {
142
+ actionId: string;
143
+ parentActionId: string | null;
144
+ clientId: string;
145
+ grantId: string;
146
+ tool: string;
147
+ operation: string | null;
148
+ }
149
+ /** Constructed only after cryptographic and locally stored-policy validation. */
150
+ export interface VerifiedPrincipal {
151
+ endpoint: EndpointPublic;
152
+ bridgeId: string;
153
+ permissions: readonly EndpointPermission[];
154
+ policyGeneration: number;
155
+ grantId: string | null;
156
+ }
157
+ export type ApplicationRoute = {
158
+ kind: 'command';
159
+ requestId: string;
160
+ command: string;
161
+ sessionId: string | null;
162
+ } | {
163
+ kind: 'http';
164
+ requestId: string;
165
+ method: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
166
+ path: string;
167
+ } | {
168
+ kind: 'terminal';
169
+ sessionId: string;
170
+ frameType: string;
171
+ pairId: string | null;
172
+ } | {
173
+ kind: 'response';
174
+ requestId: string;
175
+ } | {
176
+ kind: 'publication';
177
+ };
178
+ export interface SecureApplication {
179
+ type: 'application';
180
+ route: ApplicationRoute;
181
+ /** Existing domain JSON; independently schema-validated before dispatch. */
182
+ data: ApplicationJson;
183
+ /** Only approved MCP endpoint kind may supply this non-authorizing context. */
184
+ mcp: McpActionContext | null;
185
+ }
186
+ export interface InboundTransportContext {
187
+ transport: SecureTransport;
188
+ channel: string;
189
+ bridgeId: string;
190
+ /** Null when not a direct peer; bound to endpoint during authenticated hello. */
191
+ pairId: string | null;
192
+ }
193
+ export interface VerifiedApplication {
194
+ principal: VerifiedPrincipal;
195
+ envelope: SecureEnvelope;
196
+ application: SecureApplication;
197
+ }
198
+ export interface McpApproval {
199
+ requestId: string;
200
+ grantId: string;
201
+ endpoint: EndpointPublic;
202
+ permissions: ('read' | 'control')[];
203
+ /** Pending approval expires unless activated by the approved MCP identity. */
204
+ expiresAt: string;
205
+ /** Fixed maximum active lifetime approved by browser, at most 30 days. */
206
+ activeExpiresAt: string;
207
+ }
208
+ export interface McpApprovalReceipt {
209
+ type: 'mcp-approval';
210
+ approvalId: string;
211
+ requestId: string;
212
+ ownerId: string;
213
+ grantId: string;
214
+ candidateEndpointId: string;
215
+ bridgeId: string;
216
+ bridge: EndpointPublic;
217
+ permissions: ('read' | 'control')[];
218
+ expiresAt: string;
219
+ activeExpiresAt: string;
220
+ }
221
+ export interface McpBridgeApproval {
222
+ bridgeId: string;
223
+ bridge: EndpointPublic;
224
+ receipt: SecureEnvelope;
225
+ }
226
+ export interface SecurityPageQuery {
227
+ /** Absent means newest page; cursor is opaque, versioned and owner-bound. */
228
+ cursor?: string;
229
+ bridgeId?: string;
230
+ limit?: number;
231
+ }
232
+ export type SecurityEventStatus = 'started' | 'succeeded' | 'rejected' | 'failed' | 'unknown';
233
+ export interface SecurityEvent {
234
+ version: 1;
235
+ id: string;
236
+ actionId: string;
237
+ parentActionId: string | null;
238
+ ownerId: string;
239
+ source: 'gateway' | 'bridge';
240
+ bridgeId: string | null;
241
+ clientId: string | null;
242
+ grantId: string | null;
243
+ endpointId: string | null;
244
+ tool: string;
245
+ operation: string | null;
246
+ sessionId: string | null;
247
+ startedAt: string;
248
+ finishedAt: string | null;
249
+ status: SecurityEventStatus;
250
+ errorCode: string | null;
251
+ mutating: boolean;
252
+ }
253
+ export interface SecurityPage {
254
+ events: SecurityEvent[];
255
+ nextCursor: string | null;
256
+ retentionDays: 30;
257
+ maxEvents: 10000;
258
+ oldestAvailableAt: string | null;
259
+ truncated: boolean;
260
+ reset: boolean;
261
+ }
262
+ /** Commands use existing requestId/bridgeId command-RPC envelope. */
263
+ export type SecurityCommand = {
264
+ type: 'security_devices';
265
+ bridgeId: string;
266
+ } | {
267
+ type: 'security_invite';
268
+ bridgeId: string;
269
+ label: string;
270
+ } | {
271
+ type: 'security_revoke';
272
+ bridgeId: string;
273
+ endpointId: string;
274
+ } | {
275
+ type: 'security_approve_mcp';
276
+ bridgeId: string;
277
+ approval: McpApproval;
278
+ } | {
279
+ type: 'security_activate_mcp';
280
+ bridgeId: string;
281
+ grantId: string;
282
+ } | {
283
+ type: 'security_activity';
284
+ bridgeId: string;
285
+ page: SecurityPageQuery;
286
+ };
287
+ export interface SecurityCommandResults {
288
+ security_devices: {
289
+ devices: ApprovedEndpoint[];
290
+ };
291
+ security_invite: BridgeInvitation;
292
+ security_revoke: {
293
+ endpointId: string;
294
+ revoked: true;
295
+ };
296
+ security_approve_mcp: McpBridgeApproval;
297
+ security_activate_mcp: {
298
+ grantId: string;
299
+ expiresAt: string;
300
+ };
301
+ security_activity: SecurityPage;
302
+ }
303
+ export type BridgeSecurityStatus = 'unpaired' | 'connecting' | 'ready' | 'offline' | 'revoked' | 'key_changed' | 'upgrade_required';
304
+ export interface BridgeSecurityState {
305
+ bridgeId: string;
306
+ status: BridgeSecurityStatus;
307
+ endpoint: EndpointPublic | null;
308
+ }
309
+ export interface EndpointDirectoryEntry {
310
+ endpoint: EndpointPublic;
311
+ bridgeId: string | null;
312
+ label: string;
313
+ protocolVersion: 1;
314
+ }
315
+ export interface EndpointDirectory {
316
+ ownerId: string;
317
+ endpoints: EndpointDirectoryEntry[];
318
+ }
319
+ export interface McpConsentSecurity {
320
+ requestId: string;
321
+ grantId: string;
322
+ endpoint: EndpointPublic;
323
+ expiresAt: string;
324
+ activeExpiresAt: string;
325
+ permissions: ('read' | 'control')[];
326
+ }
327
+ export interface BridgeSecurityInfo {
328
+ protocolVersion: 1;
329
+ ownerId: string;
330
+ bridgeId: string;
331
+ endpoint: EndpointPublic;
332
+ /** Existing channel-routing subject; explicitly not cryptographic owner ID. */
333
+ relayUserId: string;
334
+ }
335
+ export interface LocalEventPage {
336
+ events: {
337
+ channel: string;
338
+ data: ApplicationJson;
339
+ cursor: number;
340
+ }[];
341
+ cursor: number;
342
+ reset: boolean;
343
+ }
344
+ /** Never constructed from request JSON or sent over the network. */
345
+ export interface LocalRecoveryAuthority {
346
+ source: 'os-local-recovery';
347
+ }
348
+ export interface InvitationOptions {
349
+ label: string;
350
+ }
351
+ /** Implemented by security/bridge/security.ts; crypto and policy stay separate. */
352
+ export interface BridgeSecurity {
353
+ readonly endpoint: EndpointPublic;
354
+ readonly receiverEpoch: string;
355
+ handleHandshake(packet: SecureEnvelope | EnrollmentPacket, route: InboundTransportContext): Promise<SecureEnvelope>;
356
+ acceptApplication(packet: SecureEnvelope, route: InboundTransportContext): Promise<VerifiedApplication>;
357
+ /** Re-check immediately before queued dispatch/egress; throws when revoked. */
358
+ revalidate(principal: VerifiedPrincipal): Promise<void>;
359
+ sealTo(recipientId: string, application: SecureApplication, route: InboundTransportContext): Promise<SecureEnvelope>;
360
+ sealPublication(channel: string, application: SecureApplication): Promise<(SecureEnvelope | SecurePublication)[]>;
361
+ createInvitation(actor: VerifiedPrincipal | LocalRecoveryAuthority, options: InvitationOptions): Promise<BridgeInvitation>;
362
+ listDevices(actor: VerifiedPrincipal): Promise<ApprovedEndpoint[]>;
363
+ approveMcp(actor: VerifiedPrincipal, approval: McpApproval): Promise<McpBridgeApproval>;
364
+ activateMcp(actor: VerifiedPrincipal, grantId: string): Promise<{
365
+ grantId: string;
366
+ expiresAt: string;
367
+ }>;
368
+ revokeEndpoint(actor: VerifiedPrincipal, endpointId: string): Promise<void>;
369
+ onRevoked(listener: (endpointId: string) => void): () => void;
370
+ close(): Promise<void>;
371
+ }
372
+ /** One provisioned secret; config parsing belongs only to gateway bootstrap. */
373
+ export interface McpKeyEncryptionConfig {
374
+ keyId: string;
375
+ key: Uint8Array;
376
+ }
377
+ export interface SecurityLimits {
378
+ maxEnvelopeBytes: 450000;
379
+ maxApplicationAgeMs: 120000;
380
+ maxFutureSkewMs: 30000;
381
+ invitationLifetimeMs: 300000;
382
+ maxConsentBridges: 64;
383
+ maxConsentBodyBytes: 524288;
384
+ maxActiveMcpGrantMs: 2592000000;
385
+ retentionDays: 30;
386
+ maxAuditEvents: 10000;
387
+ defaultPageSize: 50;
388
+ maxPageSize: 100;
389
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * FROZEN CONTRACT — immutable once fan-out has started.
3
+ * If this contract is wrong or incomplete, STOP and report to the orchestrator;
4
+ * do not amend locally. Local amendments cause parallel implementers to diverge.
5
+ * Behavior/security rules: docs/investigations/2026-10-24-e2ee-contract.md.
6
+ * Types only. All implementation modules depend on this file, never vice versa.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/security/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,3 @@
1
+ import type { BridgeInvitation } from './security/protocol.js';
2
+ export declare function invitationLink(invitation: BridgeInvitation, apiUrl?: string): string;
3
+ export declare function runSecurity(argv: string[]): Promise<number>;
@@ -0,0 +1,62 @@
1
+ import { Command, CommanderError } from 'commander';
2
+ import { readLocalPointer } from './local-pair-cli.js';
3
+ import { apiResponse, securityCommand } from './cli-client.js';
4
+ export function invitationLink(invitation, apiUrl = 'https://ftown.ia.br') {
5
+ const url = new URL('/connect', apiUrl);
6
+ url.hash = `invite=${encodeURIComponent(JSON.stringify(invitation))}`;
7
+ return url.href;
8
+ }
9
+ export async function runSecurity(argv) {
10
+ const program = new Command().name('ftown security').description('Manage this bridge’s encrypted endpoint trust')
11
+ .option('--data-dir <path>', 'Bridge instance data directory').exitOverride();
12
+ const pointer = () => readLocalPointer(program.opts().dataDir);
13
+ program.command('invite').description('Create a one-use browser invitation (secret is printed only on this explicit request)')
14
+ .option('--label <label>', 'Device label', 'Browser')
15
+ .action(async (options) => {
16
+ const current = pointer();
17
+ const invite = await securityCommand(current, 'security_invite', { label: String(options.label) });
18
+ console.log(invitationLink(invite, current.apiUrl));
19
+ });
20
+ program.command('devices').description('List locally approved encrypted endpoints').action(async () => {
21
+ const result = await securityCommand(pointer(), 'security_devices');
22
+ console.log(JSON.stringify(result));
23
+ });
24
+ program.command('revoke <endpoint-id>').description('Revoke an endpoint on this bridge').action(async (endpointId) => {
25
+ await securityCommand(pointer(), 'security_revoke', { endpointId: String(endpointId) });
26
+ console.log('Endpoint revoked.');
27
+ });
28
+ program.command('proxy').description('Run one encrypted local API request from bounded JSON on stdin').action(async () => {
29
+ let bytes = 0;
30
+ const chunks = [];
31
+ for await (const chunk of process.stdin) {
32
+ const data = Buffer.from(chunk);
33
+ bytes += data.length;
34
+ if (bytes > 1_048_576)
35
+ throw new Error('Local request exceeds limit');
36
+ chunks.push(data);
37
+ }
38
+ const request = JSON.parse(Buffer.concat(chunks).toString('utf8'));
39
+ if (!request || Array.isArray(request) || Object.keys(request).some(key => !['method', 'path', 'body', 'timeoutMs'].includes(key))
40
+ || typeof request.method !== 'string' || typeof request.path !== 'string'
41
+ || !['GET', 'POST', 'PATCH', 'PUT', 'DELETE'].includes(request.method)
42
+ || !request.path.startsWith('/api/'))
43
+ throw new Error('Invalid local request');
44
+ const timeout = request.timeoutMs ?? 60000;
45
+ if (typeof timeout !== 'number' || !Number.isInteger(timeout) || timeout < 1 || timeout > 60000)
46
+ throw new Error('Invalid timeout');
47
+ const caller = process.env.FTOWN_SESSION_ID;
48
+ const result = await apiResponse(pointer(), request.method, request.path, request.body, caller ? { 'x-ftown-session-id': caller } : undefined, AbortSignal.timeout(timeout));
49
+ process.stdout.write(`${JSON.stringify(result)}\n`);
50
+ });
51
+ try {
52
+ await program.parseAsync(['node', 'ftown-security', ...argv]);
53
+ return 0;
54
+ }
55
+ catch (error) {
56
+ if (error instanceof CommanderError)
57
+ return error.code === 'commander.helpDisplayed' ? 0 : error.exitCode;
58
+ console.error('Encrypted local security operation failed. Check that the bridge is running and setup is current.');
59
+ return 1;
60
+ }
61
+ }
62
+ //# sourceMappingURL=security-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-cli.js","sourceRoot":"","sources":["../src/security-cli.ts"],"names":[],"mappings":"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"}
@@ -312,11 +312,33 @@ export async function createSoloServer(options) {
312
312
  sendError(res, 404, 'not found');
313
313
  return;
314
314
  }
315
- // ---- (3) remaining /api/* → the EXISTING bridge local API --------------
316
- if (path === '/api' || path.startsWith('/api/')) {
315
+ // Only the encrypted endpoint ingress is exported through the Solo front.
316
+ if (['/api/security/info', '/api/security/envelope', '/api/security/events'].includes(path)) {
317
+ if (!isAllowedHost(req.headers.host ?? '', { address: bound.address, port: bound.port }, options.allowedHosts)) {
318
+ sendError(res, 400, 'invalid host header');
319
+ return;
320
+ }
321
+ const origin = req.headers.origin;
322
+ if (origin) {
323
+ try {
324
+ if (new URL(origin).host !== req.headers.host) {
325
+ sendError(res, 403, 'forbidden origin');
326
+ return;
327
+ }
328
+ }
329
+ catch {
330
+ sendError(res, 403, 'forbidden origin');
331
+ return;
332
+ }
333
+ }
317
334
  forwardToLocalApi(req, res);
318
335
  return;
319
336
  }
337
+ // No arbitrary plaintext application route can bypass endpoint authentication.
338
+ if (path === '/api' || path.startsWith('/api/')) {
339
+ sendError(res, 426, 'upgrade_required');
340
+ return;
341
+ }
320
342
  // ---- (4) everything else → panel, or placeholder on / pre-panel (S12) --
321
343
  const panelHealthy = options.panel.isHealthy();
322
344
  if (path === '/' && !panelHealthy) {
@@ -1 +1 @@
1
- {"version":3,"file":"solo-server.js","sourceRoot":"","sources":["../../src/solo/solo-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solo-server.js","sourceRoot":"","sources":["../../src/solo/solo-server.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -80,7 +80,14 @@ export interface Command {
80
80
  payload: CommandPayload;
81
81
  requestId: string;
82
82
  }
83
- export type CommandType = 'mcp_request' | 'create_session' | 'stop_session' | 'list_sessions' | 'get_history' | 'retry_session' | 'send_message' | 'rename_session' | 'remove_session' | 'bridge_exec' | 'clear_terminal' | 'update_session_parent' | 'get_session_usage' | 'get_sessions_usage';
83
+ export type CommandType = 'security_devices' | 'security_invite' | 'security_revoke' | 'security_approve_mcp' | 'security_activate_mcp' | 'security_activity' | 'mcp_request' | 'create_session' | 'stop_session' | 'list_sessions' | 'get_history' | 'retry_session' | 'send_message' | 'rename_session' | 'remove_session' | 'bridge_exec' | 'clear_terminal' | 'update_session_parent' | 'get_session_usage' | 'get_sessions_usage' | 'get_session_attention' | 'resolve_session_attention';
84
+ export interface GetSessionAttentionPayload {
85
+ bridgeId: string;
86
+ sessionId: string;
87
+ }
88
+ export interface ResolveSessionAttentionPayload extends GetSessionAttentionPayload {
89
+ eventId: string;
90
+ }
84
91
  export interface CreateSessionPayload {
85
92
  command: string;
86
93
  prompt?: string;
@@ -142,7 +149,7 @@ export interface GetSessionsUsagePayload {
142
149
  sessionIds: string[];
143
150
  bridgeId?: string;
144
151
  }
145
- export type CommandPayload = CreateSessionPayload | StopSessionPayload | GetHistoryPayload | RenameSessionPayload | RemoveSessionPayload | BridgeExecPayload | ClearTerminalPayload | UpdateSessionParentPayload | GetSessionUsagePayload | GetSessionsUsagePayload | Record<string, unknown>;
152
+ export type CommandPayload = GetSessionAttentionPayload | ResolveSessionAttentionPayload | CreateSessionPayload | StopSessionPayload | GetHistoryPayload | RenameSessionPayload | RemoveSessionPayload | BridgeExecPayload | ClearTerminalPayload | UpdateSessionParentPayload | GetSessionUsagePayload | GetSessionsUsagePayload | Record<string, unknown>;
146
153
  export interface CommandResponse {
147
154
  requestId: string;
148
155
  success: boolean;
@@ -1,5 +1,8 @@
1
1
  /** Contents of ~/.ftown/bridge.json, pointing a CLI at the running LocalApiServer. */
2
2
  export interface BridgePointer {
3
+ dataDir?: string;
4
+ ownerId?: string;
5
+ endpoint?: import('./security/protocol.js').EndpointPublic;
3
6
  port: number;
4
7
  token: string;
5
8
  bridgeId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wire-types.js","sourceRoot":"","sources":["../src/wire-types.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAyD1E,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAgB3F,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,0DAA0D,CAAC;AAErG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,CAAc;IAC9C,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"wire-types.js","sourceRoot":"","sources":["../src/wire-types.ts"],"names":[],"mappings":"AAAA,0EAA0E;AA4D1E,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAgB3F,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,0DAA0D,CAAC;AAErG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,UAAmB;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,CAAc;IAC9C,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACpE,CAAC"}
package/hooks/notify.sh CHANGED
@@ -6,7 +6,7 @@ SESSION_ID="${FTOWN_SESSION_ID:-}"
6
6
  TOKEN="${FTOWN_HOOK_TOKEN:-}"
7
7
  SOURCE=""
8
8
 
9
- BRIDGE_JSON="${HOME}/.ftown/bridge.json"
9
+ BRIDGE_JSON="${FTOWN_BRIDGE_POINTER:-${HOME}/.ftown/bridge.json}"
10
10
  REGISTRY="${HOME}/.ftown/session-registry.json"
11
11
 
12
12
  if [ -z "$PORT" ] && [ -f "$BRIDGE_JSON" ]; then