@promptowl/contextnest-community 1.24.0 → 1.25.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/API.md +109 -6
- package/CONFIGURATION.md +7 -2
- package/README.md +1 -1
- package/STEWARDSHIP.md +24 -0
- package/dist/{chunk-2TPQTN4Y.js → chunk-2KHM5C7V.js} +37 -3
- package/dist/{chunk-XUIWAWDO.js → chunk-32SZCH36.js} +4 -4
- package/dist/{chunk-KIAAEHWL.js → chunk-7FROMOZM.js} +23 -5
- package/dist/{chunk-5EZOPA47.js → chunk-DTLMBF4W.js} +10 -8
- package/dist/{chunk-LA3VTQ22.js → chunk-JDAOA5KP.js} +43 -1
- package/dist/{chunk-I3CSD6CK.js → chunk-KPGNZLZL.js} +2 -2
- package/dist/{chunk-YVMSM7LS.js → chunk-LHWOJPFE.js} +7 -0
- package/dist/{chunk-ZTT4U4NE.js → chunk-TI7HMP64.js} +99 -12
- package/dist/{client-KEY4PYJH.js → client-D44ZHDTJ.js} +1 -1
- package/dist/{engine-S3QBQ7LH.js → engine-TER6FDBP.js} +3 -3
- package/dist/{external-edit-service-6FNFPOJJ.js → external-edit-service-CAGENHDJ.js} +4 -4
- package/dist/{grants-service-UT3EQ3R7.js → grants-service-2OTFS7EH.js} +3 -3
- package/dist/index.js +863 -355
- package/dist/{migrations.postgres-AIQ7WSU7.js → migrations.postgres-23VJJJJX.js} +12 -2
- package/dist/{review-service-HHGOTO6P.js → review-service-4G2XUFS6.js} +7 -7
- package/dist/{stewardship-service-4DHNRULG.js → stewardship-service-S22V2JKG.js} +6 -4
- package/dist/{version-service-KIOQME6U.js → version-service-X4FAG2OZ.js} +4 -4
- package/dist/web3/assets/ActivityTracePage-D2iIbEph.js +1 -0
- package/dist/web3/assets/{AgentDocsPage-CIiaBqMy.js → AgentDocsPage-Dkhgb1hk.js} +1 -1
- package/dist/web3/assets/CollaboratorManager-Bo81D--Q.js +1 -0
- package/dist/web3/assets/CollaboratorsTab-DRCitQuX.js +1 -0
- package/dist/web3/assets/DocumentEditor-DV2WHYbj.js +36 -0
- package/dist/web3/assets/{DocumentsTab-Vba-AzBv.js → DocumentsTab-BUxBCN8o.js} +2 -2
- package/dist/web3/assets/{ExternalEditsTab-BSzAQIGM.js → ExternalEditsTab-kIBimZyE.js} +1 -1
- package/dist/web3/assets/MarkdownEditor-CsVusP2d.css +1 -0
- package/dist/web3/assets/MarkdownEditor-Dfk5uIE5.js +648 -0
- package/dist/web3/assets/{NestPageHeader-CoLUV1Oz.js → NestPageHeader-yOK-OIYZ.js} +1 -1
- package/dist/web3/assets/NestView-DwIagxwJ.js +68 -0
- package/dist/web3/assets/{OverviewTab-Dxi-Hu-N.js → OverviewTab-DFOFMVyE.js} +1 -1
- package/dist/web3/assets/{PersonCombobox-CPOlNs6G.js → PersonCombobox-D350WlrJ.js} +1 -1
- package/dist/web3/assets/{ReasonDialog-DgLxfRWv.js → ReasonDialog-CN3ECAnQ.js} +1 -1
- package/dist/web3/assets/{ReviewActions-OfOdqzCn.js → ReviewActions-BXDTDPp1.js} +1 -1
- package/dist/web3/assets/{ReviewTab-CyX8yxd3.js → ReviewTab-CZewAYiz.js} +1 -1
- package/dist/web3/assets/StewardsTab-AagNWcWS.js +1 -0
- package/dist/web3/assets/{SubmitForReviewModal-Ci2DdWs0.js → SubmitForReviewModal-BOZJxwRN.js} +1 -1
- package/dist/web3/assets/{alert-dialog-DTozKlmV.js → alert-dialog-4SiLKlz8.js} +1 -1
- package/dist/web3/assets/{arrow-left-BCKt4CwQ.js → arrow-left-BAgIocLn.js} +1 -1
- package/dist/web3/assets/backlinks-Cb8Uf8mw.js +24 -0
- package/dist/web3/assets/{card-XG2dP5Xf.js → card-UDyMRcps.js} +1 -1
- package/dist/web3/assets/{chevron-left-BPwUT9DS.js → chevron-left-XR4ReJ9Z.js} +1 -1
- package/dist/web3/assets/{circle-check-DI8IBGeo.js → circle-check-CSkZUEFK.js} +1 -1
- package/dist/web3/assets/{circle-x-VKVhC88W.js → circle-x-in2o3aHU.js} +1 -1
- package/dist/web3/assets/client-attribution-BraarYaP.js +1 -0
- package/dist/web3/assets/{code-xml-CMabYZvH.js → code-xml-pPQgdctI.js} +1 -1
- package/dist/web3/assets/{corner-down-right-BGxwK6wH.js → corner-down-right-CuxZWscX.js} +1 -1
- package/dist/web3/assets/{count-skeleton-DMbdpscX.js → count-skeleton-DBWCDhRy.js} +1 -1
- package/dist/web3/assets/{earth-BEp1EKTo.js → earth-CXOcThqn.js} +1 -1
- package/dist/web3/assets/{file-exclamation-point-r8qZGIjP.js → file-exclamation-point-CSphs1VD.js} +1 -1
- package/dist/web3/assets/{folder-input-Cmtx1Jhk.js → folder-input-BAwK9tFL.js} +1 -1
- package/dist/web3/assets/{index-C1wTSjfP.js → index-A0_ymcqL.js} +1 -1
- package/dist/web3/assets/index-B5hLclEq.js +389 -0
- package/dist/web3/assets/index-DrUAtoQM.css +1 -0
- package/dist/web3/assets/page-BHD4beun.js +1 -0
- package/dist/web3/assets/{page-CPjWQNKx.js → page-BSYUXYmO.js} +1 -1
- package/dist/web3/assets/page-BYc2DIux.js +45 -0
- package/dist/web3/assets/{page-Bicf02Cz.js → page-BfibLg8e.js} +1 -1
- package/dist/web3/assets/page-CGe8MtUu.js +9 -0
- package/dist/web3/assets/{page-CQt3ZGbf.js → page-CIgPJmG6.js} +1 -1
- package/dist/web3/assets/{page-CHb0F5hV.js → page-CUjuSs5Q.js} +1 -1
- package/dist/web3/assets/{page-BYUFhYWZ.js → page-Ck31nx9b.js} +1 -1
- package/dist/web3/assets/{page-BExMvttJ.js → page-Cpdj_11Y.js} +1 -1
- package/dist/web3/assets/{page-CtaW65El.js → page-D0sN3GO6.js} +1 -1
- package/dist/web3/assets/page-DEpH91X2.js +1 -0
- package/dist/web3/assets/{page-CC0NJi8v.js → page-l8-B7CGt.js} +1 -1
- package/dist/web3/assets/{page-DGOL9l8i.js → page-mnSHmk6A.js} +1 -1
- package/dist/web3/assets/{page-title-ClvvBsIo.js → page-title-BkqlUA0j.js} +1 -1
- package/dist/web3/assets/{page-ByyVLDVo.js → page-xzYqkBUP.js} +5 -5
- package/dist/web3/assets/{play-C5YNKpAH.js → play-B8xE9j5f.js} +1 -1
- package/dist/web3/assets/{refresh-cw-BhHzSH9m.js → refresh-cw-CsCtmWwX.js} +1 -1
- package/dist/web3/assets/{scroll-area-hz-xtayP.js → scroll-area-CbcH6yrZ.js} +1 -1
- package/dist/web3/assets/{select-DBFTrUmI.js → select-DrL0mpRN.js} +2 -2
- package/dist/web3/assets/{send-0CHvmluT.js → send-CvAgOUPG.js} +1 -1
- package/dist/web3/assets/{settings-CeeF4LEb.js → settings-EY4A_DYv.js} +1 -1
- package/dist/web3/assets/{share-2-CMnOlOt-.js → share-2-vGmZUl90.js} +1 -1
- package/dist/web3/assets/{tag-DQ_6J5Gv.js → tag-Br_y1f00.js} +1 -1
- package/dist/web3/assets/{trash-2-HBi-Pslz.js → trash-2-B4hRXo-p.js} +1 -1
- package/dist/web3/assets/{triangle-alert-CDy8-7sv.js → triangle-alert-CsYGyfGZ.js} +1 -1
- package/dist/web3/assets/{user-plus-CvBNcpn4.js → user-plus-4CTYEkd3.js} +1 -1
- package/dist/web3/assets/{x-By7piikG.js → x-qxt1WrUi.js} +1 -1
- package/dist/web3/assets/zap-BcsKR0ef.js +16 -0
- package/dist/web3/index.html +2 -2
- package/package.json +2 -2
- package/dist/web3/assets/ActivityTracePage-BOZHgJ8S.js +0 -1
- package/dist/web3/assets/CollaboratorManager-By91wrIr.js +0 -1
- package/dist/web3/assets/CollaboratorsTab-D1EE64Fs.js +0 -1
- package/dist/web3/assets/DocumentEditor-DrQfrW3d.js +0 -36
- package/dist/web3/assets/MarkdownEditor-74N_naNQ.css +0 -1
- package/dist/web3/assets/MarkdownEditor-C9zqZjC5.js +0 -643
- package/dist/web3/assets/NestView-CTZ55tXD.js +0 -63
- package/dist/web3/assets/StewardsTab-DBEEfAQI.js +0 -1
- package/dist/web3/assets/backlinks-CYd4xENL.js +0 -24
- package/dist/web3/assets/index-BM-h3DwI.css +0 -1
- package/dist/web3/assets/index-EaX2yql0.js +0 -389
- package/dist/web3/assets/page-B3yvQvHy.js +0 -1
- package/dist/web3/assets/page-BUOADv2X.js +0 -1
- package/dist/web3/assets/page-BsPMDm5d.js +0 -45
- package/dist/web3/assets/page-Cj1NetQ-.js +0 -1
- package/dist/web3/assets/zap-C2T8riBp.js +0 -11
|
@@ -31,6 +31,12 @@ var ValidationError = class extends AppError {
|
|
|
31
31
|
this.name = "ValidationError";
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
+
var PayloadTooLargeError = class extends AppError {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(413, message);
|
|
37
|
+
this.name = "PayloadTooLargeError";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
34
40
|
var ConflictError = class extends AppError {
|
|
35
41
|
constructor(message) {
|
|
36
42
|
super(409, message);
|
|
@@ -61,6 +67,7 @@ export {
|
|
|
61
67
|
ForbiddenError,
|
|
62
68
|
UnauthorizedError,
|
|
63
69
|
ValidationError,
|
|
70
|
+
PayloadTooLargeError,
|
|
64
71
|
ConflictError,
|
|
65
72
|
LockedError,
|
|
66
73
|
VaultBusyError,
|
|
@@ -2,13 +2,88 @@ import {
|
|
|
2
2
|
buildTitleMap,
|
|
3
3
|
insertOrReplace,
|
|
4
4
|
nowExpr
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7FROMOZM.js";
|
|
6
|
+
import {
|
|
7
|
+
ValidationError
|
|
8
|
+
} from "./chunk-LHWOJPFE.js";
|
|
6
9
|
import {
|
|
7
10
|
getDb
|
|
8
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JDAOA5KP.js";
|
|
9
12
|
|
|
10
13
|
// src/governance/version-service.ts
|
|
11
14
|
import { createHash } from "crypto";
|
|
15
|
+
|
|
16
|
+
// src/shared/client-metadata.ts
|
|
17
|
+
import {
|
|
18
|
+
clientField,
|
|
19
|
+
clientMetadataSchema,
|
|
20
|
+
CLIENT_METADATA_MAX_VALUE_LENGTH
|
|
21
|
+
} from "@promptowl/contextnest-engine/api";
|
|
22
|
+
import { z } from "zod";
|
|
23
|
+
var clientToolField = {
|
|
24
|
+
client: z.any().optional().describe(clientField.client.description ?? "")
|
|
25
|
+
};
|
|
26
|
+
function boundedValue(raw) {
|
|
27
|
+
const cut = raw.slice(0, CLIENT_METADATA_MAX_VALUE_LENGTH);
|
|
28
|
+
const last = cut.charCodeAt(cut.length - 1);
|
|
29
|
+
return last >= 55296 && last <= 56319 ? cut.slice(0, -1) : cut;
|
|
30
|
+
}
|
|
31
|
+
function orAbsent(value) {
|
|
32
|
+
return Object.keys(value).length > 0 ? value : void 0;
|
|
33
|
+
}
|
|
34
|
+
function parseClientMetadata(raw) {
|
|
35
|
+
if (raw === void 0 || raw === null) return void 0;
|
|
36
|
+
const parsed = clientMetadataSchema.safeParse(raw);
|
|
37
|
+
if (!parsed.success) {
|
|
38
|
+
const detail = parsed.error.issues.map((i) => i.path.length ? `${i.path.join(".")}: ${i.message}` : i.message).join("; ");
|
|
39
|
+
throw new ValidationError(`Invalid client metadata \u2014 ${detail}`);
|
|
40
|
+
}
|
|
41
|
+
return orAbsent(parsed.data);
|
|
42
|
+
}
|
|
43
|
+
function mergeClient(derived, supplied) {
|
|
44
|
+
return orAbsent({ ...derived, ...supplied });
|
|
45
|
+
}
|
|
46
|
+
function derivedClient(c, connection) {
|
|
47
|
+
if (process.env.CONTEXTNEST_NO_ATTRIBUTION === "1") return {};
|
|
48
|
+
const agent = process.env.CONTEXTNEST_AGENT || connection?.agent || c.get("apiKeyLabel") || "";
|
|
49
|
+
const session = process.env.CONTEXTNEST_SESSION_ID || connection?.session_id || c.req.header("Mcp-Session-Id") || "";
|
|
50
|
+
return {
|
|
51
|
+
// Truncated to the engine's bound, not rejected: a derived value must never
|
|
52
|
+
// be the reason an otherwise valid call fails validation.
|
|
53
|
+
...agent ? { agent: boundedValue(String(agent)) } : {},
|
|
54
|
+
...session ? { session_id: boundedValue(String(session)) } : {}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function connectionClient(server) {
|
|
58
|
+
const name = server.server.getClientVersion()?.name;
|
|
59
|
+
const sessionId = server.server.transport?.sessionId;
|
|
60
|
+
return {
|
|
61
|
+
...name ? { agent: name } : {},
|
|
62
|
+
...sessionId ? { session_id: sessionId } : {}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function attributeRequest(c, supplied, connection) {
|
|
66
|
+
const client = mergeClient(
|
|
67
|
+
derivedClient(c, connection),
|
|
68
|
+
parseClientMetadata(supplied)
|
|
69
|
+
);
|
|
70
|
+
if (client) c.set("clientMetadata", client);
|
|
71
|
+
return client;
|
|
72
|
+
}
|
|
73
|
+
function serializeClient(value) {
|
|
74
|
+
return value ? JSON.stringify(value) : null;
|
|
75
|
+
}
|
|
76
|
+
function deserializeClient(raw) {
|
|
77
|
+
if (typeof raw !== "string" || !raw) return void 0;
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(raw);
|
|
80
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? orAbsent(parsed) : void 0;
|
|
81
|
+
} catch {
|
|
82
|
+
return void 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// src/governance/version-service.ts
|
|
12
87
|
function hashContent(content) {
|
|
13
88
|
return createHash("sha256").update(content).digest("hex");
|
|
14
89
|
}
|
|
@@ -20,8 +95,8 @@ async function createVersion(params) {
|
|
|
20
95
|
const db = getDb();
|
|
21
96
|
const contentHash = hashContent(params.content);
|
|
22
97
|
await db.run(
|
|
23
|
-
`INSERT INTO node_versions (nest_id, node_id, version, content_hash, author, status, change_note, tags_json)
|
|
24
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
98
|
+
`INSERT INTO node_versions (nest_id, node_id, version, content_hash, author, status, change_note, tags_json, client_json)
|
|
99
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
25
100
|
[
|
|
26
101
|
params.nestId,
|
|
27
102
|
params.nodeId,
|
|
@@ -30,7 +105,8 @@ async function createVersion(params) {
|
|
|
30
105
|
params.author,
|
|
31
106
|
params.status,
|
|
32
107
|
params.changeNote || null,
|
|
33
|
-
params.tags ? JSON.stringify(params.tags) : null
|
|
108
|
+
params.tags ? JSON.stringify(params.tags) : null,
|
|
109
|
+
serializeClient(params.client)
|
|
34
110
|
]
|
|
35
111
|
);
|
|
36
112
|
return {
|
|
@@ -39,7 +115,8 @@ async function createVersion(params) {
|
|
|
39
115
|
editedBy: params.author,
|
|
40
116
|
editedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
41
117
|
changeNote: params.changeNote,
|
|
42
|
-
status: params.status
|
|
118
|
+
status: params.status,
|
|
119
|
+
client: params.client
|
|
43
120
|
};
|
|
44
121
|
}
|
|
45
122
|
async function upsertVersion(params) {
|
|
@@ -47,13 +124,13 @@ async function upsertVersion(params) {
|
|
|
47
124
|
const contentHash = hashContent(params.content);
|
|
48
125
|
const sql = insertOrReplace(
|
|
49
126
|
db,
|
|
50
|
-
`INSERT INTO node_versions (nest_id, node_id, version, content_hash, author, status, change_note, tags_json)
|
|
51
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
127
|
+
`INSERT INTO node_versions (nest_id, node_id, version, content_hash, author, status, change_note, tags_json, client_json)
|
|
128
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
52
129
|
["nest_id", "node_id", "version"],
|
|
53
130
|
// Reset created_at on conflict too: SQLite's INSERT OR REPLACE deletes+
|
|
54
131
|
// reinserts (created_at → now), so mirror that on Postgres — otherwise a
|
|
55
132
|
// draft edited in place would keep its original (import-time) "edited at".
|
|
56
|
-
`content_hash = excluded.content_hash, author = excluded.author, status = excluded.status, change_note = excluded.change_note, tags_json = excluded.tags_json, created_at = ${nowExpr(db)}`
|
|
133
|
+
`content_hash = excluded.content_hash, author = excluded.author, status = excluded.status, change_note = excluded.change_note, tags_json = excluded.tags_json, client_json = excluded.client_json, created_at = ${nowExpr(db)}`
|
|
57
134
|
);
|
|
58
135
|
await db.run(sql, [
|
|
59
136
|
params.nestId,
|
|
@@ -63,7 +140,8 @@ async function upsertVersion(params) {
|
|
|
63
140
|
params.author,
|
|
64
141
|
params.status,
|
|
65
142
|
params.changeNote || null,
|
|
66
|
-
params.tags ? JSON.stringify(params.tags) : null
|
|
143
|
+
params.tags ? JSON.stringify(params.tags) : null,
|
|
144
|
+
serializeClient(params.client)
|
|
67
145
|
]);
|
|
68
146
|
return {
|
|
69
147
|
version: params.version,
|
|
@@ -71,7 +149,8 @@ async function upsertVersion(params) {
|
|
|
71
149
|
editedBy: params.author,
|
|
72
150
|
editedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
73
151
|
changeNote: params.changeNote,
|
|
74
|
-
status: params.status
|
|
152
|
+
status: params.status,
|
|
153
|
+
client: params.client
|
|
75
154
|
};
|
|
76
155
|
}
|
|
77
156
|
async function getVersions(nestId, nodeId) {
|
|
@@ -354,11 +433,19 @@ function rowToVersion(row) {
|
|
|
354
433
|
editedBy: row.author,
|
|
355
434
|
editedAt: row.created_at,
|
|
356
435
|
changeNote: row.change_note || void 0,
|
|
357
|
-
status: row.status
|
|
436
|
+
status: row.status,
|
|
437
|
+
client: deserializeClient(row.client_json)
|
|
358
438
|
};
|
|
359
439
|
}
|
|
360
440
|
|
|
361
441
|
export {
|
|
442
|
+
clientToolField,
|
|
443
|
+
parseClientMetadata,
|
|
444
|
+
mergeClient,
|
|
445
|
+
connectionClient,
|
|
446
|
+
attributeRequest,
|
|
447
|
+
serializeClient,
|
|
448
|
+
deserializeClient,
|
|
362
449
|
hashContent,
|
|
363
450
|
SYSTEM_AUTHOR_PREFIX,
|
|
364
451
|
systemAuthor,
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
engineApi,
|
|
3
3
|
engineCache,
|
|
4
4
|
opContext
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-7FROMOZM.js";
|
|
6
|
+
import "./chunk-LHWOJPFE.js";
|
|
7
|
+
import "./chunk-JDAOA5KP.js";
|
|
8
8
|
import "./chunk-YB3LKF7U.js";
|
|
9
9
|
import "./chunk-FRQJWGN3.js";
|
|
10
10
|
export {
|
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
scanNestForDrift,
|
|
12
12
|
startDriftScanner,
|
|
13
13
|
stopDriftScanner
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-32SZCH36.js";
|
|
15
|
+
import "./chunk-7FROMOZM.js";
|
|
16
|
+
import "./chunk-LHWOJPFE.js";
|
|
17
|
+
import "./chunk-JDAOA5KP.js";
|
|
18
18
|
import "./chunk-YB3LKF7U.js";
|
|
19
19
|
import "./chunk-FRQJWGN3.js";
|
|
20
20
|
export {
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
listGrants,
|
|
7
7
|
listUserGrants,
|
|
8
8
|
resolveNodeGrant
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-KPGNZLZL.js";
|
|
10
|
+
import "./chunk-LHWOJPFE.js";
|
|
11
|
+
import "./chunk-JDAOA5KP.js";
|
|
12
12
|
import "./chunk-YB3LKF7U.js";
|
|
13
13
|
export {
|
|
14
14
|
createGrant,
|