@tangle-network/agent-app 0.44.58 → 0.44.59
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/dist/{chunk-OO4DROKM.js → chunk-DMYCGXBP.js} +1 -1
- package/dist/design-canvas-react/index.js +1 -1
- package/dist/design-canvas-react/lazy.js +1 -1
- package/dist/vault/server.d.ts +130 -0
- package/dist/vault/server.js +60 -0
- package/dist/vault/server.js.map +1 -0
- package/package.json +6 -1
- /package/dist/{chunk-OO4DROKM.js.map → chunk-DMYCGXBP.js.map} +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-only policy sibling of the React `./vault` client surface. Pure
|
|
3
|
+
* decision logic — no I/O, no logging, ZERO imports — extracted from
|
|
4
|
+
* gtm-agent's local guard (gtm#612) after it lost 48 production vault files:
|
|
5
|
+
* a half-mounted sandbox scanned cleanly and reconciliation derived a
|
|
6
|
+
* mass-deletion batch from an empty manifest. The #265/#332 audit ruled both
|
|
7
|
+
* checks here universal shell mechanism, not gtm-specific, so they live here
|
|
8
|
+
* once instead of being re-forked per product.
|
|
9
|
+
*
|
|
10
|
+
* Two independent checks:
|
|
11
|
+
* - `assessVaultDeletionBatch` — blast-radius refusal. Given the live
|
|
12
|
+
* baseline and what a reconciliation pass proposes to delete, decide
|
|
13
|
+
* whether the batch is safe to apply or must be refused. Refusal is a
|
|
14
|
+
* SUCCESSFUL outcome, not a thrown error: content changes still apply,
|
|
15
|
+
* only the deletions are withheld. What to do with a refusal (log, alert,
|
|
16
|
+
* retry the scan) stays the caller's job.
|
|
17
|
+
* - `compareIncarnationBaseline` — filesystem-incarnation comparison. Given
|
|
18
|
+
* a recorded baseline incarnation id and the sandbox's current identity
|
|
19
|
+
* fields, decide whether the sandbox filesystem is the same one the
|
|
20
|
+
* baseline was captured against, fail-closed on anything not clearly
|
|
21
|
+
* identified and ready.
|
|
22
|
+
*
|
|
23
|
+
* Both are pure functions over caller-supplied data: no manifest reads, no
|
|
24
|
+
* sandbox calls, no console output. The caller pre-filters tombstoned
|
|
25
|
+
* entries (this module only ever sees the LIVE path set) and owns everything
|
|
26
|
+
* that happens after a verdict comes back.
|
|
27
|
+
*/
|
|
28
|
+
/** Refuse a deletion batch once it would remove at least this fraction of the
|
|
29
|
+
* live baseline (both this and `VAULT_DELETION_REFUSAL_MIN_LIVE_FILES` must
|
|
30
|
+
* hold — a tiny vault can lose all its files without tripping this ratio
|
|
31
|
+
* gate; `refusesAllFiles` catches that case separately). */
|
|
32
|
+
declare const VAULT_DELETION_REFUSAL_RATIO = 0.75;
|
|
33
|
+
/** The blast-radius ratio gate only engages once the live baseline is at
|
|
34
|
+
* least this large, so a 2-file vault losing 1 file (50%) is not refused on
|
|
35
|
+
* ratio alone. */
|
|
36
|
+
declare const VAULT_DELETION_REFUSAL_MIN_LIVE_FILES = 10;
|
|
37
|
+
/** Overrides for `assessVaultDeletionBatch`'s two thresholds. Both default to
|
|
38
|
+
* the exported constants above. Values are validated fail-loud:
|
|
39
|
+
* `refusalRatio` must be finite and in (0, 1] — `NaN` (a config parse
|
|
40
|
+
* failure) would make `deletionRatio >= refusalRatio` always false and silently
|
|
41
|
+
* disable the guard, and `0` would refuse a zero-deletion batch; and
|
|
42
|
+
* `minLiveFiles` must be finite and >= 0. Invalid values throw `RangeError`
|
|
43
|
+
* instead of running with a guard that cannot fire (or cannot pass). */
|
|
44
|
+
interface VaultDeletionPolicy {
|
|
45
|
+
refusalRatio?: number;
|
|
46
|
+
minLiveFiles?: number;
|
|
47
|
+
}
|
|
48
|
+
interface VaultDeletionAssessment {
|
|
49
|
+
/** True when no refusal reason fired. */
|
|
50
|
+
allowed: boolean;
|
|
51
|
+
/** Precedence when multiple reasons would fire: `empty-manifest` beats
|
|
52
|
+
* `all-files` beats `ratio-exceeded` (most specific first — an empty scan
|
|
53
|
+
* IS an all-files deletion, but the diagnostic that matters is "the scan
|
|
54
|
+
* came back empty", not "it deleted everything"). Undefined when allowed. */
|
|
55
|
+
reason?: 'empty-manifest' | 'all-files' | 'ratio-exceeded';
|
|
56
|
+
/** wouldDelete / baselineLive, or 0 when the baseline is itself empty. */
|
|
57
|
+
deletionRatio: number;
|
|
58
|
+
wouldDelete: number;
|
|
59
|
+
/** The paths that would be deleted, sorted — mirrors gtm's `.sort()` so log
|
|
60
|
+
* output and any snapshot fixture are byte-stable. */
|
|
61
|
+
wouldDeletePaths: string[];
|
|
62
|
+
baselineLive: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Decide whether a reconciliation pass's proposed deletions are safe to
|
|
66
|
+
* apply against the live baseline.
|
|
67
|
+
*
|
|
68
|
+
* `manifestEmpty: true` means the filesystem scan that produced
|
|
69
|
+
* `proposedDeletions` came back with nothing — the caller could not have
|
|
70
|
+
* derived a meaningful proposed-deletions list, so this treats the FULL live
|
|
71
|
+
* baseline as would-delete regardless of what `proposedDeletions` contains.
|
|
72
|
+
* That is what distinguishes `'empty-manifest'` from `'all-files'`: an empty
|
|
73
|
+
* scan structurally implies every baseline path would be deleted, but the
|
|
74
|
+
* diagnostic that matters to a caller is "the scan was empty", not merely
|
|
75
|
+
* "everything would go".
|
|
76
|
+
*/
|
|
77
|
+
declare function assessVaultDeletionBatch(input: {
|
|
78
|
+
/** LIVE (non-tombstoned) baseline path set — the caller pre-filters, as gtm does. */
|
|
79
|
+
baselinePaths: readonly string[];
|
|
80
|
+
/** Paths a reconciliation pass proposes to delete; intersected with `baselinePaths` internally. */
|
|
81
|
+
proposedDeletions: readonly string[];
|
|
82
|
+
manifestEmpty?: boolean;
|
|
83
|
+
policy?: VaultDeletionPolicy;
|
|
84
|
+
}): VaultDeletionAssessment;
|
|
85
|
+
/** The subset of a sandbox's filesystem-incarnation identity this module
|
|
86
|
+
* needs. A product's real incarnation type is structurally compatible —
|
|
87
|
+
* no import required. */
|
|
88
|
+
interface FilesystemIncarnationLike {
|
|
89
|
+
filesystemIncarnationId?: string;
|
|
90
|
+
filesystemIncarnationProvenance?: 'fresh' | 'restored' | 'unknown';
|
|
91
|
+
filesystemIncarnationReadiness?: 'transitioning' | 'ready';
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Result of comparing a recorded baseline incarnation id against the
|
|
95
|
+
* sandbox's current identity. A discriminated union over `verdict` so a
|
|
96
|
+
* caller's `switch` gets compile-time coverage instead of a stringly-typed
|
|
97
|
+
* status it can forget to branch on.
|
|
98
|
+
*/
|
|
99
|
+
type IncarnationComparison = {
|
|
100
|
+
verdict: 'match';
|
|
101
|
+
} | {
|
|
102
|
+
verdict: 'mismatch';
|
|
103
|
+
baselineId: string;
|
|
104
|
+
currentId: string;
|
|
105
|
+
} | {
|
|
106
|
+
verdict: 'not-ready';
|
|
107
|
+
readiness: string | undefined;
|
|
108
|
+
} | {
|
|
109
|
+
verdict: 'unidentified';
|
|
110
|
+
} | {
|
|
111
|
+
verdict: 'no-baseline';
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Compare a recorded baseline filesystem-incarnation id against a sandbox's
|
|
115
|
+
* current incarnation fields. Check order mirrors gtm's gate sequence and is
|
|
116
|
+
* itself a tested fail-closed property — each earlier check short-circuits
|
|
117
|
+
* the ones after it, so a box with BOTH bad readiness and a mismatched id
|
|
118
|
+
* resolves `'not-ready'`, never `'mismatch'`:
|
|
119
|
+
*
|
|
120
|
+
* 1. `unidentified` — the current id is missing/empty, or the provenance is
|
|
121
|
+
* not one of `fresh`/`restored`/`unknown`.
|
|
122
|
+
* 2. `not-ready` — readiness is anything other than the literal string
|
|
123
|
+
* `'ready'` (this also catches `undefined`).
|
|
124
|
+
* 3. `no-baseline` — no baseline id was ever recorded to compare against.
|
|
125
|
+
* 4. `mismatch` — the baseline id and current id disagree.
|
|
126
|
+
* 5. `match` — same incarnation.
|
|
127
|
+
*/
|
|
128
|
+
declare function compareIncarnationBaseline(baselineId: string | undefined, current: FilesystemIncarnationLike): IncarnationComparison;
|
|
129
|
+
|
|
130
|
+
export { type FilesystemIncarnationLike, type IncarnationComparison, VAULT_DELETION_REFUSAL_MIN_LIVE_FILES, VAULT_DELETION_REFUSAL_RATIO, type VaultDeletionAssessment, type VaultDeletionPolicy, assessVaultDeletionBatch, compareIncarnationBaseline };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// src/vault/server.ts
|
|
2
|
+
var VAULT_DELETION_REFUSAL_RATIO = 0.75;
|
|
3
|
+
var VAULT_DELETION_REFUSAL_MIN_LIVE_FILES = 10;
|
|
4
|
+
function assessVaultDeletionBatch(input) {
|
|
5
|
+
const refusalRatio = input.policy?.refusalRatio ?? VAULT_DELETION_REFUSAL_RATIO;
|
|
6
|
+
const minLiveFiles = input.policy?.minLiveFiles ?? VAULT_DELETION_REFUSAL_MIN_LIVE_FILES;
|
|
7
|
+
if (!Number.isFinite(refusalRatio) || refusalRatio <= 0 || refusalRatio > 1) {
|
|
8
|
+
throw new RangeError(
|
|
9
|
+
`vault deletion policy refusalRatio must be a finite number in (0, 1], got ${refusalRatio}`
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
if (!Number.isFinite(minLiveFiles) || minLiveFiles < 0) {
|
|
13
|
+
throw new RangeError(
|
|
14
|
+
`vault deletion policy minLiveFiles must be a finite number >= 0, got ${minLiveFiles}`
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
const manifestEmpty = input.manifestEmpty ?? false;
|
|
18
|
+
const baselineLive = input.baselinePaths.length;
|
|
19
|
+
const proposedSet = new Set(input.proposedDeletions);
|
|
20
|
+
const wouldDeletePaths = manifestEmpty ? [...input.baselinePaths].sort() : input.baselinePaths.filter((p) => proposedSet.has(p)).sort();
|
|
21
|
+
const wouldDelete = wouldDeletePaths.length;
|
|
22
|
+
const deletionRatio = baselineLive > 0 ? wouldDelete / baselineLive : 0;
|
|
23
|
+
const refusesEmptyManifest = manifestEmpty && baselineLive > 0;
|
|
24
|
+
const refusesAllFiles = wouldDelete > 0 && wouldDelete === baselineLive;
|
|
25
|
+
const refusesBlastRadius = wouldDelete > 0 && baselineLive >= minLiveFiles && deletionRatio >= refusalRatio;
|
|
26
|
+
const reason = refusesEmptyManifest ? "empty-manifest" : refusesAllFiles ? "all-files" : refusesBlastRadius ? "ratio-exceeded" : void 0;
|
|
27
|
+
return {
|
|
28
|
+
allowed: reason === void 0,
|
|
29
|
+
reason,
|
|
30
|
+
deletionRatio,
|
|
31
|
+
wouldDelete,
|
|
32
|
+
wouldDeletePaths,
|
|
33
|
+
baselineLive
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function compareIncarnationBaseline(baselineId, current) {
|
|
37
|
+
const currentId = current.filesystemIncarnationId;
|
|
38
|
+
const provenance = current.filesystemIncarnationProvenance;
|
|
39
|
+
const isValidProvenance = provenance === "fresh" || provenance === "restored" || provenance === "unknown";
|
|
40
|
+
if (typeof currentId !== "string" || currentId.length === 0 || !isValidProvenance) {
|
|
41
|
+
return { verdict: "unidentified" };
|
|
42
|
+
}
|
|
43
|
+
if (current.filesystemIncarnationReadiness !== "ready") {
|
|
44
|
+
return { verdict: "not-ready", readiness: current.filesystemIncarnationReadiness };
|
|
45
|
+
}
|
|
46
|
+
if (baselineId === void 0) {
|
|
47
|
+
return { verdict: "no-baseline" };
|
|
48
|
+
}
|
|
49
|
+
if (baselineId !== currentId) {
|
|
50
|
+
return { verdict: "mismatch", baselineId, currentId };
|
|
51
|
+
}
|
|
52
|
+
return { verdict: "match" };
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
VAULT_DELETION_REFUSAL_MIN_LIVE_FILES,
|
|
56
|
+
VAULT_DELETION_REFUSAL_RATIO,
|
|
57
|
+
assessVaultDeletionBatch,
|
|
58
|
+
compareIncarnationBaseline
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/vault/server.ts"],"sourcesContent":["/**\n * Server-only policy sibling of the React `./vault` client surface. Pure\n * decision logic — no I/O, no logging, ZERO imports — extracted from\n * gtm-agent's local guard (gtm#612) after it lost 48 production vault files:\n * a half-mounted sandbox scanned cleanly and reconciliation derived a\n * mass-deletion batch from an empty manifest. The #265/#332 audit ruled both\n * checks here universal shell mechanism, not gtm-specific, so they live here\n * once instead of being re-forked per product.\n *\n * Two independent checks:\n * - `assessVaultDeletionBatch` — blast-radius refusal. Given the live\n * baseline and what a reconciliation pass proposes to delete, decide\n * whether the batch is safe to apply or must be refused. Refusal is a\n * SUCCESSFUL outcome, not a thrown error: content changes still apply,\n * only the deletions are withheld. What to do with a refusal (log, alert,\n * retry the scan) stays the caller's job.\n * - `compareIncarnationBaseline` — filesystem-incarnation comparison. Given\n * a recorded baseline incarnation id and the sandbox's current identity\n * fields, decide whether the sandbox filesystem is the same one the\n * baseline was captured against, fail-closed on anything not clearly\n * identified and ready.\n *\n * Both are pure functions over caller-supplied data: no manifest reads, no\n * sandbox calls, no console output. The caller pre-filters tombstoned\n * entries (this module only ever sees the LIVE path set) and owns everything\n * that happens after a verdict comes back.\n */\n\n/** Refuse a deletion batch once it would remove at least this fraction of the\n * live baseline (both this and `VAULT_DELETION_REFUSAL_MIN_LIVE_FILES` must\n * hold — a tiny vault can lose all its files without tripping this ratio\n * gate; `refusesAllFiles` catches that case separately). */\nexport const VAULT_DELETION_REFUSAL_RATIO = 0.75\n\n/** The blast-radius ratio gate only engages once the live baseline is at\n * least this large, so a 2-file vault losing 1 file (50%) is not refused on\n * ratio alone. */\nexport const VAULT_DELETION_REFUSAL_MIN_LIVE_FILES = 10\n\n/** Overrides for `assessVaultDeletionBatch`'s two thresholds. Both default to\n * the exported constants above. Values are validated fail-loud:\n * `refusalRatio` must be finite and in (0, 1] — `NaN` (a config parse\n * failure) would make `deletionRatio >= refusalRatio` always false and silently\n * disable the guard, and `0` would refuse a zero-deletion batch; and\n * `minLiveFiles` must be finite and >= 0. Invalid values throw `RangeError`\n * instead of running with a guard that cannot fire (or cannot pass). */\nexport interface VaultDeletionPolicy {\n refusalRatio?: number\n minLiveFiles?: number\n}\n\nexport interface VaultDeletionAssessment {\n /** True when no refusal reason fired. */\n allowed: boolean\n /** Precedence when multiple reasons would fire: `empty-manifest` beats\n * `all-files` beats `ratio-exceeded` (most specific first — an empty scan\n * IS an all-files deletion, but the diagnostic that matters is \"the scan\n * came back empty\", not \"it deleted everything\"). Undefined when allowed. */\n reason?: 'empty-manifest' | 'all-files' | 'ratio-exceeded'\n /** wouldDelete / baselineLive, or 0 when the baseline is itself empty. */\n deletionRatio: number\n wouldDelete: number\n /** The paths that would be deleted, sorted — mirrors gtm's `.sort()` so log\n * output and any snapshot fixture are byte-stable. */\n wouldDeletePaths: string[]\n baselineLive: number\n}\n\n/**\n * Decide whether a reconciliation pass's proposed deletions are safe to\n * apply against the live baseline.\n *\n * `manifestEmpty: true` means the filesystem scan that produced\n * `proposedDeletions` came back with nothing — the caller could not have\n * derived a meaningful proposed-deletions list, so this treats the FULL live\n * baseline as would-delete regardless of what `proposedDeletions` contains.\n * That is what distinguishes `'empty-manifest'` from `'all-files'`: an empty\n * scan structurally implies every baseline path would be deleted, but the\n * diagnostic that matters to a caller is \"the scan was empty\", not merely\n * \"everything would go\".\n */\nexport function assessVaultDeletionBatch(input: {\n /** LIVE (non-tombstoned) baseline path set — the caller pre-filters, as gtm does. */\n baselinePaths: readonly string[]\n /** Paths a reconciliation pass proposes to delete; intersected with `baselinePaths` internally. */\n proposedDeletions: readonly string[]\n manifestEmpty?: boolean\n policy?: VaultDeletionPolicy\n}): VaultDeletionAssessment {\n const refusalRatio = input.policy?.refusalRatio ?? VAULT_DELETION_REFUSAL_RATIO\n const minLiveFiles = input.policy?.minLiveFiles ?? VAULT_DELETION_REFUSAL_MIN_LIVE_FILES\n if (!Number.isFinite(refusalRatio) || refusalRatio <= 0 || refusalRatio > 1) {\n throw new RangeError(\n `vault deletion policy refusalRatio must be a finite number in (0, 1], got ${refusalRatio}`,\n )\n }\n if (!Number.isFinite(minLiveFiles) || minLiveFiles < 0) {\n throw new RangeError(\n `vault deletion policy minLiveFiles must be a finite number >= 0, got ${minLiveFiles}`,\n )\n }\n const manifestEmpty = input.manifestEmpty ?? false\n\n const baselineLive = input.baselinePaths.length\n const proposedSet = new Set(input.proposedDeletions)\n const wouldDeletePaths = manifestEmpty\n ? [...input.baselinePaths].sort()\n : input.baselinePaths.filter((p) => proposedSet.has(p)).sort()\n const wouldDelete = wouldDeletePaths.length\n const deletionRatio = baselineLive > 0 ? wouldDelete / baselineLive : 0\n\n const refusesEmptyManifest = manifestEmpty && baselineLive > 0\n const refusesAllFiles = wouldDelete > 0 && wouldDelete === baselineLive\n // `wouldDelete > 0` is unreachable-false under the validated policy domain\n // (a positive refusalRatio can never be met by a 0 ratio) — it is here so\n // the ratio branch stays safe on its own terms, independent of the\n // validation above ever being relaxed.\n const refusesBlastRadius = wouldDelete > 0\n && baselineLive >= minLiveFiles\n && deletionRatio >= refusalRatio\n\n const reason = refusesEmptyManifest\n ? ('empty-manifest' as const)\n : refusesAllFiles\n ? ('all-files' as const)\n : refusesBlastRadius\n ? ('ratio-exceeded' as const)\n : undefined\n\n return {\n allowed: reason === undefined,\n reason,\n deletionRatio,\n wouldDelete,\n wouldDeletePaths,\n baselineLive,\n }\n}\n\n/** The subset of a sandbox's filesystem-incarnation identity this module\n * needs. A product's real incarnation type is structurally compatible —\n * no import required. */\nexport interface FilesystemIncarnationLike {\n filesystemIncarnationId?: string\n filesystemIncarnationProvenance?: 'fresh' | 'restored' | 'unknown'\n filesystemIncarnationReadiness?: 'transitioning' | 'ready'\n}\n\n/**\n * Result of comparing a recorded baseline incarnation id against the\n * sandbox's current identity. A discriminated union over `verdict` so a\n * caller's `switch` gets compile-time coverage instead of a stringly-typed\n * status it can forget to branch on.\n */\nexport type IncarnationComparison =\n | { verdict: 'match' }\n | { verdict: 'mismatch'; baselineId: string; currentId: string }\n | { verdict: 'not-ready'; readiness: string | undefined }\n | { verdict: 'unidentified' }\n | { verdict: 'no-baseline' }\n\n/**\n * Compare a recorded baseline filesystem-incarnation id against a sandbox's\n * current incarnation fields. Check order mirrors gtm's gate sequence and is\n * itself a tested fail-closed property — each earlier check short-circuits\n * the ones after it, so a box with BOTH bad readiness and a mismatched id\n * resolves `'not-ready'`, never `'mismatch'`:\n *\n * 1. `unidentified` — the current id is missing/empty, or the provenance is\n * not one of `fresh`/`restored`/`unknown`.\n * 2. `not-ready` — readiness is anything other than the literal string\n * `'ready'` (this also catches `undefined`).\n * 3. `no-baseline` — no baseline id was ever recorded to compare against.\n * 4. `mismatch` — the baseline id and current id disagree.\n * 5. `match` — same incarnation.\n */\nexport function compareIncarnationBaseline(\n baselineId: string | undefined,\n current: FilesystemIncarnationLike,\n): IncarnationComparison {\n const currentId = current.filesystemIncarnationId\n const provenance = current.filesystemIncarnationProvenance\n const isValidProvenance = provenance === 'fresh' || provenance === 'restored' || provenance === 'unknown'\n\n if (typeof currentId !== 'string' || currentId.length === 0 || !isValidProvenance) {\n return { verdict: 'unidentified' }\n }\n\n if (current.filesystemIncarnationReadiness !== 'ready') {\n return { verdict: 'not-ready', readiness: current.filesystemIncarnationReadiness }\n }\n\n if (baselineId === undefined) {\n return { verdict: 'no-baseline' }\n }\n\n if (baselineId !== currentId) {\n return { verdict: 'mismatch', baselineId, currentId }\n }\n\n return { verdict: 'match' }\n}\n"],"mappings":";AAgCO,IAAM,+BAA+B;AAKrC,IAAM,wCAAwC;AA4C9C,SAAS,yBAAyB,OAOb;AAC1B,QAAM,eAAe,MAAM,QAAQ,gBAAgB;AACnD,QAAM,eAAe,MAAM,QAAQ,gBAAgB;AACnD,MAAI,CAAC,OAAO,SAAS,YAAY,KAAK,gBAAgB,KAAK,eAAe,GAAG;AAC3E,UAAM,IAAI;AAAA,MACR,6EAA6E,YAAY;AAAA,IAC3F;AAAA,EACF;AACA,MAAI,CAAC,OAAO,SAAS,YAAY,KAAK,eAAe,GAAG;AACtD,UAAM,IAAI;AAAA,MACR,wEAAwE,YAAY;AAAA,IACtF;AAAA,EACF;AACA,QAAM,gBAAgB,MAAM,iBAAiB;AAE7C,QAAM,eAAe,MAAM,cAAc;AACzC,QAAM,cAAc,IAAI,IAAI,MAAM,iBAAiB;AACnD,QAAM,mBAAmB,gBACrB,CAAC,GAAG,MAAM,aAAa,EAAE,KAAK,IAC9B,MAAM,cAAc,OAAO,CAAC,MAAM,YAAY,IAAI,CAAC,CAAC,EAAE,KAAK;AAC/D,QAAM,cAAc,iBAAiB;AACrC,QAAM,gBAAgB,eAAe,IAAI,cAAc,eAAe;AAEtE,QAAM,uBAAuB,iBAAiB,eAAe;AAC7D,QAAM,kBAAkB,cAAc,KAAK,gBAAgB;AAK3D,QAAM,qBAAqB,cAAc,KACpC,gBAAgB,gBAChB,iBAAiB;AAEtB,QAAM,SAAS,uBACV,mBACD,kBACG,cACD,qBACG,mBACD;AAER,SAAO;AAAA,IACL,SAAS,WAAW;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAuCO,SAAS,2BACd,YACA,SACuB;AACvB,QAAM,YAAY,QAAQ;AAC1B,QAAM,aAAa,QAAQ;AAC3B,QAAM,oBAAoB,eAAe,WAAW,eAAe,cAAc,eAAe;AAEhG,MAAI,OAAO,cAAc,YAAY,UAAU,WAAW,KAAK,CAAC,mBAAmB;AACjF,WAAO,EAAE,SAAS,eAAe;AAAA,EACnC;AAEA,MAAI,QAAQ,mCAAmC,SAAS;AACtD,WAAO,EAAE,SAAS,aAAa,WAAW,QAAQ,+BAA+B;AAAA,EACnF;AAEA,MAAI,eAAe,QAAW;AAC5B,WAAO,EAAE,SAAS,cAAc;AAAA,EAClC;AAEA,MAAI,eAAe,WAAW;AAC5B,WAAO,EAAE,SAAS,YAAY,YAAY,UAAU;AAAA,EACtD;AAEA,SAAO,EAAE,SAAS,QAAQ;AAC5B;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/agent-app",
|
|
3
|
-
"version": "0.44.
|
|
3
|
+
"version": "0.44.59",
|
|
4
4
|
"packageManager": "pnpm@11.17.0",
|
|
5
5
|
"description": "Build agent applications with typed chat, tools, sandboxes, integrations, billing, and evaluation.",
|
|
6
6
|
"keywords": [
|
|
@@ -393,6 +393,11 @@
|
|
|
393
393
|
"import": "./dist/vault/lazy.js",
|
|
394
394
|
"default": "./dist/vault/lazy.js"
|
|
395
395
|
},
|
|
396
|
+
"./vault/server": {
|
|
397
|
+
"types": "./dist/vault/server.d.ts",
|
|
398
|
+
"import": "./dist/vault/server.js",
|
|
399
|
+
"default": "./dist/vault/server.js"
|
|
400
|
+
},
|
|
396
401
|
"./brand": {
|
|
397
402
|
"types": "./dist/brand/index.d.ts",
|
|
398
403
|
"import": "./dist/brand/index.js",
|
|
File without changes
|