@agent-teams/docs-protocol 0.3.2 → 0.4.1

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 (111) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +68 -10
  3. package/dist/adapters/adoption-input.d.ts +0 -3
  4. package/dist/adapters/adoption-input.d.ts.map +1 -1
  5. package/dist/adapters/adoption-input.js +12 -5
  6. package/dist/adapters/adoption-input.js.map +1 -1
  7. package/dist/adapters/adoption-package-identity.d.ts.map +1 -1
  8. package/dist/adapters/adoption-package-identity.js +4 -3
  9. package/dist/adapters/adoption-package-identity.js.map +1 -1
  10. package/dist/adapters/docs-command-envelope-schema-validator.js +3 -3
  11. package/dist/adapters/docs-command-envelope-schema-validator.js.map +1 -1
  12. package/dist/adapters/docs-profile-schema-validator.d.ts.map +1 -1
  13. package/dist/adapters/docs-profile-schema-validator.js +4 -1
  14. package/dist/adapters/docs-profile-schema-validator.js.map +1 -1
  15. package/dist/adapters/foundation-docs-port.d.ts +8 -1
  16. package/dist/adapters/foundation-docs-port.d.ts.map +1 -1
  17. package/dist/adapters/foundation-docs-port.js +9 -1
  18. package/dist/adapters/foundation-docs-port.js.map +1 -1
  19. package/dist/adapters/node-adoption-inspector.d.ts +1 -1
  20. package/dist/adapters/node-adoption-inspector.d.ts.map +1 -1
  21. package/dist/adapters/node-adoption-inspector.js +63 -25
  22. package/dist/adapters/node-adoption-inspector.js.map +1 -1
  23. package/dist/adapters/node-profile-discovery.d.ts +7 -0
  24. package/dist/adapters/node-profile-discovery.d.ts.map +1 -0
  25. package/dist/adapters/node-profile-discovery.js +38 -0
  26. package/dist/adapters/node-profile-discovery.js.map +1 -0
  27. package/dist/adapters/node-profile-reader.d.ts +1 -1
  28. package/dist/adapters/node-profile-reader.d.ts.map +1 -1
  29. package/dist/adapters/node-profile-reader.js +9 -8
  30. package/dist/adapters/node-profile-reader.js.map +1 -1
  31. package/dist/application/docs-execution.d.ts +7 -0
  32. package/dist/application/docs-execution.d.ts.map +1 -0
  33. package/dist/application/docs-execution.js +49 -0
  34. package/dist/application/docs-execution.js.map +1 -0
  35. package/dist/application/docs-protocol.d.ts +10 -2
  36. package/dist/application/docs-protocol.d.ts.map +1 -1
  37. package/dist/application/docs-protocol.js +32 -45
  38. package/dist/application/docs-protocol.js.map +1 -1
  39. package/dist/community/bootstrap/index.d.ts +3 -0
  40. package/dist/community/bootstrap/index.d.ts.map +1 -0
  41. package/dist/community/bootstrap/index.js +2 -0
  42. package/dist/community/bootstrap/index.js.map +1 -0
  43. package/dist/community/bootstrap/portable-bootstrap-assets.d.ts +10 -0
  44. package/dist/community/bootstrap/portable-bootstrap-assets.d.ts.map +1 -0
  45. package/dist/community/bootstrap/portable-bootstrap-assets.js +183 -0
  46. package/dist/community/bootstrap/portable-bootstrap-assets.js.map +1 -0
  47. package/dist/community/bootstrap/portable-bootstrap.d.ts +48 -0
  48. package/dist/community/bootstrap/portable-bootstrap.d.ts.map +1 -0
  49. package/dist/community/bootstrap/portable-bootstrap.js +387 -0
  50. package/dist/community/bootstrap/portable-bootstrap.js.map +1 -0
  51. package/dist/community/context/community-query.d.ts +52 -0
  52. package/dist/community/context/community-query.d.ts.map +1 -0
  53. package/dist/community/context/community-query.js +306 -0
  54. package/dist/community/context/community-query.js.map +1 -0
  55. package/dist/community/context/index.d.ts +7 -0
  56. package/dist/community/context/index.d.ts.map +1 -0
  57. package/dist/community/context/index.js +5 -0
  58. package/dist/community/context/index.js.map +1 -0
  59. package/dist/community/context/llms-text.d.ts +37 -0
  60. package/dist/community/context/llms-text.d.ts.map +1 -0
  61. package/dist/community/context/llms-text.js +130 -0
  62. package/dist/community/context/llms-text.js.map +1 -0
  63. package/dist/community/context/minisearch-adapter.d.ts +8 -0
  64. package/dist/community/context/minisearch-adapter.d.ts.map +1 -0
  65. package/dist/community/context/minisearch-adapter.js +59 -0
  66. package/dist/community/context/minisearch-adapter.js.map +1 -0
  67. package/dist/community/context/ranked-search.d.ts +38 -0
  68. package/dist/community/context/ranked-search.d.ts.map +1 -0
  69. package/dist/community/context/ranked-search.js +118 -0
  70. package/dist/community/context/ranked-search.js.map +1 -0
  71. package/dist/composition/cli.d.ts +2 -4
  72. package/dist/composition/cli.d.ts.map +1 -1
  73. package/dist/composition/cli.js +236 -115
  74. package/dist/composition/cli.js.map +1 -1
  75. package/dist/composition/docs-cli-machine.d.ts +9 -0
  76. package/dist/composition/docs-cli-machine.d.ts.map +1 -0
  77. package/dist/composition/docs-cli-machine.js +130 -0
  78. package/dist/composition/docs-cli-machine.js.map +1 -0
  79. package/dist/composition/docs-human-renderer.d.ts +2 -0
  80. package/dist/composition/docs-human-renderer.d.ts.map +1 -1
  81. package/dist/composition/docs-human-renderer.js +18 -1
  82. package/dist/composition/docs-human-renderer.js.map +1 -1
  83. package/dist/composition/node-docs-api.d.ts +12 -0
  84. package/dist/composition/node-docs-api.d.ts.map +1 -1
  85. package/dist/composition/node-docs-api.js +14 -0
  86. package/dist/composition/node-docs-api.js.map +1 -1
  87. package/dist/composition/node-docs-bootstrap-api.d.ts +75 -0
  88. package/dist/composition/node-docs-bootstrap-api.d.ts.map +1 -0
  89. package/dist/composition/node-docs-bootstrap-api.js +97 -0
  90. package/dist/composition/node-docs-bootstrap-api.js.map +1 -0
  91. package/dist/domain/model-v2.d.ts +25 -1
  92. package/dist/domain/model-v2.d.ts.map +1 -1
  93. package/dist/domain/model-v3.d.ts +72 -0
  94. package/dist/domain/model-v3.d.ts.map +1 -0
  95. package/dist/domain/model-v3.js +2 -0
  96. package/dist/domain/model-v3.js.map +1 -0
  97. package/dist/domain/model.d.ts +5 -0
  98. package/dist/domain/model.d.ts.map +1 -1
  99. package/dist/domain/model.js +3 -0
  100. package/dist/domain/model.js.map +1 -1
  101. package/dist/domain/profile-policy.d.ts +4 -3
  102. package/dist/domain/profile-policy.d.ts.map +1 -1
  103. package/dist/domain/profile-policy.js +43 -13
  104. package/dist/domain/profile-policy.js.map +1 -1
  105. package/dist/index.d.ts +9 -3
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +5 -2
  108. package/dist/index.js.map +1 -1
  109. package/package.json +8 -4
  110. package/schemas/docs-protocol-command-envelope/v3.schema.json +529 -0
  111. package/schemas/docs-protocol-profile/v3.schema.json +49 -0
@@ -0,0 +1,8 @@
1
+ import { type CommunitySearchHit, type CommunitySearchIndex, type CommunitySearchRecord } from "./ranked-search.js";
2
+ export declare class CommunityMiniSearchIndex implements CommunitySearchIndex {
3
+ #private;
4
+ replaceAll(documents: CommunitySearchRecord[]): void;
5
+ search(query: string): readonly CommunitySearchHit[];
6
+ }
7
+ export declare function createCommunityMiniSearchIndex(): CommunitySearchIndex;
8
+ //# sourceMappingURL=minisearch-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minisearch-adapter.d.ts","sourceRoot":"","sources":["../../../src/community/context/minisearch-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAkC5B,qBAAa,wBAAyB,YAAW,oBAAoB;;IAGnE,UAAU,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAQnD;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE,CAQnD;CACF;AAED,wBAAgB,8BAA8B,IAAI,oBAAoB,CAErE"}
@@ -0,0 +1,59 @@
1
+ import MiniSearch from "minisearch";
2
+ import { CommunityContextError } from "./ranked-search.js";
3
+ function stringSearchHitId(value) {
4
+ if (typeof value !== "string") {
5
+ throw new CommunityContextError("MiniSearch returned a non-string document id.");
6
+ }
7
+ return value;
8
+ }
9
+ const SEARCH_FIELDS = [
10
+ "title",
11
+ "summary",
12
+ "id",
13
+ "repositoryPath",
14
+ "owner",
15
+ "type",
16
+ "status",
17
+ "related",
18
+ "blockedBy"
19
+ ];
20
+ function createIndex() {
21
+ return new MiniSearch({
22
+ fields: [...SEARCH_FIELDS],
23
+ idField: "id",
24
+ searchOptions: {
25
+ boost: { id: 4, title: 3, summary: 2, repositoryPath: 1.5 },
26
+ combineWith: "AND",
27
+ fuzzy: 0.2,
28
+ prefix: true
29
+ }
30
+ });
31
+ }
32
+ export class CommunityMiniSearchIndex {
33
+ #index = createIndex();
34
+ replaceAll(documents) {
35
+ const replacement = createIndex();
36
+ try {
37
+ replacement.addAll(documents);
38
+ }
39
+ catch {
40
+ throw new CommunityContextError("Search index rejected the canonical document corpus.");
41
+ }
42
+ this.#index = replacement;
43
+ }
44
+ search(query) {
45
+ try {
46
+ return Object.freeze(this.#index.search(query).map(({ id, score }) => Object.freeze({ id: stringSearchHitId(id), score })));
47
+ }
48
+ catch (error) {
49
+ if (error instanceof CommunityContextError) {
50
+ throw error;
51
+ }
52
+ throw new CommunityContextError("Search index could not evaluate the canonical query.");
53
+ }
54
+ }
55
+ }
56
+ export function createCommunityMiniSearchIndex() {
57
+ return new CommunityMiniSearchIndex();
58
+ }
59
+ //# sourceMappingURL=minisearch-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minisearch-adapter.js","sourceRoot":"","sources":["../../../src/community/context/minisearch-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EACL,qBAAqB,EAItB,MAAM,oBAAoB,CAAC;AAE5B,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAqB,CAAC,+CAA+C,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,OAAO;IACP,SAAS;IACT,IAAI;IACJ,gBAAgB;IAChB,OAAO;IACP,MAAM;IACN,QAAQ;IACR,SAAS;IACT,WAAW;CACH,CAAC;AAEX,SAAS,WAAW;IAClB,OAAO,IAAI,UAAU,CAAwB;QAC3C,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,aAAa,EAAE;YACb,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE;YAC3D,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,IAAI;SACb;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,wBAAwB;IACnC,MAAM,GAAG,WAAW,EAAE,CAAC;IAEvB,UAAU,CAAC,SAAkC;QAC3C,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,qBAAqB,CAAC,sDAAsD,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CACnE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAAA,MAAM,KAAK,CAAC;YAAA,CAAC;YAC1D,MAAM,IAAI,qBAAqB,CAAC,sDAAsD,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,IAAI,wBAAwB,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { DocsFindDocument } from "../../domain/model.js";
2
+ export declare class CommunityContextError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export interface CommunitySearchRecord {
6
+ readonly id: string;
7
+ readonly title: string;
8
+ readonly summary: string;
9
+ readonly repositoryPath: string;
10
+ readonly owner: string;
11
+ readonly type: string;
12
+ readonly status: string;
13
+ readonly related: string;
14
+ readonly blockedBy: string;
15
+ }
16
+ export interface CommunitySearchHit {
17
+ readonly id: string | number;
18
+ readonly score: number;
19
+ }
20
+ /** The narrow subset of MiniSearch used by this projection. */
21
+ export interface CommunitySearchIndex {
22
+ /** Atomically replaces the indexed corpus so one adapter can serve repeated projections. */
23
+ replaceAll(documents: CommunitySearchRecord[]): void;
24
+ search(query: string): readonly CommunitySearchHit[];
25
+ }
26
+ export interface CommunityRankedDocument {
27
+ readonly document: DocsFindDocument;
28
+ readonly score: number;
29
+ readonly ranking: "binary-default" | "fuzzy-advisory";
30
+ }
31
+ export interface RankCommunityDocumentsInput {
32
+ readonly documents: readonly DocsFindDocument[];
33
+ readonly query: string;
34
+ readonly searchIndex?: CommunitySearchIndex;
35
+ readonly maxResults?: number;
36
+ }
37
+ export declare function rankCommunityDocuments(input: RankCommunityDocumentsInput): readonly CommunityRankedDocument[];
38
+ //# sourceMappingURL=ranked-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranked-search.d.ts","sourceRoot":"","sources":["../../../src/community/context/ranked-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,4FAA4F;IAC5F,UAAU,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;CACvD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAqFD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,SAAS,uBAAuB,EAAE,CAgC7G"}
@@ -0,0 +1,118 @@
1
+ const MAXIMUM_DOCUMENTS = 10_000;
2
+ const MAXIMUM_FIELD_BYTES = 65_536;
3
+ const BINARY = (left, right) => Buffer.compare(Buffer.from(left, "utf8"), Buffer.from(right, "utf8"));
4
+ export class CommunityContextError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "CommunityContextError";
8
+ }
9
+ }
10
+ function normalizedField(value, subject) {
11
+ if (typeof value !== "string") {
12
+ throw new CommunityContextError(`${subject} must be a string.`);
13
+ }
14
+ const normalized = value.normalize("NFC");
15
+ if (normalized.includes("\u0000") || Buffer.byteLength(normalized, "utf8") > MAXIMUM_FIELD_BYTES) {
16
+ throw new CommunityContextError(`${subject} is outside the bounded text contract.`);
17
+ }
18
+ return normalized;
19
+ }
20
+ function normalizedStringArray(value, subject) {
21
+ if (!Array.isArray(value)) {
22
+ throw new CommunityContextError(`${subject} must be an array of strings.`);
23
+ }
24
+ return Object.freeze(value.map((entry, index) => normalizedField(entry, `${subject}[${String(index)}]`)));
25
+ }
26
+ function normalizeDocument(document, index) {
27
+ const subject = `documents[${String(index)}]`;
28
+ return Object.freeze({
29
+ id: normalizedField(document.id, `${subject}.id`),
30
+ owner: normalizedField(document.owner, `${subject}.owner`),
31
+ repositoryPath: normalizedField(document.repositoryPath, `${subject}.repositoryPath`),
32
+ source: document.source,
33
+ status: normalizedField(document.status, `${subject}.status`),
34
+ summary: normalizedField(document.summary, `${subject}.summary`),
35
+ title: normalizedField(document.title, `${subject}.title`),
36
+ type: normalizedField(document.type, `${subject}.type`),
37
+ // Metadata remains opaque consumer authority. Never spread or index its keys.
38
+ metadata: document.metadata,
39
+ related: normalizedStringArray(document.related, `${subject}.related`),
40
+ blockedBy: normalizedStringArray(document.blockedBy, `${subject}.blockedBy`)
41
+ });
42
+ }
43
+ function compareDocuments(left, right) {
44
+ const byId = BINARY(left.id, right.id);
45
+ return byId === 0 ? BINARY(left.repositoryPath, right.repositoryPath) : byId;
46
+ }
47
+ function normalizedCorpus(documents) {
48
+ if (documents.length > MAXIMUM_DOCUMENTS) {
49
+ throw new CommunityContextError(`Document corpus exceeds ${String(MAXIMUM_DOCUMENTS)} entries.`);
50
+ }
51
+ const normalized = documents.map(normalizeDocument).toSorted(compareDocuments);
52
+ const ids = new Set();
53
+ const paths = new Set();
54
+ for (const document of normalized) {
55
+ if (ids.has(document.id)) {
56
+ throw new CommunityContextError(`Duplicate canonical document id: ${document.id}.`);
57
+ }
58
+ if (paths.has(document.repositoryPath)) {
59
+ throw new CommunityContextError(`Duplicate canonical document path: ${document.repositoryPath}.`);
60
+ }
61
+ ids.add(document.id);
62
+ paths.add(document.repositoryPath);
63
+ }
64
+ return Object.freeze(normalized);
65
+ }
66
+ function maximumResults(value, corpusSize) {
67
+ if (value === undefined) {
68
+ return corpusSize;
69
+ }
70
+ if (!Number.isSafeInteger(value) || value < 0 || value > MAXIMUM_DOCUMENTS) {
71
+ throw new CommunityContextError(`maxResults must be an integer from 0 through ${String(MAXIMUM_DOCUMENTS)}.`);
72
+ }
73
+ return value;
74
+ }
75
+ function searchRecord(document) {
76
+ return Object.freeze({
77
+ id: document.id,
78
+ title: document.title,
79
+ summary: document.summary,
80
+ repositoryPath: document.repositoryPath,
81
+ owner: document.owner,
82
+ type: document.type,
83
+ status: document.status,
84
+ related: document.related.join("\n"),
85
+ blockedBy: document.blockedBy.join("\n")
86
+ });
87
+ }
88
+ export function rankCommunityDocuments(input) {
89
+ const documents = normalizedCorpus(input.documents);
90
+ const limit = maximumResults(input.maxResults, documents.length);
91
+ if (documents.length === 0 || limit === 0) {
92
+ return Object.freeze([]);
93
+ }
94
+ const query = normalizedField(input.query, "query").trim();
95
+ if (query.length === 0) {
96
+ return Object.freeze(documents.slice(0, limit).map((document) => Object.freeze({ document, score: 0, ranking: "binary-default" })));
97
+ }
98
+ if (input.searchIndex === undefined) {
99
+ throw new CommunityContextError("A searchIndex is required for a non-empty fuzzy query.");
100
+ }
101
+ input.searchIndex.replaceAll(documents.map(searchRecord));
102
+ const byId = new Map(documents.map((document) => [document.id, document]));
103
+ const seenHits = new Set();
104
+ const ranked = input.searchIndex.search(query).map((hit, index) => {
105
+ if (typeof hit.id !== "string" || !Number.isFinite(hit.score) || hit.score < 0) {
106
+ throw new CommunityContextError(`Search hit ${String(index)} is malformed.`);
107
+ }
108
+ const id = hit.id.normalize("NFC");
109
+ const document = byId.get(id);
110
+ if (document === undefined || seenHits.has(id)) {
111
+ throw new CommunityContextError(`Search hit ${String(index)} has an unknown or duplicate id.`);
112
+ }
113
+ seenHits.add(id);
114
+ return Object.freeze({ document, score: hit.score, ranking: "fuzzy-advisory" });
115
+ });
116
+ return Object.freeze(ranked.toSorted((left, right) => right.score - left.score || compareDocuments(left.document, right.document)).slice(0, limit));
117
+ }
118
+ //# sourceMappingURL=ranked-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranked-search.js","sourceRoot":"","sources":["../../../src/community/context/ranked-search.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAExE,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAuCD,SAAS,eAAe,CAAC,KAAc,EAAE,OAAe;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAqB,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QACjG,MAAM,IAAI,qBAAqB,CAAC,GAAG,OAAO,wCAAwC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,OAAe;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,qBAAqB,CAAC,GAAG,OAAO,+BAA+B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA0B,EAAE,KAAa;IAClE,MAAM,OAAO,GAAG,aAAa,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,OAAO,KAAK,CAAC;QACjD,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,QAAQ,CAAC;QAC1D,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,OAAO,iBAAiB,CAAC;QACrF,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,SAAS,CAAC;QAC7D,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,UAAU,CAAC;QAChE,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,QAAQ,CAAC;QAC1D,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,OAAO,CAAC;QACvD,8EAA8E;QAC9E,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,UAAU,CAAC;QACtE,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,OAAO,YAAY,CAAC;KAC7E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAsB,EAAE,KAAuB;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAsC;IAC9D,IAAI,SAAS,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAAC,2BAA2B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,qBAAqB,CAAC,sCAAsC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC;QACpG,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB,EAAE,UAAkB;IACnE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAAA,OAAO,UAAU,CAAC;IAAA,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;QAC3E,MAAM,IAAI,qBAAqB,CAAC,gDAAgD,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,QAA0B;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;KACzC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAkC;IACvE,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAAA,CAAC;IAEtE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC9D,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAyB,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAAC,wDAAwD,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAU,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjG,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAyB,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAClG,CAAC"}
@@ -1,6 +1,4 @@
1
- import type { DocsCommandV2, DocsExecutionV2 } from "../domain/model-v2.js";
2
- export { renderDocsHuman, renderDocsHumanV2 } from "./docs-human-renderer.js";
3
- export declare function docsCliErrorExecution(command: DocsCommandV2, error: unknown, machine: boolean): DocsExecutionV2<Readonly<Record<string, never>>>;
4
- export declare function validatedMachineExecution(id: DocsCommandV2, execution: DocsExecutionV2<unknown>): Promise<DocsExecutionV2<unknown>>;
1
+ export { renderDocsHuman, renderDocsHumanV2, renderDocsHumanV3 } from "./docs-human-renderer.js";
2
+ export { docsCliErrorExecution, validatedMachineExecution } from "./docs-cli-machine.js";
5
3
  export declare function runDocsCli(argv: readonly string[]): Promise<number>;
6
4
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/composition/cli.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAU5E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAgH9E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CA4BhJ;AAsHD,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,aAAa,EACjB,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAyBnC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/composition/cli.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AA2ZzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC"}