@agimon-ai/po-vault 0.0.0-alpha.61
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/LICENSE +149 -0
- package/README.md +57 -0
- package/dist/apiContracts.cjs +17 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +53 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +13 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/contracts-C6dCp2Il.mjs +9 -0
- package/dist/contracts-C6dCp2Il.mjs.map +1 -0
- package/dist/contracts-Do7L_d_L.cjs +13 -0
- package/dist/contracts-Do7L_d_L.cjs.map +1 -0
- package/dist/extensions/server.cjs +655 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +627 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.mts +27 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/testing.cjs +89 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.mts +10 -0
- package/dist/testing.d.mts.map +1 -0
- package/dist/testing.mjs +88 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/type-fwXKnI1F.d.mts +42 -0
- package/dist/type-fwXKnI1F.d.mts.map +1 -0
- package/dist/vaultRules-B84nuLpN.mjs +83 -0
- package/dist/vaultRules-B84nuLpN.mjs.map +1 -0
- package/dist/vaultRules-CUudYo7G.cjs +202 -0
- package/dist/vaultRules-CUudYo7G.cjs.map +1 -0
- package/llms.txt +7 -0
- package/package.json +113 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
//#region src/constants/vault.ts
|
|
2
|
+
const PO_VAULT_SERVICE = "po/vault";
|
|
3
|
+
/** The OS keyring service the data-encryption key is stored under, one account per vault id. */
|
|
4
|
+
const VAULT_KEYRING_SERVICE = "ai.agimon.po-vault";
|
|
5
|
+
/** The keyring account prefix; the account is `dek:<vault id in hex>`. */
|
|
6
|
+
const VAULT_KEYRING_ACCOUNT_PREFIX = "dek:";
|
|
7
|
+
/** The po-db table prefix the vault owns. */
|
|
8
|
+
const VAULT_DB_PREFIX = "vault";
|
|
9
|
+
/** The folder under the Po home that holds `key.bin` on hosts with no keyring. */
|
|
10
|
+
const VAULT_DIRECTORY = "vault";
|
|
11
|
+
const VAULT_KEY_FILE = "key.bin";
|
|
12
|
+
const VAULT_CHECK_PLAINTEXT = "po-vault-v1";
|
|
13
|
+
const VAULT_CHECK_AAD = "po-vault:check";
|
|
14
|
+
const VAULT_META_ID = "vault_id";
|
|
15
|
+
const VAULT_META_CHECK = "dek_check";
|
|
16
|
+
/** The lease that serializes first-time key creation across processes. */
|
|
17
|
+
const VAULT_INIT_LEASE = "vault:init";
|
|
18
|
+
const VAULT_NAMESPACE_PATTERN = /^[a-z][a-z0-9.-]{0,63}$/u;
|
|
19
|
+
const VAULT_LEASE_TTL_MS = 3e4;
|
|
20
|
+
const VAULT_LEASE_RENEW_MS = 1e4;
|
|
21
|
+
const VAULT_LEASE_WAIT_MS = 35e3;
|
|
22
|
+
const VAULT_KEY_LOST_NOTICE = "Vault key was lost. Saved sign-ins were cleared; sign in again.";
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/services/vaultRules/index.ts
|
|
25
|
+
const MESSAGES = {
|
|
26
|
+
unavailable: "The vault is unavailable.",
|
|
27
|
+
invalid: "The vault request is invalid.",
|
|
28
|
+
conflict: "The vault entry changed."
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Every vault failure. The message is fixed per code, so no key, value or upstream cause can
|
|
32
|
+
* reach a log or a response through it. Consumers match on `code`.
|
|
33
|
+
*/
|
|
34
|
+
var VaultError = class extends Error {
|
|
35
|
+
code;
|
|
36
|
+
constructor(code) {
|
|
37
|
+
super(MESSAGES[code]);
|
|
38
|
+
this.name = "VaultError";
|
|
39
|
+
this.code = code;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/** Wraps any non-vault failure, typically sqlite, as `unavailable`, dropping its message. */
|
|
43
|
+
function asVaultError(error) {
|
|
44
|
+
return error instanceof VaultError ? error : new VaultError("unavailable");
|
|
45
|
+
}
|
|
46
|
+
const CONTROL_CHARACTERS = /[\u0000-\u001f\u007f]/u;
|
|
47
|
+
function assertEntryName(namespace, key) {
|
|
48
|
+
if (typeof namespace !== "string" || !VAULT_NAMESPACE_PATTERN.test(namespace)) throw new VaultError("invalid");
|
|
49
|
+
if (typeof key !== "string" || key.length === 0 || key.length > 512 || CONTROL_CHARACTERS.test(key)) throw new VaultError("invalid");
|
|
50
|
+
}
|
|
51
|
+
function assertRevision(revision) {
|
|
52
|
+
if (typeof revision !== "number" || !Number.isSafeInteger(revision) || revision < 1) throw new VaultError("invalid");
|
|
53
|
+
}
|
|
54
|
+
function isPlainObject(value) {
|
|
55
|
+
const prototype = Object.getPrototypeOf(value);
|
|
56
|
+
return prototype === Object.prototype || prototype === null;
|
|
57
|
+
}
|
|
58
|
+
function assertJsonValue(value, seen) {
|
|
59
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return;
|
|
60
|
+
if (typeof value === "number") {
|
|
61
|
+
if (!Number.isFinite(value)) throw new VaultError("invalid");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (typeof value !== "object" || seen.has(value)) throw new VaultError("invalid");
|
|
65
|
+
seen.add(value);
|
|
66
|
+
if (Array.isArray(value)) for (const item of value) assertJsonValue(item, seen);
|
|
67
|
+
else {
|
|
68
|
+
if (!isPlainObject(value)) throw new VaultError("invalid");
|
|
69
|
+
for (const item of Object.values(value)) assertJsonValue(item, seen);
|
|
70
|
+
}
|
|
71
|
+
seen.delete(value);
|
|
72
|
+
}
|
|
73
|
+
/** The stored plaintext of a value: JSON, at most 64 KiB of UTF-8. */
|
|
74
|
+
function serializeValue(value) {
|
|
75
|
+
assertJsonValue(value, /* @__PURE__ */ new Set());
|
|
76
|
+
const text = JSON.stringify(value);
|
|
77
|
+
if (new TextEncoder().encode(text).length > 65536) throw new VaultError("invalid");
|
|
78
|
+
return text;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
Object.defineProperty(exports, "PO_VAULT_SERVICE", {
|
|
82
|
+
enumerable: true,
|
|
83
|
+
get: function() {
|
|
84
|
+
return PO_VAULT_SERVICE;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(exports, "VAULT_CHECK_AAD", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function() {
|
|
90
|
+
return VAULT_CHECK_AAD;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
Object.defineProperty(exports, "VAULT_CHECK_PLAINTEXT", {
|
|
94
|
+
enumerable: true,
|
|
95
|
+
get: function() {
|
|
96
|
+
return VAULT_CHECK_PLAINTEXT;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
Object.defineProperty(exports, "VAULT_DB_PREFIX", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
get: function() {
|
|
102
|
+
return VAULT_DB_PREFIX;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
Object.defineProperty(exports, "VAULT_DIRECTORY", {
|
|
106
|
+
enumerable: true,
|
|
107
|
+
get: function() {
|
|
108
|
+
return VAULT_DIRECTORY;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
Object.defineProperty(exports, "VAULT_INIT_LEASE", {
|
|
112
|
+
enumerable: true,
|
|
113
|
+
get: function() {
|
|
114
|
+
return VAULT_INIT_LEASE;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
Object.defineProperty(exports, "VAULT_KEYRING_ACCOUNT_PREFIX", {
|
|
118
|
+
enumerable: true,
|
|
119
|
+
get: function() {
|
|
120
|
+
return VAULT_KEYRING_ACCOUNT_PREFIX;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
Object.defineProperty(exports, "VAULT_KEYRING_SERVICE", {
|
|
124
|
+
enumerable: true,
|
|
125
|
+
get: function() {
|
|
126
|
+
return VAULT_KEYRING_SERVICE;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
Object.defineProperty(exports, "VAULT_KEY_FILE", {
|
|
130
|
+
enumerable: true,
|
|
131
|
+
get: function() {
|
|
132
|
+
return VAULT_KEY_FILE;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
Object.defineProperty(exports, "VAULT_KEY_LOST_NOTICE", {
|
|
136
|
+
enumerable: true,
|
|
137
|
+
get: function() {
|
|
138
|
+
return VAULT_KEY_LOST_NOTICE;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
Object.defineProperty(exports, "VAULT_LEASE_RENEW_MS", {
|
|
142
|
+
enumerable: true,
|
|
143
|
+
get: function() {
|
|
144
|
+
return VAULT_LEASE_RENEW_MS;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(exports, "VAULT_LEASE_TTL_MS", {
|
|
148
|
+
enumerable: true,
|
|
149
|
+
get: function() {
|
|
150
|
+
return VAULT_LEASE_TTL_MS;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
Object.defineProperty(exports, "VAULT_LEASE_WAIT_MS", {
|
|
154
|
+
enumerable: true,
|
|
155
|
+
get: function() {
|
|
156
|
+
return VAULT_LEASE_WAIT_MS;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
Object.defineProperty(exports, "VAULT_META_CHECK", {
|
|
160
|
+
enumerable: true,
|
|
161
|
+
get: function() {
|
|
162
|
+
return VAULT_META_CHECK;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
Object.defineProperty(exports, "VAULT_META_ID", {
|
|
166
|
+
enumerable: true,
|
|
167
|
+
get: function() {
|
|
168
|
+
return VAULT_META_ID;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
Object.defineProperty(exports, "VaultError", {
|
|
172
|
+
enumerable: true,
|
|
173
|
+
get: function() {
|
|
174
|
+
return VaultError;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
Object.defineProperty(exports, "asVaultError", {
|
|
178
|
+
enumerable: true,
|
|
179
|
+
get: function() {
|
|
180
|
+
return asVaultError;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
Object.defineProperty(exports, "assertEntryName", {
|
|
184
|
+
enumerable: true,
|
|
185
|
+
get: function() {
|
|
186
|
+
return assertEntryName;
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
Object.defineProperty(exports, "assertRevision", {
|
|
190
|
+
enumerable: true,
|
|
191
|
+
get: function() {
|
|
192
|
+
return assertRevision;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
Object.defineProperty(exports, "serializeValue", {
|
|
196
|
+
enumerable: true,
|
|
197
|
+
get: function() {
|
|
198
|
+
return serializeValue;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
//# sourceMappingURL=vaultRules-CUudYo7G.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultRules-CUudYo7G.cjs","names":[],"sources":["../src/constants/vault.ts","../src/services/vaultRules/index.ts"],"sourcesContent":["export const PO_VAULT_SERVICE = 'po/vault';\n/** The OS keyring service the data-encryption key is stored under, one account per vault id. */\nexport const VAULT_KEYRING_SERVICE = 'ai.agimon.po-vault';\n/** The keyring account prefix; the account is `dek:<vault id in hex>`. */\nexport const VAULT_KEYRING_ACCOUNT_PREFIX = 'dek:';\n/** The po-db table prefix the vault owns. */\nexport const VAULT_DB_PREFIX = 'vault';\n/** The folder under the Po home that holds `key.bin` on hosts with no keyring. */\nexport const VAULT_DIRECTORY = 'vault';\nexport const VAULT_KEY_FILE = 'key.bin';\nexport const VAULT_DIRECTORY_MODE = 0o700;\nexport const VAULT_KEY_FILE_MODE = 0o600;\n\nexport const VAULT_KEY_BYTES = 32;\nexport const VAULT_IV_BYTES = 12;\nexport const VAULT_TAG_BYTES = 16;\nexport const VAULT_ID_BYTES = 16;\nexport const VAULT_CHECK_PLAINTEXT = 'po-vault-v1';\nexport const VAULT_CHECK_AAD = 'po-vault:check';\nexport const VAULT_META_ID = 'vault_id';\nexport const VAULT_META_CHECK = 'dek_check';\n/** The lease that serializes first-time key creation across processes. */\nexport const VAULT_INIT_LEASE = 'vault:init';\n\nexport const VAULT_NAMESPACE_PATTERN = /^[a-z][a-z0-9.-]{0,63}$/u;\nexport const VAULT_KEY_MAX_LENGTH = 512;\n/** The serialized value, in UTF-8 bytes. */\nexport const VAULT_VALUE_MAX_BYTES = 64 * 1024;\n\nexport const VAULT_LEASE_TTL_MS = 30_000;\nexport const VAULT_LEASE_RENEW_MS = 10_000;\nexport const VAULT_LEASE_WAIT_MS = 35_000;\nexport const VAULT_LEASE_POLL_MS = 50;\nexport const VAULT_LEASE_JITTER_MS = 50;\n\nexport const VAULT_KEY_LOST_NOTICE = 'Vault key was lost. Saved sign-ins were cleared; sign in again.';\n","import { VAULT_KEY_MAX_LENGTH, VAULT_NAMESPACE_PATTERN, VAULT_VALUE_MAX_BYTES } from '../../constants/vault';\nimport type { VaultErrorCode, VaultValue } from '../vault/type';\n\nconst MESSAGES: Readonly<Record<VaultErrorCode, string>> = {\n unavailable: 'The vault is unavailable.',\n invalid: 'The vault request is invalid.',\n conflict: 'The vault entry changed.',\n};\n\n/**\n * Every vault failure. The message is fixed per code, so no key, value or upstream cause can\n * reach a log or a response through it. Consumers match on `code`.\n */\nexport class VaultError extends Error {\n readonly code: VaultErrorCode;\n\n constructor(code: VaultErrorCode) {\n super(MESSAGES[code]);\n this.name = 'VaultError';\n this.code = code;\n }\n}\n\n/** Wraps any non-vault failure, typically sqlite, as `unavailable`, dropping its message. */\nexport function asVaultError(error: unknown): VaultError {\n return error instanceof VaultError ? error : new VaultError('unavailable');\n}\n\n// oxlint-disable-next-line no-control-regex -- the rule is exactly \"no control characters\"\nconst CONTROL_CHARACTERS = /[\\u0000-\\u001f\\u007f]/u;\n\nexport function assertEntryName(namespace: unknown, key: unknown): void {\n if (typeof namespace !== 'string' || !VAULT_NAMESPACE_PATTERN.test(namespace)) throw new VaultError('invalid');\n if (typeof key !== 'string' || key.length === 0 || key.length > VAULT_KEY_MAX_LENGTH || CONTROL_CHARACTERS.test(key))\n throw new VaultError('invalid');\n}\n\nexport function assertRevision(revision: unknown): void {\n if (typeof revision !== 'number' || !Number.isSafeInteger(revision) || revision < 1) throw new VaultError('invalid');\n}\n\nfunction isPlainObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertJsonValue(value: unknown, seen: Set<object>): void {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return;\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new VaultError('invalid');\n return;\n }\n if (typeof value !== 'object' || seen.has(value)) throw new VaultError('invalid');\n seen.add(value);\n if (Array.isArray(value)) {\n for (const item of value) assertJsonValue(item, seen);\n } else {\n if (!isPlainObject(value)) throw new VaultError('invalid');\n for (const item of Object.values(value)) assertJsonValue(item, seen);\n }\n seen.delete(value);\n}\n\n/** The stored plaintext of a value: JSON, at most 64 KiB of UTF-8. */\nexport function serializeValue(value: VaultValue): string {\n assertJsonValue(value, new Set());\n const text = JSON.stringify(value);\n if (new TextEncoder().encode(text).length > VAULT_VALUE_MAX_BYTES) throw new VaultError('invalid');\n return text;\n}\n"],"mappings":";AAAA,MAAa,mBAAmB;;AAEhC,MAAa,wBAAwB;;AAErC,MAAa,+BAA+B;;AAE5C,MAAa,kBAAkB;;AAE/B,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;AAQ9B,MAAa,wBAAwB;AACrC,MAAa,kBAAkB;AAC/B,MAAa,gBAAgB;AAC7B,MAAa,mBAAmB;;AAEhC,MAAa,mBAAmB;AAEhC,MAAa,0BAA0B;AAKvC,MAAa,qBAAqB;AAClC,MAAa,uBAAuB;AACpC,MAAa,sBAAsB;AAInC,MAAa,wBAAwB;;;AChCrC,MAAM,WAAqD;CACzD,aAAa;CACb,SAAS;CACT,UAAU;AACZ;;;;;AAMA,IAAa,aAAb,cAAgC,MAAM;CACpC;CAEA,YAAY,MAAsB;EAChC,MAAM,SAAS,KAAK;EACpB,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;;AAGA,SAAgB,aAAa,OAA4B;CACvD,OAAO,iBAAiB,aAAa,QAAQ,IAAI,WAAW,aAAa;AAC3E;AAGA,MAAM,qBAAqB;AAE3B,SAAgB,gBAAgB,WAAoB,KAAoB;CACtE,IAAI,OAAO,cAAc,YAAY,CAAC,wBAAwB,KAAK,SAAS,GAAG,MAAM,IAAI,WAAW,SAAS;CAC7G,IAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,KAAK,IAAI,SAAA,OAAiC,mBAAmB,KAAK,GAAG,GACjH,MAAM,IAAI,WAAW,SAAS;AAClC;AAEA,SAAgB,eAAe,UAAyB;CACtD,IAAI,OAAO,aAAa,YAAY,CAAC,OAAO,cAAc,QAAQ,KAAK,WAAW,GAAG,MAAM,IAAI,WAAW,SAAS;AACrH;AAEA,SAAS,cAAc,OAAwB;CAC7C,MAAM,YAAY,OAAO,eAAe,KAAK;CAC7C,OAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAEA,SAAS,gBAAgB,OAAgB,MAAyB;CAChE,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;CAC/E,IAAI,OAAO,UAAU,UAAU;EAC7B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,WAAW,SAAS;EAC3D;CACF;CACA,IAAI,OAAO,UAAU,YAAY,KAAK,IAAI,KAAK,GAAG,MAAM,IAAI,WAAW,SAAS;CAChF,KAAK,IAAI,KAAK;CACd,IAAI,MAAM,QAAQ,KAAK,GACrB,KAAK,MAAM,QAAQ,OAAO,gBAAgB,MAAM,IAAI;MAC/C;EACL,IAAI,CAAC,cAAc,KAAK,GAAG,MAAM,IAAI,WAAW,SAAS;EACzD,KAAK,MAAM,QAAQ,OAAO,OAAO,KAAK,GAAG,gBAAgB,MAAM,IAAI;CACrE;CACA,KAAK,OAAO,KAAK;AACnB;;AAGA,SAAgB,eAAe,OAA2B;CACxD,gBAAgB,uBAAO,IAAI,IAAI,CAAC;CAChC,MAAM,OAAO,KAAK,UAAU,KAAK;CACjC,IAAI,IAAI,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAA,OAAgC,MAAM,IAAI,WAAW,SAAS;CACjG,OAAO;AACT"}
|
package/llms.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# @agimon-ai/po-vault
|
|
2
|
+
|
|
3
|
+
The one place Po keeps secrets: encrypted entries in the shared Po database, bound as the global `po/vault` service.
|
|
4
|
+
|
|
5
|
+
## Resources
|
|
6
|
+
|
|
7
|
+
- [Package README](./README.md): how secrets are stored, the key and its fallback file, revisions, the cross-process lock, and the memory vault for tests.
|
package/package.json
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agimon-ai/po-vault",
|
|
3
|
+
"version": "0.0.0-alpha.61",
|
|
4
|
+
"description": "The one place Po keeps secrets: encrypted entries in the shared Po database",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"coding-agent",
|
|
8
|
+
"credentials",
|
|
9
|
+
"developer-tools",
|
|
10
|
+
"po",
|
|
11
|
+
"secrets",
|
|
12
|
+
"typescript",
|
|
13
|
+
"vault"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://agimon.ai",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/AgiFlow/po/issues"
|
|
18
|
+
},
|
|
19
|
+
"license": "BUSL-1.1",
|
|
20
|
+
"author": "Vuong Ngo",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/AgiFlow/po.git",
|
|
24
|
+
"directory": "packages/foundations/po-vault"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"llms.txt",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE",
|
|
31
|
+
"package.json"
|
|
32
|
+
],
|
|
33
|
+
"type": "module",
|
|
34
|
+
"main": "./dist/index.cjs",
|
|
35
|
+
"module": "./dist/index.mjs",
|
|
36
|
+
"types": "./dist/index.d.mts",
|
|
37
|
+
"jsnext:main": "./dist/index.mjs",
|
|
38
|
+
"exports": {
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./dist/index.d.mts",
|
|
41
|
+
"import": "./dist/index.mjs",
|
|
42
|
+
"require": "./dist/index.cjs"
|
|
43
|
+
},
|
|
44
|
+
"./apiContracts": {
|
|
45
|
+
"types": "./dist/apiContracts.d.mts",
|
|
46
|
+
"import": "./dist/apiContracts.mjs",
|
|
47
|
+
"require": "./dist/apiContracts.cjs"
|
|
48
|
+
},
|
|
49
|
+
"./extensions/server": {
|
|
50
|
+
"types": "./dist/extensions/server.d.mts",
|
|
51
|
+
"import": "./dist/extensions/server.mjs",
|
|
52
|
+
"require": "./dist/extensions/server.cjs"
|
|
53
|
+
},
|
|
54
|
+
"./testing": {
|
|
55
|
+
"types": "./dist/testing.d.mts",
|
|
56
|
+
"import": "./dist/testing.mjs",
|
|
57
|
+
"require": "./dist/testing.cjs"
|
|
58
|
+
},
|
|
59
|
+
"./package.json": "./package.json"
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public"
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"@agimon-ai/po-core": "0.0.0-alpha.61",
|
|
66
|
+
"@agimon-ai/po-db": "0.0.0-alpha.61",
|
|
67
|
+
"@deepseek-ai/cordis": "4.0.5",
|
|
68
|
+
"@napi-rs/keyring": "2.1.1"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@agimon-ai/po-build": "0.0.0-alpha.61",
|
|
72
|
+
"@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.61",
|
|
73
|
+
"@types/node": "26.6.5",
|
|
74
|
+
"@vitest/coverage-v8": "5.0.4",
|
|
75
|
+
"tsdown": "0.23.1",
|
|
76
|
+
"typescript": "7.0.2",
|
|
77
|
+
"vitest": "5.0.4"
|
|
78
|
+
},
|
|
79
|
+
"engines": {
|
|
80
|
+
"node": ">=24"
|
|
81
|
+
},
|
|
82
|
+
"poServer": {
|
|
83
|
+
"entry": "./generated/server.ts",
|
|
84
|
+
"dist": "./dist/extensions/server.mjs",
|
|
85
|
+
"scopes": [
|
|
86
|
+
"global",
|
|
87
|
+
"workspace",
|
|
88
|
+
"session"
|
|
89
|
+
],
|
|
90
|
+
"contracts": {
|
|
91
|
+
"entry": "./src/exports/apiContracts.ts",
|
|
92
|
+
"dist": "./dist/apiContracts.mjs"
|
|
93
|
+
},
|
|
94
|
+
"injects": {
|
|
95
|
+
"global": [
|
|
96
|
+
"po/db"
|
|
97
|
+
],
|
|
98
|
+
"workspace": [
|
|
99
|
+
"po/db"
|
|
100
|
+
],
|
|
101
|
+
"session": [
|
|
102
|
+
"po/db"
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"scripts": {
|
|
107
|
+
"build": "tsdown",
|
|
108
|
+
"test": "vitest --run",
|
|
109
|
+
"typecheck": "tsrs --noEmit",
|
|
110
|
+
"lint": "oxlint . && oxfmt . --check",
|
|
111
|
+
"fixcode": "oxlint . --fix && oxfmt ."
|
|
112
|
+
}
|
|
113
|
+
}
|