@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.
Files changed (102) hide show
  1. package/API.md +109 -6
  2. package/CONFIGURATION.md +7 -2
  3. package/README.md +1 -1
  4. package/STEWARDSHIP.md +24 -0
  5. package/dist/{chunk-2TPQTN4Y.js → chunk-2KHM5C7V.js} +37 -3
  6. package/dist/{chunk-XUIWAWDO.js → chunk-32SZCH36.js} +4 -4
  7. package/dist/{chunk-KIAAEHWL.js → chunk-7FROMOZM.js} +23 -5
  8. package/dist/{chunk-5EZOPA47.js → chunk-DTLMBF4W.js} +10 -8
  9. package/dist/{chunk-LA3VTQ22.js → chunk-JDAOA5KP.js} +43 -1
  10. package/dist/{chunk-I3CSD6CK.js → chunk-KPGNZLZL.js} +2 -2
  11. package/dist/{chunk-YVMSM7LS.js → chunk-LHWOJPFE.js} +7 -0
  12. package/dist/{chunk-ZTT4U4NE.js → chunk-TI7HMP64.js} +99 -12
  13. package/dist/{client-KEY4PYJH.js → client-D44ZHDTJ.js} +1 -1
  14. package/dist/{engine-S3QBQ7LH.js → engine-TER6FDBP.js} +3 -3
  15. package/dist/{external-edit-service-6FNFPOJJ.js → external-edit-service-CAGENHDJ.js} +4 -4
  16. package/dist/{grants-service-UT3EQ3R7.js → grants-service-2OTFS7EH.js} +3 -3
  17. package/dist/index.js +863 -355
  18. package/dist/{migrations.postgres-AIQ7WSU7.js → migrations.postgres-23VJJJJX.js} +12 -2
  19. package/dist/{review-service-HHGOTO6P.js → review-service-4G2XUFS6.js} +7 -7
  20. package/dist/{stewardship-service-4DHNRULG.js → stewardship-service-S22V2JKG.js} +6 -4
  21. package/dist/{version-service-KIOQME6U.js → version-service-X4FAG2OZ.js} +4 -4
  22. package/dist/web3/assets/ActivityTracePage-D2iIbEph.js +1 -0
  23. package/dist/web3/assets/{AgentDocsPage-CIiaBqMy.js → AgentDocsPage-Dkhgb1hk.js} +1 -1
  24. package/dist/web3/assets/CollaboratorManager-Bo81D--Q.js +1 -0
  25. package/dist/web3/assets/CollaboratorsTab-DRCitQuX.js +1 -0
  26. package/dist/web3/assets/DocumentEditor-DV2WHYbj.js +36 -0
  27. package/dist/web3/assets/{DocumentsTab-Vba-AzBv.js → DocumentsTab-BUxBCN8o.js} +2 -2
  28. package/dist/web3/assets/{ExternalEditsTab-BSzAQIGM.js → ExternalEditsTab-kIBimZyE.js} +1 -1
  29. package/dist/web3/assets/MarkdownEditor-CsVusP2d.css +1 -0
  30. package/dist/web3/assets/MarkdownEditor-Dfk5uIE5.js +648 -0
  31. package/dist/web3/assets/{NestPageHeader-CoLUV1Oz.js → NestPageHeader-yOK-OIYZ.js} +1 -1
  32. package/dist/web3/assets/NestView-DwIagxwJ.js +68 -0
  33. package/dist/web3/assets/{OverviewTab-Dxi-Hu-N.js → OverviewTab-DFOFMVyE.js} +1 -1
  34. package/dist/web3/assets/{PersonCombobox-CPOlNs6G.js → PersonCombobox-D350WlrJ.js} +1 -1
  35. package/dist/web3/assets/{ReasonDialog-DgLxfRWv.js → ReasonDialog-CN3ECAnQ.js} +1 -1
  36. package/dist/web3/assets/{ReviewActions-OfOdqzCn.js → ReviewActions-BXDTDPp1.js} +1 -1
  37. package/dist/web3/assets/{ReviewTab-CyX8yxd3.js → ReviewTab-CZewAYiz.js} +1 -1
  38. package/dist/web3/assets/StewardsTab-AagNWcWS.js +1 -0
  39. package/dist/web3/assets/{SubmitForReviewModal-Ci2DdWs0.js → SubmitForReviewModal-BOZJxwRN.js} +1 -1
  40. package/dist/web3/assets/{alert-dialog-DTozKlmV.js → alert-dialog-4SiLKlz8.js} +1 -1
  41. package/dist/web3/assets/{arrow-left-BCKt4CwQ.js → arrow-left-BAgIocLn.js} +1 -1
  42. package/dist/web3/assets/backlinks-Cb8Uf8mw.js +24 -0
  43. package/dist/web3/assets/{card-XG2dP5Xf.js → card-UDyMRcps.js} +1 -1
  44. package/dist/web3/assets/{chevron-left-BPwUT9DS.js → chevron-left-XR4ReJ9Z.js} +1 -1
  45. package/dist/web3/assets/{circle-check-DI8IBGeo.js → circle-check-CSkZUEFK.js} +1 -1
  46. package/dist/web3/assets/{circle-x-VKVhC88W.js → circle-x-in2o3aHU.js} +1 -1
  47. package/dist/web3/assets/client-attribution-BraarYaP.js +1 -0
  48. package/dist/web3/assets/{code-xml-CMabYZvH.js → code-xml-pPQgdctI.js} +1 -1
  49. package/dist/web3/assets/{corner-down-right-BGxwK6wH.js → corner-down-right-CuxZWscX.js} +1 -1
  50. package/dist/web3/assets/{count-skeleton-DMbdpscX.js → count-skeleton-DBWCDhRy.js} +1 -1
  51. package/dist/web3/assets/{earth-BEp1EKTo.js → earth-CXOcThqn.js} +1 -1
  52. package/dist/web3/assets/{file-exclamation-point-r8qZGIjP.js → file-exclamation-point-CSphs1VD.js} +1 -1
  53. package/dist/web3/assets/{folder-input-Cmtx1Jhk.js → folder-input-BAwK9tFL.js} +1 -1
  54. package/dist/web3/assets/{index-C1wTSjfP.js → index-A0_ymcqL.js} +1 -1
  55. package/dist/web3/assets/index-B5hLclEq.js +389 -0
  56. package/dist/web3/assets/index-DrUAtoQM.css +1 -0
  57. package/dist/web3/assets/page-BHD4beun.js +1 -0
  58. package/dist/web3/assets/{page-CPjWQNKx.js → page-BSYUXYmO.js} +1 -1
  59. package/dist/web3/assets/page-BYc2DIux.js +45 -0
  60. package/dist/web3/assets/{page-Bicf02Cz.js → page-BfibLg8e.js} +1 -1
  61. package/dist/web3/assets/page-CGe8MtUu.js +9 -0
  62. package/dist/web3/assets/{page-CQt3ZGbf.js → page-CIgPJmG6.js} +1 -1
  63. package/dist/web3/assets/{page-CHb0F5hV.js → page-CUjuSs5Q.js} +1 -1
  64. package/dist/web3/assets/{page-BYUFhYWZ.js → page-Ck31nx9b.js} +1 -1
  65. package/dist/web3/assets/{page-BExMvttJ.js → page-Cpdj_11Y.js} +1 -1
  66. package/dist/web3/assets/{page-CtaW65El.js → page-D0sN3GO6.js} +1 -1
  67. package/dist/web3/assets/page-DEpH91X2.js +1 -0
  68. package/dist/web3/assets/{page-CC0NJi8v.js → page-l8-B7CGt.js} +1 -1
  69. package/dist/web3/assets/{page-DGOL9l8i.js → page-mnSHmk6A.js} +1 -1
  70. package/dist/web3/assets/{page-title-ClvvBsIo.js → page-title-BkqlUA0j.js} +1 -1
  71. package/dist/web3/assets/{page-ByyVLDVo.js → page-xzYqkBUP.js} +5 -5
  72. package/dist/web3/assets/{play-C5YNKpAH.js → play-B8xE9j5f.js} +1 -1
  73. package/dist/web3/assets/{refresh-cw-BhHzSH9m.js → refresh-cw-CsCtmWwX.js} +1 -1
  74. package/dist/web3/assets/{scroll-area-hz-xtayP.js → scroll-area-CbcH6yrZ.js} +1 -1
  75. package/dist/web3/assets/{select-DBFTrUmI.js → select-DrL0mpRN.js} +2 -2
  76. package/dist/web3/assets/{send-0CHvmluT.js → send-CvAgOUPG.js} +1 -1
  77. package/dist/web3/assets/{settings-CeeF4LEb.js → settings-EY4A_DYv.js} +1 -1
  78. package/dist/web3/assets/{share-2-CMnOlOt-.js → share-2-vGmZUl90.js} +1 -1
  79. package/dist/web3/assets/{tag-DQ_6J5Gv.js → tag-Br_y1f00.js} +1 -1
  80. package/dist/web3/assets/{trash-2-HBi-Pslz.js → trash-2-B4hRXo-p.js} +1 -1
  81. package/dist/web3/assets/{triangle-alert-CDy8-7sv.js → triangle-alert-CsYGyfGZ.js} +1 -1
  82. package/dist/web3/assets/{user-plus-CvBNcpn4.js → user-plus-4CTYEkd3.js} +1 -1
  83. package/dist/web3/assets/{x-By7piikG.js → x-qxt1WrUi.js} +1 -1
  84. package/dist/web3/assets/zap-BcsKR0ef.js +16 -0
  85. package/dist/web3/index.html +2 -2
  86. package/package.json +2 -2
  87. package/dist/web3/assets/ActivityTracePage-BOZHgJ8S.js +0 -1
  88. package/dist/web3/assets/CollaboratorManager-By91wrIr.js +0 -1
  89. package/dist/web3/assets/CollaboratorsTab-D1EE64Fs.js +0 -1
  90. package/dist/web3/assets/DocumentEditor-DrQfrW3d.js +0 -36
  91. package/dist/web3/assets/MarkdownEditor-74N_naNQ.css +0 -1
  92. package/dist/web3/assets/MarkdownEditor-C9zqZjC5.js +0 -643
  93. package/dist/web3/assets/NestView-CTZ55tXD.js +0 -63
  94. package/dist/web3/assets/StewardsTab-DBEEfAQI.js +0 -1
  95. package/dist/web3/assets/backlinks-CYd4xENL.js +0 -24
  96. package/dist/web3/assets/index-BM-h3DwI.css +0 -1
  97. package/dist/web3/assets/index-EaX2yql0.js +0 -389
  98. package/dist/web3/assets/page-B3yvQvHy.js +0 -1
  99. package/dist/web3/assets/page-BUOADv2X.js +0 -1
  100. package/dist/web3/assets/page-BsPMDm5d.js +0 -45
  101. package/dist/web3/assets/page-Cj1NetQ-.js +0 -1
  102. 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-KIAAEHWL.js";
5
+ } from "./chunk-7FROMOZM.js";
6
+ import {
7
+ ValidationError
8
+ } from "./chunk-LHWOJPFE.js";
6
9
  import {
7
10
  getDb
8
- } from "./chunk-LA3VTQ22.js";
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,7 +2,7 @@ import {
2
2
  getDb,
3
3
  initDb,
4
4
  resetDb
5
- } from "./chunk-LA3VTQ22.js";
5
+ } from "./chunk-JDAOA5KP.js";
6
6
  import "./chunk-YB3LKF7U.js";
7
7
  export {
8
8
  getDb,
@@ -2,9 +2,9 @@ import {
2
2
  engineApi,
3
3
  engineCache,
4
4
  opContext
5
- } from "./chunk-KIAAEHWL.js";
6
- import "./chunk-YVMSM7LS.js";
7
- import "./chunk-LA3VTQ22.js";
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-XUIWAWDO.js";
15
- import "./chunk-KIAAEHWL.js";
16
- import "./chunk-YVMSM7LS.js";
17
- import "./chunk-LA3VTQ22.js";
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-I3CSD6CK.js";
10
- import "./chunk-YVMSM7LS.js";
11
- import "./chunk-LA3VTQ22.js";
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,