mindwire 0.1.36 → 0.1.40

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 (42) hide show
  1. package/README.md +16 -0
  2. package/dist/{chunk-RTGZDLSG.js → chunk-BJL5K6M7.js} +74 -21
  3. package/dist/chunk-BJL5K6M7.js.map +1 -0
  4. package/dist/chunk-ZP7F7LP7.js +306 -0
  5. package/dist/chunk-ZP7F7LP7.js.map +1 -0
  6. package/dist/cli.js +499 -250
  7. package/dist/cli.js.map +1 -1
  8. package/dist/client.d.ts +6 -8
  9. package/dist/computer/dashboard.d.ts +1 -0
  10. package/dist/computer/desktop.d.ts +17 -0
  11. package/dist/computer/directory-http.d.ts +1 -1
  12. package/dist/computer/discovery.d.ts +22 -0
  13. package/dist/computer/inspection.d.ts +30 -0
  14. package/dist/computer/lifecycle.d.ts +4 -2
  15. package/dist/computer/runtime-version.d.ts +6 -0
  16. package/dist/computer/service-update.d.ts +26 -0
  17. package/dist/computer/setup-prompt.d.ts +2 -0
  18. package/dist/computer/startup.d.ts +7 -0
  19. package/dist/computer/terminal-ui.d.ts +9 -0
  20. package/dist/computer.d.ts +2 -0
  21. package/dist/{connection-change-IBNL42BL.js → connection-change-7ZV6O75Q.js} +3 -3
  22. package/dist/{connection-change-IBNL42BL.js.map → connection-change-7ZV6O75Q.js.map} +1 -1
  23. package/dist/{controller-2SJLZMJZ.js → controller-FBMGMSLM.js} +67 -9
  24. package/dist/controller-FBMGMSLM.js.map +1 -0
  25. package/dist/{controller-handoff-RUUHODNC.js → controller-handoff-CJKXUFQI.js} +3 -3
  26. package/dist/{controller-handoff-RUUHODNC.js.map → controller-handoff-CJKXUFQI.js.map} +1 -1
  27. package/dist/conversations.d.ts +57 -0
  28. package/dist/daemon-binary.d.ts +2 -0
  29. package/dist/index.cjs +66 -12
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +3 -1
  32. package/dist/index.js +66 -13
  33. package/dist/index.js.map +1 -1
  34. package/dist/project-sync.d.ts +29 -0
  35. package/dist/surfaces.d.ts +20 -1
  36. package/dist/types.d.ts +18 -0
  37. package/dist/workspace.d.ts +2 -0
  38. package/package.json +1 -1
  39. package/dist/chunk-67BNDGRK.js +0 -20
  40. package/dist/chunk-67BNDGRK.js.map +0 -1
  41. package/dist/chunk-RTGZDLSG.js.map +0 -1
  42. package/dist/controller-2SJLZMJZ.js.map +0 -1
@@ -23,6 +23,31 @@ export interface ProjectSyncRequest {
23
23
  checkpointId?: string;
24
24
  /** Only needed on first import; subsequent imports find the preserved replica. */
25
25
  path?: string;
26
+ /** Literal project-relative ignored files/folders to include. Default: respect Git ignores. */
27
+ includeIgnored?: string[];
28
+ /** Preview scope token. Re-review if ignore rules or tracked paths change. */
29
+ selectionToken?: string;
30
+ }
31
+ export interface ProjectSyncPreviewRequest {
32
+ projectId: string;
33
+ includeIgnored?: string[];
34
+ cursor?: number;
35
+ }
36
+ export interface ProjectSyncIgnoredPath {
37
+ path: string;
38
+ kind: "file" | "directory";
39
+ included: boolean;
40
+ }
41
+ export interface ProjectSyncPreview {
42
+ version: number;
43
+ fileCount: number;
44
+ /** Selected working-file bytes; Git history and conversations are additional. */
45
+ bytes: number;
46
+ ignoredCount: number;
47
+ ignored: ProjectSyncIgnoredPath[];
48
+ includeIgnored: string[];
49
+ next?: number;
50
+ selectionToken: string;
26
51
  }
27
52
  export interface ProjectSyncConflict {
28
53
  path: string;
@@ -62,6 +87,8 @@ export declare class ProjectSyncApi {
62
87
  private readonly mw;
63
88
  private readonly flights;
64
89
  constructor(mw: Mindwire);
90
+ private requireSelectionSupport;
91
+ preview(request: ProjectSyncPreviewRequest, options?: Options): Promise<ProjectSyncPreview>;
65
92
  export(request: ProjectSyncRequest, options?: Options): Promise<ProjectSyncOperation>;
66
93
  import(request: ProjectSyncRequest, options?: Options): Promise<ProjectSyncOperation>;
67
94
  list(options?: Options): Promise<ProjectSyncOperation[]>;
@@ -94,6 +121,8 @@ export declare class ProjectSyncApi {
94
121
  id: string;
95
122
  projectId: string;
96
123
  path?: string;
124
+ includeIgnored?: string[];
125
+ selectionToken?: string;
97
126
  }, options?: Options & {
98
127
  onProgress?: (progress: ProjectSyncProgress) => void;
99
128
  }): Promise<ProjectSyncOperation>;
@@ -32,7 +32,7 @@ export interface SurfaceSnapshot {
32
32
  id: string;
33
33
  workspaceId: string;
34
34
  kind: "desktop";
35
- provider: "oblien";
35
+ provider: "oblien" | "macos";
36
36
  version: number;
37
37
  revision: number;
38
38
  instanceId: string;
@@ -48,6 +48,22 @@ export interface SurfaceSnapshot {
48
48
  controller?: SurfaceController;
49
49
  authorizationExpiresAt?: string;
50
50
  error?: SurfaceProblem;
51
+ setup?: {
52
+ reason: string;
53
+ command: string;
54
+ };
55
+ }
56
+ export interface LocalDesktopInfo {
57
+ supported: boolean;
58
+ enabled: boolean;
59
+ screenSharing: boolean;
60
+ username: string;
61
+ }
62
+ /** Write-only Mac configuration. The CLI prompts locally; never include this in a QR or workspace metadata. */
63
+ export interface LocalDesktopSettings {
64
+ enabled: boolean;
65
+ username?: string;
66
+ password?: string;
51
67
  }
52
68
  /** Write-only, desktop-only, expiring provider grant. Never pass a user's session JWT. */
53
69
  export interface SurfaceBinding {
@@ -165,6 +181,9 @@ export declare class SurfacesApi {
165
181
  list(): Promise<SurfaceSnapshot[]>;
166
182
  status(refresh?: boolean): Promise<SurfaceSnapshot>;
167
183
  bind(binding: SurfaceBinding): Promise<SurfaceSnapshot>;
184
+ localStatus(): Promise<LocalDesktopInfo>;
185
+ /** Local CLI only. The separate 0600 control credential is not part of phone pairing. */
186
+ configureLocal(settings: LocalDesktopSettings, localControlToken: string): Promise<SurfaceSnapshot>;
168
187
  open(request: SurfaceOpenRequest): Promise<SurfaceSession>;
169
188
  control(id: string, request: SurfaceControlRequest): Promise<SurfaceSession>;
170
189
  close(id: string): Promise<{
package/dist/types.d.ts CHANGED
@@ -271,6 +271,8 @@ export interface Capabilities {
271
271
  history: Support;
272
272
  sessions: Support;
273
273
  resume: boolean;
274
+ /** Native conversation branching before a selected user message. */
275
+ fork?: boolean;
274
276
  toolEvents: boolean;
275
277
  cancel: boolean;
276
278
  persistent: boolean;
@@ -678,6 +680,18 @@ export interface Message {
678
680
  parts?: Part[];
679
681
  /** Native user images, including inline bytes when retained by the harness or recorded turn. */
680
682
  attachments?: Attachment[];
683
+ /** This native prompt has a safe edit-and-resend boundary. */
684
+ canFork?: boolean;
685
+ }
686
+ export interface ForkChatOptions {
687
+ /** Reuse this ID when retrying a selected-message fork. */
688
+ newChatId?: string;
689
+ /** Excludes this user message and all later history from the branch. */
690
+ beforeMessageId?: string;
691
+ }
692
+ export interface ChatForkResult extends ChatSummary {
693
+ /** Authoritative metadata for the new branch, when a workspace registry is available. */
694
+ snapshot?: import("./workspace.js").WorkspaceSnapshot;
681
695
  }
682
696
  /** Complete messages, oldest first. A soft byte budget keeps large histories incremental. */
683
697
  export interface MessagePage {
@@ -988,6 +1002,8 @@ export interface NotifyChannelTestResult {
988
1002
  export interface Health {
989
1003
  historyPageVersion?: number;
990
1004
  surfaceProtocolVersion?: number;
1005
+ /** Opt-in Mac Screen Sharing through the existing paired SSH connection. */
1006
+ localDesktopVersion?: number;
991
1007
  /** Workspace registry protocol version; absent on daemons predating workspace metadata. */
992
1008
  workspaceMetadataVersion?: number;
993
1009
  /** Durable project creation/clone operations; absent on older daemons. */
@@ -996,6 +1012,7 @@ export interface Health {
996
1012
  projectIconsVersion?: number;
997
1013
  /** Preserved workspace replicas, native chat checkpoints and recoverable three-way import. */
998
1014
  projectSyncVersion?: number;
1015
+ conversationBrowserVersion?: number;
999
1016
  /** Workspace/project GitHub bindings and operation/run credential forwarding. */
1000
1017
  gitAccessVersion?: number;
1001
1018
  /** Durable Git writes: v2 adds branches; v3 adds repository-scoped commit author setup. */
@@ -1015,6 +1032,7 @@ export interface Health {
1015
1032
  workspaceExecutionVersion?: number;
1016
1033
  terminalProtocolVersion?: number;
1017
1034
  turnRequestVersion?: number;
1035
+ chatForkVersion?: number;
1018
1036
  /** Image-only input and image attachments retained in message history. */
1019
1037
  imageAttachmentsVersion?: number;
1020
1038
  computerConnectionVersion?: number;
@@ -1,5 +1,6 @@
1
1
  import type { Mindwire } from "./client.js";
2
2
  import { ProjectSyncApi } from "./project-sync.js";
3
+ import { ConversationsApi } from "./conversations.js";
3
4
  /** Write-only credentials. Never persisted in operation snapshots or conversation state. */
4
5
  export type ProjectAuth = ({
5
6
  kind: "token";
@@ -245,6 +246,7 @@ export declare class WorkspaceCollection<T extends WorkspaceRecord> {
245
246
  /** Workspace metadata is shared by all harnesses; withAgent() never scopes these requests. */
246
247
  export declare class WorkspaceApi {
247
248
  private readonly mw;
249
+ readonly conversations: ConversationsApi;
248
250
  readonly sync: ProjectSyncApi;
249
251
  readonly git: GitAccessApi;
250
252
  readonly operations: ProjectOperationsApi;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindwire",
3
- "version": "0.1.36",
3
+ "version": "0.1.40",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "bin": {
@@ -1,20 +0,0 @@
1
- import { websocketURL } from './chunk-RTGZDLSG.js';
2
-
3
- // src/computer/provider-info.ts
4
- function connectionAddress(relay, host) {
5
- return relay.kind === "none" ? `ssh:${host ?? "network"}` : relay.url ? websocketURL(relay.url) : `temporary:${relay.kind}`;
6
- }
7
- function connectionInfo(relay, host) {
8
- if (relay.kind === "none") return { provider: "direct", address: host ? "persistent" : "network" };
9
- return { provider: relay.kind, address: ["cloudflare", "ngrok"].includes(relay.kind) && !relay.url ? "temporary" : "persistent" };
10
- }
11
- function connectionDescription(info) {
12
- const name = { oblien: "Oblien", cloudflare: "Cloudflare", ngrok: "ngrok", custom: "Your tunnel", direct: "Direct SSH / VPN" }[info.provider];
13
- if (info.address === "temporary") return `${name} \xB7 temporary address. For reconnect after a restart, run mindwire connection to choose a persistent address.`;
14
- if (info.address === "network") return `${name} \xB7 reachable network required. Use a VPN hostname for access across networks.`;
15
- return `${name} \xB7 persistent address. Saved phones retry automatically when this computer is online.`;
16
- }
17
-
18
- export { connectionAddress, connectionDescription, connectionInfo };
19
- //# sourceMappingURL=chunk-67BNDGRK.js.map
20
- //# sourceMappingURL=chunk-67BNDGRK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/computer/provider-info.ts"],"names":[],"mappings":";;;AAKO,SAAS,iBAAA,CAAkB,OAAqB,IAAA,EAAuB;AAC5E,EAAA,OAAO,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,CAAA,IAAA,EAAO,QAAQ,SAAS,CAAA,CAAA,GACnD,KAAA,CAAM,GAAA,GAAM,aAAa,KAAA,CAAM,GAAG,CAAA,GAAI,CAAA,UAAA,EAAa,MAAM,IAAI,CAAA,CAAA;AACnE;AAGO,SAAS,cAAA,CAAe,OAAqB,IAAA,EAAuC;AACzF,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,OAAO,EAAE,UAAU,QAAA,EAAU,OAAA,EAAS,IAAA,GAAO,YAAA,GAAe,SAAA,EAAU;AACjG,EAAA,OAAO,EAAE,QAAA,EAAU,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,CAAC,YAAA,EAAc,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,IAAI,CAAA,IAAK,CAAC,KAAA,CAAM,GAAA,GAAM,cAAc,YAAA,EAAa;AAClI;AAEO,SAAS,sBAAsB,IAAA,EAAsC;AAC1E,EAAA,MAAM,IAAA,GAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,YAAY,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,MAAA,EAAQ,kBAAA,EAAmB,CAAE,KAAK,QAAQ,CAAA;AAC5I,EAAA,IAAI,IAAA,CAAK,OAAA,KAAY,WAAA,EAAa,OAAO,GAAG,IAAI,CAAA,+GAAA,CAAA;AAChD,EAAA,IAAI,IAAA,CAAK,OAAA,KAAY,SAAA,EAAW,OAAO,GAAG,IAAI,CAAA,gFAAA,CAAA;AAC9C,EAAA,OAAO,GAAG,IAAI,CAAA,wFAAA,CAAA;AAChB","file":"chunk-67BNDGRK.js","sourcesContent":["import type { ComputerConnectionInfo } from \"../computer.js\";\nimport type { RelayOptions } from \"./relay.js\";\nimport { websocketURL } from \"./relay.js\";\n\n/** Credential renewal does not change the address already saved by the phone. */\nexport function connectionAddress(relay: RelayOptions, host?: string): string {\n return relay.kind === \"none\" ? `ssh:${host ?? \"network\"}`\n : relay.url ? websocketURL(relay.url) : `temporary:${relay.kind}`;\n}\n\n/** Public, non-secret metadata. Route/SSH identity is independent of provider credentials. */\nexport function connectionInfo(relay: RelayOptions, host?: string): ComputerConnectionInfo {\n if (relay.kind === \"none\") return { provider: \"direct\", address: host ? \"persistent\" : \"network\" };\n return { provider: relay.kind, address: [\"cloudflare\", \"ngrok\"].includes(relay.kind) && !relay.url ? \"temporary\" : \"persistent\" };\n}\n\nexport function connectionDescription(info: ComputerConnectionInfo): string {\n const name = { oblien: \"Oblien\", cloudflare: \"Cloudflare\", ngrok: \"ngrok\", custom: \"Your tunnel\", direct: \"Direct SSH / VPN\" }[info.provider];\n if (info.address === \"temporary\") return `${name} · temporary address. For reconnect after a restart, run mindwire connection to choose a persistent address.`;\n if (info.address === \"network\") return `${name} · reachable network required. Use a VPN hostname for access across networks.`;\n return `${name} · persistent address. Saved phones retry automatically when this computer is online.`;\n}\n"]}