mindwire 0.1.34 → 0.1.38

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 (44) hide show
  1. package/dist/binary-cache-CG52TXCZ.js +3 -0
  2. package/dist/{binary-cache-VM7VHCEU.js.map → binary-cache-CG52TXCZ.js.map} +1 -1
  3. package/dist/{chunk-3QFDSYKC.js → chunk-CKTVMUS4.js} +547 -177
  4. package/dist/chunk-CKTVMUS4.js.map +1 -0
  5. package/dist/{chunk-3FR7BFAW.js → chunk-PFYKJ6LX.js} +56 -4
  6. package/dist/chunk-PFYKJ6LX.js.map +1 -0
  7. package/dist/chunk-QODJKRFK.js +20 -0
  8. package/dist/chunk-QODJKRFK.js.map +1 -0
  9. package/dist/cli.js +763 -32
  10. package/dist/cli.js.map +1 -1
  11. package/dist/client.d.ts +6 -8
  12. package/dist/computer/connection-change.d.ts +13 -0
  13. package/dist/computer/connection-flow.d.ts +3 -3
  14. package/dist/computer/directory-http.d.ts +8 -0
  15. package/dist/computer/discovery.d.ts +13 -0
  16. package/dist/computer/lifecycle.d.ts +2 -1
  17. package/dist/computer/managed-relay.d.ts +27 -0
  18. package/dist/computer/oblien-auth.d.ts +25 -0
  19. package/dist/computer/provider-errors.d.ts +9 -0
  20. package/dist/computer/provider-info.d.ts +7 -0
  21. package/dist/computer/provider-setup.d.ts +20 -0
  22. package/dist/computer/relay-health.d.ts +2 -2
  23. package/dist/computer/relay.d.ts +11 -3
  24. package/dist/computer/setup-prompt.d.ts +9 -0
  25. package/dist/computer.d.ts +27 -1
  26. package/dist/connection-change-5F4WNCYV.js +41 -0
  27. package/dist/connection-change-5F4WNCYV.js.map +1 -0
  28. package/dist/{controller-AGT6MCJG.js → controller-3SZI7TBW.js} +199 -279
  29. package/dist/controller-3SZI7TBW.js.map +1 -0
  30. package/dist/{controller-handoff-3LAYBJUL.js → controller-handoff-KV7WRDAI.js} +4 -4
  31. package/dist/{controller-handoff-3LAYBJUL.js.map → controller-handoff-KV7WRDAI.js.map} +1 -1
  32. package/dist/conversations.d.ts +57 -0
  33. package/dist/index.cjs +37 -8
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +37 -9
  37. package/dist/index.js.map +1 -1
  38. package/dist/types.d.ts +16 -0
  39. package/dist/workspace.d.ts +2 -0
  40. package/package.json +5 -5
  41. package/dist/binary-cache-VM7VHCEU.js +0 -4
  42. package/dist/chunk-3FR7BFAW.js.map +0 -1
  43. package/dist/chunk-3QFDSYKC.js.map +0 -1
  44. package/dist/controller-AGT6MCJG.js.map +0 -1
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 {
@@ -996,6 +1010,7 @@ export interface Health {
996
1010
  projectIconsVersion?: number;
997
1011
  /** Preserved workspace replicas, native chat checkpoints and recoverable three-way import. */
998
1012
  projectSyncVersion?: number;
1013
+ conversationBrowserVersion?: number;
999
1014
  /** Workspace/project GitHub bindings and operation/run credential forwarding. */
1000
1015
  gitAccessVersion?: number;
1001
1016
  /** Durable Git writes: v2 adds branches; v3 adds repository-scoped commit author setup. */
@@ -1015,6 +1030,7 @@ export interface Health {
1015
1030
  workspaceExecutionVersion?: number;
1016
1031
  terminalProtocolVersion?: number;
1017
1032
  turnRequestVersion?: number;
1033
+ chatForkVersion?: number;
1018
1034
  /** Image-only input and image attachments retained in message history. */
1019
1035
  imageAttachmentsVersion?: number;
1020
1036
  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.34",
3
+ "version": "0.1.38",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "bin": {
@@ -16,14 +16,10 @@
16
16
  "typescript": "5.9.3"
17
17
  },
18
18
  "peerDependencies": {
19
- "oblien": ">=2.2.0",
20
19
  "dockerode": ">=4.0.0",
21
20
  "ssh2": ">=1.15.0"
22
21
  },
23
22
  "peerDependenciesMeta": {
24
- "oblien": {
25
- "optional": true
26
- },
27
23
  "dockerode": {
28
24
  "optional": true
29
25
  },
@@ -78,7 +74,11 @@
78
74
  "type": "module",
79
75
  "types": "./dist/index.d.ts",
80
76
  "dependencies": {
77
+ "oblien": "^2.5.0",
81
78
  "qrcode": "^1.5.4",
82
79
  "ws": "^8.18.3"
80
+ },
81
+ "optionalDependencies": {
82
+ "@ngrok/ngrok": "^1.7.0"
83
83
  }
84
84
  }
@@ -1,4 +0,0 @@
1
- export { binaryCacheDirectory, cacheExecutable, cachedExecutable, executableChecksum, verifyReleaseBytes } from './chunk-3FR7BFAW.js';
2
- import './chunk-T6TD76UA.js';
3
- //# sourceMappingURL=binary-cache-VM7VHCEU.js.map
4
- //# sourceMappingURL=binary-cache-VM7VHCEU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/binary-cache.ts"],"names":[],"mappings":"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","file":"chunk-3FR7BFAW.js","sourcesContent":["// Shared verified executable cache for the daemon and optional connection helpers.\n// Node modules stay lazy so importing the SDK in a browser remains supported.\nimport { MindwireError } from \"./errors.js\";\n\nexport async function binaryCacheDirectory(platform = process.platform): Promise<string> {\n const path = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const homeDirectory = homedir();\n return platform === \"darwin\" ? path.join(homeDirectory, \"Library\", \"Caches\", \"mindwire\")\n : platform === \"win32\" ? path.join(process.env.LOCALAPPDATA ?? homeDirectory, \"mindwire\", \"Cache\")\n : path.join(process.env.XDG_CACHE_HOME ?? path.join(homeDirectory, \".cache\"), \"mindwire\");\n}\n\nexport async function executableChecksum(bytes: Uint8Array): Promise<string> {\n const { createHash } = await import(\"node:crypto\");\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nexport async function verifyReleaseBytes(bytes: Uint8Array, expected: string, name: string): Promise<void> {\n if (!/^[a-f0-9]{64}$/i.test(expected) || await executableChecksum(bytes) !== expected.toLowerCase()) {\n throw new MindwireError(`mindwire: checksum verification failed for ${name}`);\n }\n}\n\nexport async function cachedExecutable(bin: string): Promise<string | undefined> {\n const fs = await import(\"node:fs/promises\");\n try {\n const [bytes, checksum] = await Promise.all([fs.readFile(bin), fs.readFile(`${bin}.sha256`, \"utf8\")]);\n await verifyReleaseBytes(bytes, checksum.trim(), bin);\n return bin;\n } catch { return undefined; }\n}\n\nexport async function cacheExecutable(bin: string, bytes: Uint8Array, expected: string): Promise<string> {\n await verifyReleaseBytes(bytes, expected, bin);\n const fs = await import(\"node:fs/promises\");\n const { dirname } = await import(\"node:path\");\n const { randomUUID } = await import(\"node:crypto\");\n await fs.mkdir(dirname(bin), { recursive: true, mode: 0o700 });\n // Unique temporary names also cover concurrent acquisitions in the same process.\n const temp = `${bin}.${randomUUID()}.tmp`;\n try {\n await fs.writeFile(temp, bytes, { mode: 0o755, flag: \"wx\" });\n await fs.writeFile(`${temp}.sha256`, `${expected.toLowerCase()}\\n`, { mode: 0o600, flag: \"wx\" });\n await fs.rename(temp, bin);\n await fs.rename(`${temp}.sha256`, `${bin}.sha256`);\n return bin;\n } finally {\n await fs.rm(temp, { force: true });\n await fs.rm(`${temp}.sha256`, { force: true });\n }\n}\n"]}