@gmickel/gno 1.17.0 → 1.19.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 (167) hide show
  1. package/README.md +18 -4
  2. package/assets/skill/SKILL.md +44 -1
  3. package/assets/skill/mcp-reference.md +21 -0
  4. package/package.json +3 -2
  5. package/spec/AGENTS.md +83 -0
  6. package/spec/CLAUDE.md +83 -0
  7. package/spec/bench-fixture.schema.json +137 -0
  8. package/spec/cli.md +2894 -0
  9. package/spec/db/schema.sql +442 -0
  10. package/spec/evals-agentic.md +510 -0
  11. package/spec/evals.md +1106 -0
  12. package/spec/mcp.md +2229 -0
  13. package/spec/output-schemas/activation-verification.schema.json +515 -0
  14. package/spec/output-schemas/ask.schema.json +366 -0
  15. package/spec/output-schemas/backlinks.schema.json +131 -0
  16. package/spec/output-schemas/bench-result.schema.json +120 -0
  17. package/spec/output-schemas/capture-receipt.schema.json +143 -0
  18. package/spec/output-schemas/collection-list.schema.json +45 -0
  19. package/spec/output-schemas/context-capsule-v1.schema.json +691 -0
  20. package/spec/output-schemas/context-capsule-verification.schema.json +1338 -0
  21. package/spec/output-schemas/context-list.schema.json +21 -0
  22. package/spec/output-schemas/doctor.schema.json +313 -0
  23. package/spec/output-schemas/error.schema.json +30 -0
  24. package/spec/output-schemas/expansion.schema.json +37 -0
  25. package/spec/output-schemas/get.schema.json +140 -0
  26. package/spec/output-schemas/graph-query.schema.json +99 -0
  27. package/spec/output-schemas/graph.schema.json +371 -0
  28. package/spec/output-schemas/links-list.schema.json +186 -0
  29. package/spec/output-schemas/mcp-add-collection-result.schema.json +23 -0
  30. package/spec/output-schemas/mcp-capture-result.schema.json +152 -0
  31. package/spec/output-schemas/mcp-http-error.schema.json +30 -0
  32. package/spec/output-schemas/mcp-job-list.schema.json +58 -0
  33. package/spec/output-schemas/mcp-job-status.schema.json +224 -0
  34. package/spec/output-schemas/mcp-remove-result.schema.json +39 -0
  35. package/spec/output-schemas/mcp-sync-result.schema.json +41 -0
  36. package/spec/output-schemas/mcp-tag-result.schema.json +33 -0
  37. package/spec/output-schemas/models-list.schema.json +93 -0
  38. package/spec/output-schemas/multi-get.schema.json +103 -0
  39. package/spec/output-schemas/process-status.schema.json +119 -0
  40. package/spec/output-schemas/query-diagnose.schema.json +123 -0
  41. package/spec/output-schemas/resident-status.schema.json +154 -0
  42. package/spec/output-schemas/retrieval-trace-common.schema.json +492 -0
  43. package/spec/output-schemas/retrieval-trace-delete.schema.json +16 -0
  44. package/spec/output-schemas/retrieval-trace-export.schema.json +61 -0
  45. package/spec/output-schemas/retrieval-trace-filters.schema.json +139 -0
  46. package/spec/output-schemas/retrieval-trace-judgment.schema.json +15 -0
  47. package/spec/output-schemas/retrieval-trace-list.schema.json +18 -0
  48. package/spec/output-schemas/retrieval-trace-payloads.schema.json +178 -0
  49. package/spec/output-schemas/retrieval-trace-purge.schema.json +31 -0
  50. package/spec/output-schemas/retrieval-trace-qrels.schema.json +303 -0
  51. package/spec/output-schemas/retrieval-trace-replay.schema.json +286 -0
  52. package/spec/output-schemas/retrieval-trace-show.schema.json +69 -0
  53. package/spec/output-schemas/retrieval-trace-summary.schema.json +65 -0
  54. package/spec/output-schemas/search-result.schema.json +154 -0
  55. package/spec/output-schemas/search-results.schema.json +338 -0
  56. package/spec/output-schemas/similar.schema.json +84 -0
  57. package/spec/output-schemas/status.schema.json +676 -0
  58. package/spec/output-schemas/tags-list.schema.json +48 -0
  59. package/src/app/context-runtime-types.ts +3 -0
  60. package/src/app/context-runtime.ts +15 -1
  61. package/src/cli/commands/ask.ts +106 -36
  62. package/src/cli/commands/context-build.ts +56 -9
  63. package/src/cli/commands/daemon.ts +69 -2
  64. package/src/cli/commands/get.ts +64 -3
  65. package/src/cli/commands/models/pull.ts +13 -3
  66. package/src/cli/commands/query.ts +62 -23
  67. package/src/cli/commands/replay.ts +140 -0
  68. package/src/cli/commands/search.ts +48 -3
  69. package/src/cli/commands/shared.ts +3 -1
  70. package/src/cli/commands/status.ts +2 -0
  71. package/src/cli/commands/trace.ts +200 -0
  72. package/src/cli/commands/vsearch.ts +75 -53
  73. package/src/cli/detach.ts +37 -20
  74. package/src/cli/program.ts +329 -27
  75. package/src/config/index.ts +12 -0
  76. package/src/config/retrieval-traces.ts +56 -0
  77. package/src/config/types.ts +41 -0
  78. package/src/core/context-compiler.ts +11 -4
  79. package/src/core/job-manager.ts +19 -0
  80. package/src/core/mutation-generations.ts +33 -0
  81. package/src/core/retrieval-qrels.ts +405 -0
  82. package/src/core/retrieval-replay-candidate.ts +368 -0
  83. package/src/core/retrieval-replay-types.ts +109 -0
  84. package/src/core/retrieval-replay-validation.ts +89 -0
  85. package/src/core/retrieval-replay.ts +441 -0
  86. package/src/core/retrieval-trace-evidence-origin.ts +175 -0
  87. package/src/core/retrieval-trace-export.ts +113 -0
  88. package/src/core/retrieval-trace-filter-normalization.ts +27 -0
  89. package/src/core/retrieval-trace-filters.ts +19 -0
  90. package/src/core/retrieval-trace-management-helpers.ts +247 -0
  91. package/src/core/retrieval-trace-management-types.ts +132 -0
  92. package/src/core/retrieval-trace-management.ts +422 -0
  93. package/src/core/retrieval-trace-request.ts +141 -0
  94. package/src/core/retrieval-trace-session.ts +494 -0
  95. package/src/core/retrieval-trace.ts +472 -0
  96. package/src/llm/cache.ts +13 -3
  97. package/src/llm/nodeLlamaCpp/adapter.ts +10 -1
  98. package/src/llm/nodeLlamaCpp/lifecycle.ts +71 -0
  99. package/src/mcp/context.ts +161 -0
  100. package/src/mcp/http-security.ts +477 -0
  101. package/src/mcp/http-session.ts +272 -0
  102. package/src/mcp/http-transport.ts +370 -0
  103. package/src/mcp/resources/index.ts +141 -134
  104. package/src/mcp/server.ts +19 -79
  105. package/src/mcp/tools/add-collection.ts +3 -1
  106. package/src/mcp/tools/capture.ts +3 -0
  107. package/src/mcp/tools/clear-collection-embeddings.ts +2 -0
  108. package/src/mcp/tools/context.ts +68 -16
  109. package/src/mcp/tools/embed.ts +62 -52
  110. package/src/mcp/tools/get.ts +35 -1
  111. package/src/mcp/tools/index-cmd.ts +88 -74
  112. package/src/mcp/tools/index.ts +96 -2
  113. package/src/mcp/tools/query.ts +95 -64
  114. package/src/mcp/tools/remove-collection.ts +2 -0
  115. package/src/mcp/tools/search.ts +36 -13
  116. package/src/mcp/tools/status.ts +11 -0
  117. package/src/mcp/tools/sync.ts +16 -14
  118. package/src/mcp/tools/trace.ts +143 -0
  119. package/src/mcp/tools/vsearch.ts +71 -38
  120. package/src/mcp/tools/workspace-write.ts +7 -3
  121. package/src/pipeline/answer.ts +167 -26
  122. package/src/pipeline/graph-retrieval.ts +15 -1
  123. package/src/pipeline/hybrid.ts +151 -43
  124. package/src/pipeline/search.ts +36 -3
  125. package/src/pipeline/trace-metadata.ts +47 -0
  126. package/src/pipeline/types.ts +43 -0
  127. package/src/pipeline/vsearch.ts +101 -38
  128. package/src/sdk/client.ts +380 -71
  129. package/src/sdk/documents.ts +48 -1
  130. package/src/sdk/index.ts +17 -0
  131. package/src/sdk/types.ts +28 -0
  132. package/src/serve/background-runtime.ts +12 -212
  133. package/src/serve/context-capsule.ts +67 -8
  134. package/src/serve/embed-scheduler.ts +74 -43
  135. package/src/serve/index.ts +9 -0
  136. package/src/serve/jobs.ts +78 -80
  137. package/src/serve/public/app.tsx +12 -1
  138. package/src/serve/public/components/HealthCenter.tsx +74 -1
  139. package/src/serve/public/globals.built.css +1 -1
  140. package/src/serve/public/lib/workspace-tabs.ts +2 -0
  141. package/src/serve/public/pages/Dashboard.tsx +11 -0
  142. package/src/serve/public/pages/TraceHistory.tsx +478 -0
  143. package/src/serve/public/pages/trace-history-detail.tsx +224 -0
  144. package/src/serve/resident-admission.ts +159 -0
  145. package/src/serve/resident-background-work.ts +39 -0
  146. package/src/serve/resident-request.ts +55 -0
  147. package/src/serve/resident-runtime.ts +490 -0
  148. package/src/serve/resident-status.ts +96 -0
  149. package/src/serve/retrieval-trace.ts +28 -0
  150. package/src/serve/routes/api.ts +629 -239
  151. package/src/serve/routes/mcp.ts +69 -0
  152. package/src/serve/routes/traces.ts +156 -0
  153. package/src/serve/server.ts +276 -37
  154. package/src/serve/status-model.ts +51 -0
  155. package/src/serve/status.ts +5 -0
  156. package/src/store/index.ts +31 -0
  157. package/src/store/migrations/014-retrieval-traces.ts +303 -0
  158. package/src/store/migrations/index.ts +2 -0
  159. package/src/store/retrieval-trace-codec.ts +384 -0
  160. package/src/store/sqlite/adapter.ts +179 -10
  161. package/src/store/sqlite/retrieval-trace-management-store.ts +341 -0
  162. package/src/store/sqlite/retrieval-trace-retention.ts +349 -0
  163. package/src/store/sqlite/retrieval-trace-rows.ts +267 -0
  164. package/src/store/sqlite/retrieval-trace-store.ts +515 -0
  165. package/src/store/types.ts +297 -0
  166. package/src/store/vector/sqlite-vec.ts +76 -1
  167. package/src/store/vector/types.ts +1 -1
@@ -0,0 +1,69 @@
1
+ /** Production route adapter for the secured resident MCP endpoint. */
2
+
3
+ import type {
4
+ HttpMcpPeerServer,
5
+ ResolvedHttpGatewayConfig,
6
+ } from "../../mcp/http-security";
7
+ import type { ResidentRuntime } from "../resident-runtime";
8
+
9
+ import { HttpMcpSecurity } from "../../mcp/http-security";
10
+ import { HttpMcpTransport } from "../../mcp/http-transport";
11
+
12
+ export type McpHttpRoute = (
13
+ request: Request,
14
+ server: HttpMcpPeerServer
15
+ ) => Promise<Response>;
16
+
17
+ export interface McpHttpGateway {
18
+ readonly route: McpHttpRoute;
19
+ readonly security: HttpMcpSecurity;
20
+ readonly transport: HttpMcpTransport;
21
+ close(): Promise<void>;
22
+ }
23
+
24
+ /**
25
+ * Build the route only after startup policy and token-file checks succeed.
26
+ * Every method passes through the external boundary before transport dispatch.
27
+ */
28
+ export async function createMcpHttpGateway(
29
+ runtime: ResidentRuntime,
30
+ config: ResolvedHttpGatewayConfig
31
+ ): Promise<McpHttpGateway> {
32
+ runtime.mcpContext.enableWrite = config.enableWrite;
33
+ const transport = new HttpMcpTransport(runtime, {
34
+ enableWrite: config.enableWrite,
35
+ idleTimeoutMs: config.limits.sessionIdleTimeoutMs,
36
+ maxConcurrentRequests: config.limits.maxConcurrentRequests,
37
+ maxQueuedRequests: config.limits.maxQueuedRequests,
38
+ maxSessions: config.limits.maxSessions,
39
+ });
40
+ const security = new HttpMcpSecurity(config, {
41
+ onCredentialsChanged: () => transport.invalidateAuthenticatedSessions(),
42
+ });
43
+ await security.initialize();
44
+ (runtime as Partial<ResidentRuntime>).setTransportStatusProvider?.(() =>
45
+ transport.getStatus()
46
+ );
47
+
48
+ const route: McpHttpRoute = async (request, server) => {
49
+ const authorization = await security.authorize(request, server);
50
+ if (!authorization.ok) return authorization.response;
51
+
52
+ // POST responses and GET streams may both be long-lived SSE responses.
53
+ server.timeout(request, 0);
54
+ return transport.handleRequest(authorization.value.request, {
55
+ identity: authorization.value.identity,
56
+ parsedBody: authorization.value.parsedBody,
57
+ });
58
+ };
59
+
60
+ return {
61
+ route,
62
+ security,
63
+ transport,
64
+ close: async () => {
65
+ await transport.close();
66
+ (runtime as Partial<ResidentRuntime>).setTransportStatusProvider?.(null);
67
+ },
68
+ };
69
+ }
@@ -0,0 +1,156 @@
1
+ /** Loopback REST handlers for private retrieval trace management. */
2
+
3
+ import type {
4
+ RetrievalTraceExportRequest,
5
+ RetrievalTraceLabelRequest,
6
+ } from "../../core/retrieval-trace-management";
7
+ import type { StoreError, StorePort, StoreResult } from "../../store/types";
8
+
9
+ import { RetrievalTraceManagementService } from "../../core/retrieval-trace-management";
10
+
11
+ const errorStatus = (error: StoreError): number => {
12
+ if (error.code === "NOT_FOUND") return 404;
13
+ if (error.code === "CONSTRAINT_VIOLATION") return 409;
14
+ if (error.code === "INVALID_INPUT") return 400;
15
+ return 500;
16
+ };
17
+
18
+ const response = <T>(result: StoreResult<T>): Response => {
19
+ if (result.ok) return Response.json(result.value);
20
+ return Response.json(
21
+ {
22
+ error: {
23
+ code: result.error.code,
24
+ message: result.error.message,
25
+ },
26
+ },
27
+ { status: errorStatus(result.error) }
28
+ );
29
+ };
30
+
31
+ const parseJsonObject = async (
32
+ request: Request
33
+ ): Promise<Record<string, unknown> | Response> => {
34
+ try {
35
+ const value = (await request.json()) as unknown;
36
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
37
+ return Response.json(
38
+ {
39
+ error: {
40
+ code: "INVALID_INPUT",
41
+ message: "Request body must be a JSON object",
42
+ },
43
+ },
44
+ { status: 400 }
45
+ );
46
+ }
47
+ return value as Record<string, unknown>;
48
+ } catch {
49
+ return Response.json(
50
+ {
51
+ error: {
52
+ code: "INVALID_INPUT",
53
+ message: "Request body must be valid JSON",
54
+ },
55
+ },
56
+ { status: 400 }
57
+ );
58
+ }
59
+ };
60
+
61
+ const parseOptionalInteger = (
62
+ value: string | null
63
+ ): number | undefined | null => {
64
+ if (value === null) return undefined;
65
+ if (!/^\d+$/.test(value)) return null;
66
+ const parsed = Number(value);
67
+ return Number.isSafeInteger(parsed) ? parsed : null;
68
+ };
69
+
70
+ export const handleTraceList = async (
71
+ store: StorePort,
72
+ request: Request
73
+ ): Promise<Response> => {
74
+ const url = new URL(request.url);
75
+ const limit = parseOptionalInteger(url.searchParams.get("limit"));
76
+ if (limit === null) {
77
+ return Response.json(
78
+ {
79
+ error: {
80
+ code: "INVALID_INPUT",
81
+ message: "limit must be a positive integer",
82
+ },
83
+ },
84
+ { status: 400 }
85
+ );
86
+ }
87
+ return response(
88
+ await new RetrievalTraceManagementService(store).list({
89
+ limit,
90
+ cursor: url.searchParams.get("cursor") ?? undefined,
91
+ })
92
+ );
93
+ };
94
+
95
+ export const handleTraceShow = async (
96
+ store: StorePort,
97
+ traceId: string,
98
+ request: Request
99
+ ): Promise<Response> => {
100
+ const detailLimit = parseOptionalInteger(
101
+ new URL(request.url).searchParams.get("detailLimit")
102
+ );
103
+ if (detailLimit === null) {
104
+ return Response.json(
105
+ {
106
+ error: {
107
+ code: "INVALID_INPUT",
108
+ message: "detailLimit must be a positive integer",
109
+ },
110
+ },
111
+ { status: 400 }
112
+ );
113
+ }
114
+ return response(
115
+ await new RetrievalTraceManagementService(store).show(traceId, {
116
+ detailLimit,
117
+ })
118
+ );
119
+ };
120
+
121
+ export const handleTraceLabel = async (
122
+ store: StorePort,
123
+ traceId: string,
124
+ request: Request
125
+ ): Promise<Response> => {
126
+ const body = await parseJsonObject(request);
127
+ if (body instanceof Response) return body;
128
+ return response(
129
+ await new RetrievalTraceManagementService(store).label({
130
+ ...body,
131
+ traceId,
132
+ } as unknown as RetrievalTraceLabelRequest)
133
+ );
134
+ };
135
+
136
+ export const handleTraceExport = async (
137
+ store: StorePort,
138
+ request: Request
139
+ ): Promise<Response> => {
140
+ const body = await parseJsonObject(request);
141
+ if (body instanceof Response) return body;
142
+ return response(
143
+ await new RetrievalTraceManagementService(store).export(
144
+ body as unknown as RetrievalTraceExportRequest
145
+ )
146
+ );
147
+ };
148
+
149
+ export const handleTraceDelete = async (
150
+ store: StorePort,
151
+ traceId: string
152
+ ): Promise<Response> =>
153
+ response(await new RetrievalTraceManagementService(store).delete(traceId));
154
+
155
+ export const handleTracePurge = async (store: StorePort): Promise<Response> =>
156
+ response(await new RetrievalTraceManagementService(store).purge());