@sayknow-cli/natives 0.3.16 → 0.4.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/native/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export declare class ComputerController {
12
12
  keypress(expectedEpoch: number | undefined | null, keys: Array<string>): void
13
13
  wait(expectedEpoch: number | undefined | null, ms: number): void
14
14
  }
15
+
15
16
  /**
16
17
  * Long-lived macOS appearance observer.
17
18
  *
@@ -51,6 +52,18 @@ export declare class MacOSPowerAssertion {
51
52
  stop(): void
52
53
  }
53
54
 
55
+ /** Retained no-follow authority for the SDK publication namespace. */
56
+ export declare class NativeRetainedBrokerPublication {
57
+ observe(): NativeBrokerPublicationObservation
58
+ heartbeat(heartbeatAt: string): NativeBrokerPublicationOperation
59
+ sync(): NativeBrokerPublicationOperation
60
+ /**
61
+ * Close discovery, owner record, lock directory, and SDK root in that
62
+ * order.
63
+ */
64
+ close(): NativeBrokerPublicationOperation
65
+ }
66
+
54
67
  /**
55
68
  * In-process, session-independent lifecycle **control** server exposed to TS.
56
69
  *
@@ -273,6 +286,82 @@ export declare class PtySession {
273
286
  kill(): void
274
287
  }
275
288
 
289
+ /** Retained trusted-root authority for Linux recovery artifacts. */
290
+ export declare class RecoveryFsRoot {
291
+ /** Return the stable identity of the retained root descriptor. */
292
+ identity(): RecoveryFsResult
293
+ /**
294
+ * Derive a retained child-directory capability from this root and exact
295
+ * identity evidence.
296
+ */
297
+ retainManagedDirectory(relativePath: string, expectedDev: string, expectedIno: string): RecoveryFsRoot
298
+ /** Stat one existing regular, single-linked file without following links. */
299
+ stat(relativePath: string): RecoveryFsResult
300
+ /** Read one existing regular, single-linked file without following links. */
301
+ read(relativePath: string, maxBytes: number): RecoveryFsResult
302
+ /** Read one managed artifact with the managed-storage size bound. */
303
+ readManaged(relativePath: string): RecoveryFsResult
304
+ /**
305
+ * Create one previously absent regular, owner-only file and synchronously
306
+ * persist its contents. Existing entries are never replaced.
307
+ */
308
+ create(relativePath: string, data: Uint8Array): RecoveryFsResult
309
+ /** Create one managed artifact with the managed-storage size bound. */
310
+ createManaged(relativePath: string, data: Uint8Array): RecoveryFsResult
311
+ /**
312
+ * Atomically replace one exact regular file with a newly written managed
313
+ * artifact. The destination must retain the supplied identity throughout
314
+ * authorization.
315
+ */
316
+ replaceManaged(relativePath: string, data: Uint8Array, expectedDev: string, expectedIno: string, expectedSize: string, expectedMtimeNs: string, expectedCtimeNs: string, expectedSha256: string): RecoveryFsResult
317
+ /**
318
+ * Synchronously append one record to an exact retained managed file without
319
+ * replacing its inode or creating recovery copies.
320
+ */
321
+ appendManaged(relativePath: string, data: Uint8Array, expectedDev: string, expectedIno: string, expectedSize: string, expectedMtimeNs: string, expectedCtimeNs: string, expectedSha256: string): RecoveryFsResult
322
+ /** Remove one exact managed regular file through retained authority. */
323
+ removeManaged(relativePath: string, expectedDev: string, expectedIno: string, expectedSize: string, expectedMtimeNs: string, expectedCtimeNs: string, expectedSha256: string): RecoveryFsResult
324
+ /**
325
+ * Create each absent directory component beneath the retained root with
326
+ * owner-only security. Existing components are re-opened no-follow.
327
+ */
328
+ ensureManagedDirectory(relativePath: string): RecoveryFsResult
329
+ /**
330
+ * Move an exact managed file to an absent name entirely beneath this
331
+ * retained root. The source identity is rechecked after the no-replace
332
+ * rename, and the move is rolled back on a mismatch.
333
+ */
334
+ renameManagedFileNoReplace(sourceRelativePath: string, destinationRelativePath: string, expectedDev: string, expectedIno: string, expectedSize: string, expectedMtimeNs: string, expectedCtimeNs: string, expectedSha256: string): RecoveryFsResult
335
+ /** Snapshot a managed directory tree entirely through the retained root. */
336
+ snapshotManagedTree(relativePath: string): NativeDirectoryTreeResult
337
+ /**
338
+ * Move an exact managed directory tree to an absent name through retained
339
+ * authority.
340
+ */
341
+ renameManagedTreeNoReplace(sourceRelativePath: string, destinationRelativePath: string, expected: NativeDirectoryTreeSnapshot): RecoveryFsResult
342
+ /** Remove an exact managed directory tree through retained authority. */
343
+ removeManagedTree(relativePath: string, expected: NativeDirectoryTreeSnapshot): RecoveryFsResult
344
+ /**
345
+ * Atomically install an already-created regular file at an absent name.
346
+ * Both names remain relative to this retained root and are never resolved
347
+ * through a pathname after their parent descriptors are acquired.
348
+ */
349
+ install(sourceRelativePath: string, destinationRelativePath: string): RecoveryFsResult
350
+ /**
351
+ * Synchronize the retained root directory, making a preceding create or
352
+ * install durable when the filesystem supports directory fsync.
353
+ */
354
+ fsync(): RecoveryFsResult
355
+ /**
356
+ * Fsync one expected object relative to the retained root and prove
357
+ * identity.
358
+ */
359
+ fsyncExpected(relativePath: string, directory: boolean, expectedDev: string, expectedIno: string, expectedSize: string, expectedMtimeNs: string, expectedSha256?: string | undefined | null): RecoveryFsResult
360
+ /** Verify owner-only directory security on the retained root descriptor. */
361
+ verifyOwnerOnlyDirectory(): RecoveryFsResult
362
+ close(): RecoveryFsResult
363
+ }
364
+
276
365
  /** Persistent brush-core shell session. */
277
366
  export declare class Shell {
278
367
  /**
@@ -315,7 +404,7 @@ export declare class Shell {
315
404
  * `packages/natives/native/index.js` (which derives the name from
316
405
  * `package.json#version`).
317
406
  */
318
- export declare function __piNativesV0_3_16(): void
407
+ export declare function __piNativesV0_4_0(): void
319
408
 
320
409
  /**
321
410
  * Apply conservative pre-execution rewrites to a bash command.
@@ -326,6 +415,15 @@ export declare function __piNativesV0_3_16(): void
326
415
  */
327
416
  export declare function applyBashFixups(command: string): BashFixupResult
328
417
 
418
+ /**
419
+ * Apply owner-only security to the exact caller descriptor and its retained
420
+ * no-follow path. The descriptor is duplicated with close-on-exec and is never
421
+ * returned to JavaScript.
422
+ */
423
+ export declare function applyOwnerOnlyFdSecurity(path: string, kind: "directory" | "file", callerFd: number): NativeOwnerOnlySecurityResult
424
+
425
+ export declare function applyOwnerOnlyPathSecurity(path: string, kind: "directory" | "file"): NativeOwnerOnlySecurityResult
426
+
329
427
  /** Typed terminal acknowledgement result returned by acknowledgement promises. */
330
428
  export interface AskSelectedAckOutcomeEvent {
331
429
  status: string
@@ -535,6 +633,8 @@ export interface BuildInfo {
535
633
  languageSet: string
536
634
  }
537
635
 
636
+ export declare function canonicalExistingDirectoryIdentity(path: string | Uint8Array): NativeCanonicalDirectoryIdentity
637
+
538
638
  /** Clipboard image payload encoded as PNG bytes. */
539
639
  export interface ClipboardImage {
540
640
  /** PNG-encoded image bytes. */
@@ -647,6 +747,29 @@ export declare enum Ellipsis {
647
747
  */
648
748
  export declare function encodeSixel(bytes: Uint8Array, targetWidthPx: number, targetHeightPx: number): string
649
749
 
750
+ /**
751
+ * Remove an already durably planned detached directory only when a fresh
752
+ * descriptor-relative snapshot exactly equals the persisted snapshot. The
753
+ * caller-planned root remains in place while its opened descriptor is
754
+ * authoritative throughout recursive removal.
755
+ */
756
+ export declare function exactRemoveDirectoryTree(path: string, snapshot: NativeDirectoryTreeSnapshot): NativeExactUnlinkResult
757
+
758
+ /**
759
+ * Restore only the detached object that still has the supplied platform
760
+ * identity. The detached and original paths must retain the same validated
761
+ * parent, and restoration never replaces an existing original path.
762
+ */
763
+ export declare function exactRestore(detachedPath: string, originalPath: string, identity: NativeExactFileIdentity): NativeExactUnlinkResult
764
+
765
+ /**
766
+ * Delete only the regular file that still has the supplied platform identity.
767
+ *
768
+ * This never follows a symlink or reparse point in the target path and reports
769
+ * validation failures as typed results rather than deleting a replacement.
770
+ */
771
+ export declare function exactUnlink(path: string, identity: NativeExactFileIdentity): NativeExactUnlinkResult
772
+
650
773
  /**
651
774
  * Execute a brush shell command.
652
775
  *
@@ -1377,8 +1500,209 @@ export interface MinimizerResult {
1377
1500
  outputBytes: number
1378
1501
  }
1379
1502
 
1503
+ /** Evidence for one Linux POSIX ACL attribute. */
1504
+ export interface NativeAclAttributeEvidence {
1505
+ clear: string
1506
+ query: string
1507
+ }
1508
+
1509
+ /** Bounded Linux POSIX ACL evidence for an owner-only result. */
1510
+ export interface NativeAclEvidence {
1511
+ access: NativeAclAttributeEvidence
1512
+ default?: NativeAclAttributeEvidence
1513
+ }
1514
+
1515
+ /** Classification of a read-only retained-publication observation. */
1516
+ export interface NativeBrokerPublicationObservation {
1517
+ kind: string
1518
+ }
1519
+
1520
+ /** Result of a retained positional heartbeat write or sync. */
1521
+ export interface NativeBrokerPublicationOperation {
1522
+ kind: string
1523
+ }
1524
+
1380
1525
  export declare function nativeBuildInfo(): BuildInfo
1381
1526
 
1527
+ /** Result of resolving an existing directory to its stable platform identity. */
1528
+ export type NativeCanonicalDirectoryIdentity =
1529
+ | { ok: true; platform: "posix" | "win32"; canonicalPath: string; code?: never }
1530
+ | {
1531
+ ok: false;
1532
+ platform?: never;
1533
+ canonicalPath?: never;
1534
+ code: "not_found" | "not_directory" | "not_utf8" | "network_unsupported" | "identity_unavailable" | "io_error";
1535
+ }
1536
+
1537
+ /**
1538
+ * A deterministic, no-follow description of a directory tree. `relative_path`
1539
+ * is UTF-8, uses `/` separators, and is empty only for the root entry.
1540
+ */
1541
+ export interface NativeDirectoryTreeEntry {
1542
+ relativePath: string
1543
+ kind: string
1544
+ dev: string
1545
+ ino: string
1546
+ size: string
1547
+ mtimeNs: string
1548
+ ctimeNs: string
1549
+ sha256?: string
1550
+ }
1551
+
1552
+ export interface NativeDirectoryTreeResult {
1553
+ ok: boolean
1554
+ code?: string
1555
+ snapshot?: NativeDirectoryTreeSnapshot
1556
+ }
1557
+
1558
+ /**
1559
+ * Stable evidence returned by `snapshot_directory_tree` and consumed verbatim
1560
+ * by `exact_remove_directory_tree`.
1561
+ */
1562
+ export interface NativeDirectoryTreeSnapshot {
1563
+ rootDev: string
1564
+ rootIno: string
1565
+ entries: Array<NativeDirectoryTreeEntry>
1566
+ }
1567
+
1568
+ /**
1569
+ * Caller-supplied identity and preauthorized quarantine evidence for exact
1570
+ * deletion.
1571
+ */
1572
+ export interface NativeExactFileIdentity {
1573
+ dev: bigint
1574
+ ino: bigint
1575
+ size: bigint
1576
+ mtimeNs: bigint
1577
+ /**
1578
+ * When true, atomically detach a directory rather than deleting a regular
1579
+ * file.
1580
+ */
1581
+ directory?: boolean
1582
+ /**
1583
+ * Keep a regular file in quarantine after its identity has been verified
1584
+ * instead of unlinking it. This makes cross-device retirement recoverable.
1585
+ */
1586
+ detachOnly?: boolean
1587
+ /**
1588
+ * A caller-persisted, single-component no-replace quarantine destination.
1589
+ * Required for every exact deletion so authority survives a post-detach
1590
+ * crash.
1591
+ */
1592
+ quarantineName?: string
1593
+ /**
1594
+ * SHA-256 of regular-file bytes. Required for regular-file deletion and
1595
+ * verified from the detached object before unlinking it.
1596
+ */
1597
+ sha256?: string
1598
+ }
1599
+
1600
+ /** Typed result of an identity-bound regular-file deletion or directory detach. */
1601
+ export interface NativeExactUnlinkResult {
1602
+ ok: boolean
1603
+ code?: string
1604
+ detachedPath?: string
1605
+ retainedSuccessorPath?: string
1606
+ /**
1607
+ * An internal exchange-placeholder cleanup entry retained after cleanup
1608
+ * could not complete. This is never a canonical publisher successor and
1609
+ * remains recoverable only at this path.
1610
+ */
1611
+ retainedPlaceholderPath?: string
1612
+ /**
1613
+ * A retained cleanup entry whose identity could not be verified. This is
1614
+ * neither a stale detached object nor a publisher successor.
1615
+ */
1616
+ retainedUnknownPath?: string
1617
+ }
1618
+
1619
+ /** Result of applying or checking owner-only path security. */
1620
+ export type NativeOwnerOnlySecurityResult =
1621
+ | {
1622
+ ok: true;
1623
+ platform: "linux";
1624
+ kind: "file";
1625
+ protocol: "apply" | "verify";
1626
+ aclEvidence: {
1627
+ access: {
1628
+ clear: "cleared" | "already_absent" | "unsupported" | "not_run";
1629
+ query: "absent" | "unsupported";
1630
+ };
1631
+ default?: never;
1632
+ };
1633
+ code?: never;
1634
+ operation?: never;
1635
+ attribute?: never;
1636
+ }
1637
+ | {
1638
+ ok: true;
1639
+ platform: "linux";
1640
+ kind: "directory";
1641
+ protocol: "apply" | "verify";
1642
+ aclEvidence: {
1643
+ access: {
1644
+ clear: "cleared" | "already_absent" | "unsupported" | "not_run";
1645
+ query: "absent" | "unsupported";
1646
+ };
1647
+ default: {
1648
+ clear: "cleared" | "already_absent" | "unsupported" | "not_run";
1649
+ query: "absent" | "unsupported";
1650
+ };
1651
+ };
1652
+ code?: never;
1653
+ operation?: never;
1654
+ attribute?: never;
1655
+ }
1656
+ | {
1657
+ ok: true;
1658
+ platform?: never;
1659
+ kind?: never;
1660
+ protocol?: never;
1661
+ aclEvidence?: never;
1662
+ code?: never;
1663
+ operation?: never;
1664
+ attribute?: never;
1665
+ }
1666
+ | {
1667
+ ok: false;
1668
+ code: "acl_denied" | "acl_io_error" | "acl_present" | "acl_malformed" | "acl_unknown";
1669
+ operation: "clear" | "query";
1670
+ attribute: "access" | "default";
1671
+ platform?: never;
1672
+ kind?: never;
1673
+ protocol?: never;
1674
+ aclEvidence?: never;
1675
+ }
1676
+ | {
1677
+ ok: false;
1678
+ code: "acl_unavailable" | "acl_apply_failed" | "acl_verify_failed";
1679
+ operation?: never;
1680
+ attribute?: never;
1681
+ platform?: never;
1682
+ kind?: never;
1683
+ protocol?: never;
1684
+ aclEvidence?: never;
1685
+ }
1686
+ | {
1687
+ ok: false;
1688
+ code:
1689
+ | "not_found"
1690
+ | "not_directory"
1691
+ | "network_unsupported"
1692
+ | "reparse_point"
1693
+ | "identity_unavailable"
1694
+ | "identity_mismatch"
1695
+ | "owner_mismatch"
1696
+ | "mode_mismatch"
1697
+ | "io_error";
1698
+ operation?: never;
1699
+ attribute?: never;
1700
+ platform?: never;
1701
+ kind?: never;
1702
+ protocol?: never;
1703
+ aclEvidence?: never;
1704
+ }
1705
+
1382
1706
  /** Bound endpoint info returned from [`NotificationServer::start`]. */
1383
1707
  export interface NotificationEndpoint {
1384
1708
  /** Bind host (loopback). */
@@ -1391,6 +1715,12 @@ export interface NotificationEndpoint {
1391
1715
  sessionId: string
1392
1716
  }
1393
1717
 
1718
+ /**
1719
+ * Acquire an immutable trusted-root descriptor. Linux is required; every
1720
+ * other platform returns a durable unsupported-platform result.
1721
+ */
1722
+ export declare function openRecoveryFsRoot(path: string): RecoveryFsRoot
1723
+
1394
1724
  /** Parsed Kitty keyboard protocol sequence result for a Kitty input sequence. */
1395
1725
  export interface ParsedKittyResult {
1396
1726
  /** Primary codepoint associated with the key. */
@@ -1495,9 +1825,27 @@ export declare function ptyTimeoutCount(): bigint
1495
1825
  */
1496
1826
  export declare function readImageFromClipboard(): Promise<ClipboardImage | undefined | null>
1497
1827
 
1828
+ export interface RecoveryFsIdentity {
1829
+ dev: string
1830
+ ino: string
1831
+ size: string
1832
+ mtimeNs: string
1833
+ ctimeNs: string
1834
+ sha256?: string
1835
+ }
1836
+
1837
+ export interface RecoveryFsResult {
1838
+ ok: boolean
1839
+ code?: string
1840
+ identity?: RecoveryFsIdentity
1841
+ data?: Uint8Array
1842
+ }
1843
+
1844
+ export declare function renameNoReplacePath(sourcePath: string, destinationPath: string): NativeExactUnlinkResult
1845
+
1498
1846
  /** A client reply forwarded to the TypeScript host for gate resolution. */
1499
1847
  export interface ReplyEvent {
1500
- /** The action id being answered (the real broker `gate_id` for asks). */
1848
+ /** The transient action/presentation id being answered, not a durable gate id. */
1501
1849
  id: string
1502
1850
  /** JSON-encoded `ReplyAnswer` (number, string, or `{selected,custom}`). */
1503
1851
  answerJson: string
@@ -1507,6 +1855,12 @@ export interface ReplyEvent {
1507
1855
  replyReceiptId: string
1508
1856
  }
1509
1857
 
1858
+ /**
1859
+ * Retain the existing no-follow SDK publication objects after one-time
1860
+ * publication.
1861
+ */
1862
+ export declare function retainBrokerPublication(agentDir: string): NativeRetainedBrokerPublication
1863
+
1510
1864
  /**
1511
1865
  * Search content for a pattern (one-shot, compiles pattern each time).
1512
1866
  * For repeated searches with the same pattern, use [`grep`] with file filters.
@@ -1636,6 +1990,13 @@ export interface SliceResult {
1636
1990
  */
1637
1991
  export declare function sliceWithWidth(line: string, startCol: number, length: number, strict: boolean | undefined | null, tabWidth: number): SliceResult
1638
1992
 
1993
+ /**
1994
+ * Capture a deterministic, descriptor-relative snapshot of a regular-file and
1995
+ * directory-only tree. Symlinks, special files, non-UTF-8 names, and topology
1996
+ * changes are rejected rather than followed.
1997
+ */
1998
+ export declare function snapshotDirectoryTree(path: string): NativeDirectoryTreeResult
1999
+
1639
2000
  export declare function summarizeCode(options: SummaryOptions): SummaryResult
1640
2001
 
1641
2002
  export interface SummaryOptions {
@@ -1687,6 +2048,15 @@ export declare function truncateLinesToWidth(lines: Array<string>, maxWidth: num
1687
2048
 
1688
2049
  export declare function truncateToWidth(text: string, maxWidth: number, ellipsisKind: Ellipsis | undefined | null, pad: boolean | undefined | null, tabWidth: number): string
1689
2050
 
2051
+ /**
2052
+ * Verify owner-only security for the exact caller descriptor and retained
2053
+ * no-follow path. The descriptor is duplicated with close-on-exec and is never
2054
+ * returned to JavaScript.
2055
+ */
2056
+ export declare function verifyOwnerOnlyFdSecurity(path: string, kind: "directory" | "file", callerFd: number): NativeOwnerOnlySecurityResult
2057
+
2058
+ export declare function verifyOwnerOnlyPathSecurity(path: string, kind: "directory" | "file"): NativeOwnerOnlySecurityResult
2059
+
1690
2060
  /**
1691
2061
  * Calculate visible width of text, excluding ANSI escape sequences.
1692
2062
  *
package/native/index.js CHANGED
@@ -20,22 +20,30 @@ nativeBindings.initNativeCrashDiagnostics?.();
20
20
  export const ComputerController = nativeBindings.ComputerController;
21
21
  export const MacAppearanceObserver = nativeBindings.MacAppearanceObserver;
22
22
  export const MacOSPowerAssertion = nativeBindings.MacOSPowerAssertion;
23
+ export const NativeRetainedBrokerPublication = nativeBindings.NativeRetainedBrokerPublication;
23
24
  export const NotificationControlServer = nativeBindings.NotificationControlServer;
24
25
  export const NotificationServer = nativeBindings.NotificationServer;
25
26
  export const Process = nativeBindings.Process;
26
27
  export const PtySession = nativeBindings.PtySession;
28
+ export const RecoveryFsRoot = nativeBindings.RecoveryFsRoot;
27
29
  export const Shell = nativeBindings.Shell;
28
30
 
29
31
  // functions
30
- export const __piNativesV0_3_16 = nativeBindings.__piNativesV0_3_16;
32
+ export const __piNativesV0_4_0 = nativeBindings.__piNativesV0_4_0;
31
33
  export const applyBashFixups = nativeBindings.applyBashFixups;
34
+ export const applyOwnerOnlyFdSecurity = nativeBindings.applyOwnerOnlyFdSecurity;
35
+ export const applyOwnerOnlyPathSecurity = nativeBindings.applyOwnerOnlyPathSecurity;
32
36
  export const astEdit = nativeBindings.astEdit;
33
37
  export const astGrep = nativeBindings.astGrep;
38
+ export const canonicalExistingDirectoryIdentity = nativeBindings.canonicalExistingDirectoryIdentity;
34
39
  export const computerScreenshot = nativeBindings.computerScreenshot;
35
40
  export const copyToClipboard = nativeBindings.copyToClipboard;
36
41
  export const detectMacOSAppearance = nativeBindings.detectMacOSAppearance;
37
42
  export const diffLines = nativeBindings.diffLines;
38
43
  export const encodeSixel = nativeBindings.encodeSixel;
44
+ export const exactRemoveDirectoryTree = nativeBindings.exactRemoveDirectoryTree;
45
+ export const exactRestore = nativeBindings.exactRestore;
46
+ export const exactUnlink = nativeBindings.exactUnlink;
39
47
  export const executeShell = nativeBindings.executeShell;
40
48
  export const extractSegments = nativeBindings.extractSegments;
41
49
  export const fuzzyFind = nativeBindings.fuzzyFind;
@@ -63,16 +71,22 @@ export const matchesKey = nativeBindings.matchesKey;
63
71
  export const matchesKittySequence = nativeBindings.matchesKittySequence;
64
72
  export const matchesLegacySequence = nativeBindings.matchesLegacySequence;
65
73
  export const nativeBuildInfo = nativeBindings.nativeBuildInfo;
74
+ export const openRecoveryFsRoot = nativeBindings.openRecoveryFsRoot;
66
75
  export const parseKey = nativeBindings.parseKey;
67
76
  export const parseKittySequence = nativeBindings.parseKittySequence;
68
77
  export const ptyTimeoutCount = nativeBindings.ptyTimeoutCount;
69
78
  export const readImageFromClipboard = nativeBindings.readImageFromClipboard;
79
+ export const renameNoReplacePath = nativeBindings.renameNoReplacePath;
80
+ export const retainBrokerPublication = nativeBindings.retainBrokerPublication;
70
81
  export const search = nativeBindings.search;
71
82
  export const sliceWithWidth = nativeBindings.sliceWithWidth;
83
+ export const snapshotDirectoryTree = nativeBindings.snapshotDirectoryTree;
72
84
  export const summarizeCode = nativeBindings.summarizeCode;
73
85
  export const supportsLanguage = nativeBindings.supportsLanguage;
74
86
  export const truncateLinesToWidth = nativeBindings.truncateLinesToWidth;
75
87
  export const truncateToWidth = nativeBindings.truncateToWidth;
88
+ export const verifyOwnerOnlyFdSecurity = nativeBindings.verifyOwnerOnlyFdSecurity;
89
+ export const verifyOwnerOnlyPathSecurity = nativeBindings.verifyOwnerOnlyPathSecurity;
76
90
  export const visibleWidth = nativeBindings.visibleWidth;
77
91
  export const visibleWidths = nativeBindings.visibleWidths;
78
92
  export const wrapTextWithAnsi = nativeBindings.wrapTextWithAnsi;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sayknow-cli/natives",
3
- "version": "0.3.16",
3
+ "version": "0.4.0",
4
4
  "description": "Native Rust bindings for grep, clipboard, image processing, syntax highlighting, PTY, and shell operations via N-API",
5
5
  "type": "module",
6
6
  "homepage": "https://sayknow-cli.com",