@noodleseed/one 0.122.0 → 0.124.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.js +33 -0
- package/dist/commands/catalog-data-hosted-observability.js.map +1 -1
- package/dist/commands/deploy-version-resolution.js +1 -1
- package/dist/commands/deploy-version-resolution.js.map +1 -1
- package/dist/commands/knowledge.d.ts +7 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +129 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +19 -2
- package/dist/deploy.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +3 -3
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/artifact-projection.d.ts +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/artifact-projection.d.ts.map +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/artifact-projection.js +7 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/artifact-projection.js.map +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-interactive.d.ts +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-interactive.d.ts.map +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-interactive.js.map +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-presentation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-presentation.js +1 -1
- package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-presentation.js.map +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/dist/index.js +2 -0
- package/node_modules/@noodle-borg/assistant-gateway/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/package.json +3 -1
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.d.ts +21 -0
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.d.ts.map +1 -0
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.js +115 -0
- package/node_modules/@noodle-borg/deploy-client/dist/deploy-knowledge.js.map +1 -0
- package/node_modules/@noodle-borg/deploy-client/dist/index.d.ts +4 -0
- package/node_modules/@noodle-borg/deploy-client/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/deploy-client/dist/index.js +4 -0
- package/node_modules/@noodle-borg/deploy-client/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/deploy-client/package.json +34 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js +4 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts +4 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js +28 -20
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +2 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js +53 -28
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +9 -5
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +38 -21
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/package.json +4 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/codec.d.ts +12 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/codec.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/codec.js +7 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/codec.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.d.ts +16 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.js +41 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.d.ts +40 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js +54 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.d.ts +15 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.js +50 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/http.d.ts +16 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/http.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/http.js +18 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/http.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.d.ts +18 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.js +18 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts +29 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js +53 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.d.ts +21 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.js +28 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.d.ts +60 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js +230 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.d.ts +38 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.js +100 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/routes.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/search-port.d.ts +31 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/search-port.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/search-port.js +36 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/search-port.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts +56 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js +129 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/staging-store.d.ts +38 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/staging-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/staging-store.js +77 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/staging-store.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.d.ts +28 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.js +66 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/package.json +34 -0
- package/node_modules/@noodle-borg/protocol/dist/context-tool.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/context-tool.js +15 -1
- package/node_modules/@noodle-borg/protocol/dist/context-tool.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/tools.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/tools.js +22 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/tools.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/knowledge-tool.d.ts +28 -0
- package/node_modules/@noodle-borg/protocol/dist/knowledge-tool.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/knowledge-tool.js +26 -0
- package/node_modules/@noodle-borg/protocol/dist/knowledge-tool.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +5 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +12 -1
- package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js +23 -2
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +28 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/runtime/dist/invocation-context.d.ts +12 -0
- package/node_modules/@noodle-borg/runtime/dist/invocation-context.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/invocation-context.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/invocation-context.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/invocation-context.js +19 -6
- package/node_modules/@noodle-borg/service/dist/invocation-context.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-compile.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-compile.js +6 -0
- package/node_modules/@noodle-borg/service/dist/registry-compile.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-recover.d.ts +26 -0
- package/node_modules/@noodle-borg/service/dist/registry-recover.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-recover.js +58 -0
- package/node_modules/@noodle-borg/service/dist/registry-recover.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.d.ts +10 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js +25 -0
- package/node_modules/@noodle-borg/service/dist/registry-rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +36 -78
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js +38 -14
- package/node_modules/@noodle-borg/service/dist/routes/assistant-agent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-stream.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-stream.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-stream.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +1 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.d.ts +32 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.js +42 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant-knowledge.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js +11 -3
- package/node_modules/@noodle-borg/service/dist/routes/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +4 -0
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +11 -1
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +3 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +13 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/invocation-client-hints.d.ts +7 -0
- package/node_modules/@noodle-borg/transport-http/dist/invocation-client-hints.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/invocation-client-hints.js +86 -0
- package/node_modules/@noodle-borg/transport-http/dist/invocation-client-hints.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +3 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve-request.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +134 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts.map +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js +101 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js.map +1 -0
- package/node_modules/@noodle-borg/wire-contracts/package.json +1 -0
- package/node_modules/@noodleseed/assistant/package.json +1 -1
- package/package.json +7 -2
- /package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-interactive.js +0 -0
- /package/node_modules/@noodle-borg/{service → assistant-gateway}/dist/assistant-presentation.d.ts +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-payload-size.d.ts +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-payload-size.d.ts.map +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-payload-size.js +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-payload-size.js.map +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-version.d.ts +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-version.d.ts.map +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-version.js +0 -0
- /package/{dist → node_modules/@noodle-borg/deploy-client/dist}/deploy-version.js.map +0 -0
|
@@ -26,9 +26,29 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
26
26
|
`);
|
|
27
27
|
await this.#pool.query(`
|
|
28
28
|
CREATE TABLE IF NOT EXISTS knowledge_deployment_pins (
|
|
29
|
-
deployment_id text
|
|
30
|
-
revision_id text NOT NULL REFERENCES knowledge_revisions (revision_id) ON DELETE CASCADE
|
|
29
|
+
deployment_id text NOT NULL,
|
|
30
|
+
revision_id text NOT NULL REFERENCES knowledge_revisions (revision_id) ON DELETE CASCADE,
|
|
31
|
+
PRIMARY KEY (deployment_id, revision_id)
|
|
31
32
|
)
|
|
33
|
+
`);
|
|
34
|
+
// Pre-pin-per-component rows used deployment_id alone as the key; widen in place.
|
|
35
|
+
await this.#pool.query(`
|
|
36
|
+
DO $$ BEGIN
|
|
37
|
+
IF EXISTS (
|
|
38
|
+
SELECT 1 FROM information_schema.table_constraints
|
|
39
|
+
WHERE table_name = 'knowledge_deployment_pins'
|
|
40
|
+
AND constraint_type = 'PRIMARY KEY'
|
|
41
|
+
AND constraint_name = 'knowledge_deployment_pins_pkey'
|
|
42
|
+
) AND NOT EXISTS (
|
|
43
|
+
SELECT 1 FROM information_schema.key_column_usage
|
|
44
|
+
WHERE table_name = 'knowledge_deployment_pins'
|
|
45
|
+
AND constraint_name = 'knowledge_deployment_pins_pkey'
|
|
46
|
+
AND column_name = 'revision_id'
|
|
47
|
+
) THEN
|
|
48
|
+
ALTER TABLE knowledge_deployment_pins DROP CONSTRAINT knowledge_deployment_pins_pkey;
|
|
49
|
+
ALTER TABLE knowledge_deployment_pins ADD PRIMARY KEY (deployment_id, revision_id);
|
|
50
|
+
END IF;
|
|
51
|
+
END $$;
|
|
32
52
|
`);
|
|
33
53
|
await this.#pool.query(`
|
|
34
54
|
CREATE TABLE IF NOT EXISTS knowledge_publication_leases (
|
|
@@ -109,7 +129,7 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
109
129
|
]);
|
|
110
130
|
await client.query(`INSERT INTO knowledge_deployment_pins (deployment_id, revision_id)
|
|
111
131
|
VALUES ($1, $2)
|
|
112
|
-
ON CONFLICT (deployment_id) DO
|
|
132
|
+
ON CONFLICT (deployment_id, revision_id) DO NOTHING`, [deploymentId, revisionId]);
|
|
113
133
|
await client.query('COMMIT');
|
|
114
134
|
}
|
|
115
135
|
catch (error) {
|
|
@@ -121,36 +141,29 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
121
141
|
}
|
|
122
142
|
}
|
|
123
143
|
async pin(revisionId, deploymentId) {
|
|
124
|
-
|
|
144
|
+
await this.#pool.query(`INSERT INTO knowledge_deployment_pins (deployment_id, revision_id)
|
|
125
145
|
VALUES ($1, $2)
|
|
126
|
-
ON CONFLICT (deployment_id) DO
|
|
127
|
-
RETURNING revision_id`, [deploymentId, revisionId]);
|
|
128
|
-
if (result.rows[0] === undefined)
|
|
129
|
-
throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
|
|
146
|
+
ON CONFLICT (deployment_id, revision_id) DO NOTHING`, [deploymentId, revisionId]);
|
|
130
147
|
}
|
|
131
148
|
async rollback(deploymentId) {
|
|
132
149
|
const client = await this.#pool.connect();
|
|
133
150
|
try {
|
|
134
151
|
await client.query('BEGIN');
|
|
135
152
|
const pinned = await client.query('SELECT revision_id FROM knowledge_deployment_pins WHERE deployment_id = $1', [deploymentId]);
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
await client.query('
|
|
139
|
-
|
|
153
|
+
const restored = [];
|
|
154
|
+
for (const pin of pinned.rows) {
|
|
155
|
+
const target = await client.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1', [pin.revision_id]);
|
|
156
|
+
const row = target.rows[0];
|
|
157
|
+
if (row === undefined)
|
|
158
|
+
continue;
|
|
159
|
+
const scope = this.rowScope(row);
|
|
160
|
+
await client.query(`UPDATE knowledge_revisions SET state = 'retired'
|
|
161
|
+
WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND state = 'active' AND revision_id <> $5`, [scope.org, scope.app, scope.env, row.component_name, pin.revision_id]);
|
|
162
|
+
await client.query(`UPDATE knowledge_revisions SET state = 'active' WHERE revision_id = $1`, [pin.revision_id]);
|
|
163
|
+
restored.push(this.toRevision(row));
|
|
140
164
|
}
|
|
141
|
-
const target = await client.query('SELECT * FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
|
|
142
|
-
if (target.rows[0] === undefined) {
|
|
143
|
-
await client.query('COMMIT');
|
|
144
|
-
return undefined;
|
|
145
|
-
}
|
|
146
|
-
const scope = this.rowScope(target.rows[0]);
|
|
147
|
-
await client.query(`UPDATE knowledge_revisions SET state = 'retired'
|
|
148
|
-
WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND state = 'active' AND revision_id <> $5`, [scope.org, scope.app, scope.env, target.rows[0].component_name, revisionId]);
|
|
149
|
-
await client.query(`UPDATE knowledge_revisions SET state = 'active' WHERE revision_id = $1`, [
|
|
150
|
-
revisionId,
|
|
151
|
-
]);
|
|
152
165
|
await client.query('COMMIT');
|
|
153
|
-
return
|
|
166
|
+
return restored;
|
|
154
167
|
}
|
|
155
168
|
catch (error) {
|
|
156
169
|
await client.query('ROLLBACK').catch(() => undefined);
|
|
@@ -199,6 +212,11 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
199
212
|
}
|
|
200
213
|
await this.#pool.query('DELETE FROM knowledge_revisions WHERE revision_id = $1', [revisionId]);
|
|
201
214
|
}
|
|
215
|
+
async findByContentHash(scope, componentName, contentHash) {
|
|
216
|
+
const result = await this.#pool.query(`SELECT * FROM knowledge_revisions
|
|
217
|
+
WHERE org = $1 AND app = $2 AND env = $3 AND component_name = $4 AND content_hash = $5`, [scope.org, scope.app, scope.env, componentName, contentHash]);
|
|
218
|
+
return result.rows[0] === undefined ? undefined : this.toRevision(result.rows[0]);
|
|
219
|
+
}
|
|
202
220
|
async stageDocuments(revisionId, documents) {
|
|
203
221
|
const client = await this.#pool.connect();
|
|
204
222
|
try {
|
|
@@ -214,7 +232,12 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
214
232
|
for (const document of documents) {
|
|
215
233
|
const plaintext = Buffer.from(document.text, 'utf8');
|
|
216
234
|
await client.query(`INSERT INTO knowledge_revision_documents (revision_id, path, ciphertext, bytes)
|
|
217
|
-
VALUES ($1, $2, $3, $4)`, [
|
|
235
|
+
VALUES ($1, $2, $3, $4)`, [
|
|
236
|
+
revisionId,
|
|
237
|
+
document.descriptor.path,
|
|
238
|
+
await this.#codec.seal(plaintext),
|
|
239
|
+
plaintext.length,
|
|
240
|
+
]);
|
|
218
241
|
}
|
|
219
242
|
await client.query('COMMIT');
|
|
220
243
|
}
|
|
@@ -237,13 +260,15 @@ export class PostgresKnowledgeRevisionStore {
|
|
|
237
260
|
if (byPath.size === 0 && row.documents.length > 0) {
|
|
238
261
|
throw new KnowledgeError('store', `revision ${revisionId} has no staged document text`);
|
|
239
262
|
}
|
|
240
|
-
|
|
263
|
+
const documents = [];
|
|
264
|
+
for (const descriptor of row.documents) {
|
|
241
265
|
const ciphertext = byPath.get(descriptor.path);
|
|
242
266
|
if (ciphertext === undefined) {
|
|
243
267
|
throw new KnowledgeError('store', `revision ${revisionId} is missing text for ${descriptor.path}`);
|
|
244
268
|
}
|
|
245
|
-
|
|
246
|
-
}
|
|
269
|
+
documents.push({ descriptor, text: (await this.#codec.open(ciphertext)).toString('utf8') });
|
|
270
|
+
}
|
|
271
|
+
return documents;
|
|
247
272
|
}
|
|
248
273
|
rowScope(row) {
|
|
249
274
|
return { org: row.org, app: row.app, env: row.env };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-revision-store.js","sourceRoot":"","sources":["../src/postgres-revision-store.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAA+C,MAAM,YAAY,CAAC;AACzF,OAAO,EAEL,yBAAyB,GAK1B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAchC,MAAM,OAAO,8BAA8B;IAChC,KAAK,CAAO;IACZ,MAAM,CAAoB;IAEnC,YAAY,IAAU,EAAE,QAA2B,yBAAyB;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;;;;;;;;;;;;KAatB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"postgres-revision-store.js","sourceRoot":"","sources":["../src/postgres-revision-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,8 @@ import type { KnowledgeRevision, StagedDocument } from './ports.js';
|
|
|
7
7
|
* and non-durable stores may use the identity codec.
|
|
8
8
|
*/
|
|
9
9
|
export interface DocumentTextCodec {
|
|
10
|
-
seal(plaintext: Buffer): Buffer
|
|
11
|
-
open(sealed: Buffer): Buffer
|
|
10
|
+
seal(plaintext: Buffer): Buffer | Promise<Buffer>;
|
|
11
|
+
open(sealed: Buffer): Buffer | Promise<Buffer>;
|
|
12
12
|
}
|
|
13
13
|
export declare const identityDocumentTextCodec: DocumentTextCodec;
|
|
14
14
|
export interface StageRevisionInput {
|
|
@@ -40,14 +40,16 @@ export interface KnowledgeRevisionStore {
|
|
|
40
40
|
activate(scope: KnowledgeScope, componentName: string, revisionId: string, deploymentId: string): Promise<void>;
|
|
41
41
|
/** Mark a deployment as pinning the revision it activated. */
|
|
42
42
|
pin(revisionId: string, deploymentId: string): Promise<void>;
|
|
43
|
-
/** Rollback reselects
|
|
44
|
-
rollback(deploymentId: string): Promise<KnowledgeRevision
|
|
43
|
+
/** Rollback reselects every revision the target deployment pinned (one per component). */
|
|
44
|
+
rollback(deploymentId: string): Promise<readonly KnowledgeRevision[]>;
|
|
45
45
|
/** Remove revisions that are neither active nor pinned. Returns the removed count. */
|
|
46
46
|
collectGarbage(): Promise<number>;
|
|
47
47
|
/** Active revision for a scope/component, if any. */
|
|
48
48
|
active(scope: KnowledgeScope, componentName: string): Promise<KnowledgeRevision | undefined>;
|
|
49
49
|
/** A specific revision by id (diagnostics/status only). */
|
|
50
50
|
record(revisionId: string): Promise<RevisionRecord | undefined>;
|
|
51
|
+
/** The staged/active revision holding exactly this content set, for idempotent reuse. */
|
|
52
|
+
findByContentHash(scope: KnowledgeScope, componentName: string, contentHash: string): Promise<KnowledgeRevision | undefined>;
|
|
51
53
|
/** Delete a revision record; refuses an active or pinned one. */
|
|
52
54
|
delete(revisionId: string): Promise<void>;
|
|
53
55
|
/**
|
|
@@ -75,11 +77,13 @@ export declare class InMemoryKnowledgeRevisionStore implements KnowledgeRevision
|
|
|
75
77
|
releaseLease(ticket: LeaseTicket): Promise<void>;
|
|
76
78
|
activate(scope: KnowledgeScope, componentName: string, revisionId: string, deploymentId: string): Promise<void>;
|
|
77
79
|
pin(revisionId: string, deploymentId: string): Promise<void>;
|
|
78
|
-
|
|
80
|
+
private pinRevision;
|
|
81
|
+
rollback(deploymentId: string): Promise<readonly KnowledgeRevision[]>;
|
|
79
82
|
collectGarbage(): Promise<number>;
|
|
80
83
|
active(scope: KnowledgeScope, componentName: string): Promise<KnowledgeRevision | undefined>;
|
|
81
84
|
record(revisionId: string): Promise<RevisionRecord | undefined>;
|
|
82
85
|
delete(revisionId: string): Promise<void>;
|
|
86
|
+
findByContentHash(scope: KnowledgeScope, componentName: string, contentHash: string): Promise<KnowledgeRevision | undefined>;
|
|
83
87
|
stageDocuments(revisionId: string, documents: readonly StagedDocument[]): Promise<void>;
|
|
84
88
|
documents(revisionId: string): Promise<readonly StagedDocument[]>;
|
|
85
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision-store.d.ts","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGpE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"revision-store.d.ts","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,33 +72,42 @@ export class InMemoryKnowledgeRevisionStore {
|
|
|
72
72
|
}
|
|
73
73
|
record.state = 'active';
|
|
74
74
|
record.pins.add(deploymentId);
|
|
75
|
-
this.
|
|
75
|
+
this.pinRevision(deploymentId, revisionId);
|
|
76
76
|
}
|
|
77
77
|
async pin(revisionId, deploymentId) {
|
|
78
78
|
const record = this.records.get(revisionId);
|
|
79
79
|
if (record === undefined)
|
|
80
80
|
throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
|
|
81
81
|
record.pins.add(deploymentId);
|
|
82
|
-
this.
|
|
82
|
+
this.pinRevision(deploymentId, revisionId);
|
|
83
|
+
}
|
|
84
|
+
pinRevision(deploymentId, revisionId) {
|
|
85
|
+
const pins = this.deploymentPins.get(deploymentId) ?? new Set();
|
|
86
|
+
pins.add(revisionId);
|
|
87
|
+
this.deploymentPins.set(deploymentId, pins);
|
|
83
88
|
}
|
|
84
89
|
async rollback(deploymentId) {
|
|
85
|
-
const
|
|
86
|
-
if (
|
|
87
|
-
return
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
const revisionIds = this.deploymentPins.get(deploymentId);
|
|
91
|
+
if (revisionIds === undefined)
|
|
92
|
+
return [];
|
|
93
|
+
const restored = [];
|
|
94
|
+
for (const revisionId of revisionIds) {
|
|
95
|
+
const record = this.records.get(revisionId);
|
|
96
|
+
if (record === undefined)
|
|
97
|
+
continue;
|
|
98
|
+
const scopeKey = knowledgeScopeKey(record.revision.scope, record.revision.componentName);
|
|
99
|
+
for (const candidate of this.records.values()) {
|
|
100
|
+
if (candidate.state === 'active' &&
|
|
101
|
+
knowledgeScopeKey(candidate.revision.scope, candidate.revision.componentName) ===
|
|
102
|
+
scopeKey &&
|
|
103
|
+
candidate.revision.revisionId !== revisionId) {
|
|
104
|
+
candidate.state = 'retired';
|
|
105
|
+
}
|
|
98
106
|
}
|
|
107
|
+
record.state = 'active';
|
|
108
|
+
restored.push(record.revision);
|
|
99
109
|
}
|
|
100
|
-
|
|
101
|
-
return record.revision;
|
|
110
|
+
return restored;
|
|
102
111
|
}
|
|
103
112
|
async collectGarbage() {
|
|
104
113
|
let removed = 0;
|
|
@@ -136,13 +145,19 @@ export class InMemoryKnowledgeRevisionStore {
|
|
|
136
145
|
this.records.delete(revisionId);
|
|
137
146
|
this.sealedText.delete(revisionId);
|
|
138
147
|
}
|
|
148
|
+
async findByContentHash(scope, componentName, contentHash) {
|
|
149
|
+
const scopeKey = knowledgeScopeKey(scope, componentName);
|
|
150
|
+
const record = [...this.records.values()].find((candidate) => candidate.contentHash === contentHash &&
|
|
151
|
+
knowledgeScopeKey(candidate.revision.scope, candidate.revision.componentName) === scopeKey);
|
|
152
|
+
return record?.revision;
|
|
153
|
+
}
|
|
139
154
|
async stageDocuments(revisionId, documents) {
|
|
140
155
|
if (!this.records.has(revisionId)) {
|
|
141
156
|
throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
|
|
142
157
|
}
|
|
143
158
|
const sealed = new Map();
|
|
144
159
|
for (const document of documents) {
|
|
145
|
-
sealed.set(document.descriptor.path, this.codec.seal(Buffer.from(document.text, 'utf8')));
|
|
160
|
+
sealed.set(document.descriptor.path, await this.codec.seal(Buffer.from(document.text, 'utf8')));
|
|
146
161
|
}
|
|
147
162
|
this.sealedText.set(revisionId, sealed);
|
|
148
163
|
}
|
|
@@ -155,13 +170,15 @@ export class InMemoryKnowledgeRevisionStore {
|
|
|
155
170
|
if (sealed === undefined && record.revision.documents.length > 0) {
|
|
156
171
|
throw new KnowledgeError('store', `revision ${revisionId} has no staged document text`);
|
|
157
172
|
}
|
|
158
|
-
|
|
173
|
+
const documents = [];
|
|
174
|
+
for (const descriptor of record.revision.documents) {
|
|
159
175
|
const ciphertext = sealed?.get(descriptor.path);
|
|
160
176
|
if (ciphertext === undefined) {
|
|
161
177
|
throw new KnowledgeError('store', `revision ${revisionId} is missing text for ${descriptor.path}`);
|
|
162
178
|
}
|
|
163
|
-
|
|
164
|
-
}
|
|
179
|
+
documents.push({ descriptor, text: (await this.codec.open(ciphertext)).toString('utf8') });
|
|
180
|
+
}
|
|
181
|
+
return documents;
|
|
165
182
|
}
|
|
166
183
|
}
|
|
167
184
|
//# sourceMappingURL=revision-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revision-store.js","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAa5C,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;IAC9B,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"revision-store.js","sourceRoot":"","sources":["../src/revision-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridges the service's async string secret box to the revision store's byte codec, so sealed
|
|
3
|
+
* knowledge text shares the platform's KMS/static master-key custody instead of a second
|
|
4
|
+
* encryption scheme. Structurally typed: no dependency on the service or runtime packages.
|
|
5
|
+
*/
|
|
6
|
+
import type { DocumentTextCodec } from '@noodle-borg/knowledge';
|
|
7
|
+
export interface StringSecretBox {
|
|
8
|
+
seal(plaintext: string): Promise<unknown>;
|
|
9
|
+
open(sealed: never): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
export declare function secretBoxDocumentCodec(box: StringSecretBox): DocumentTextCodec;
|
|
12
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,iBAAiB,CAO9E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function secretBoxDocumentCodec(box) {
|
|
2
|
+
return {
|
|
3
|
+
seal: async (plaintext) => Buffer.from(JSON.stringify(await box.seal(plaintext.toString('base64'))), 'utf8'),
|
|
4
|
+
open: async (sealed) => Buffer.from(await box.open(JSON.parse(sealed.toString('utf8'))), 'base64'),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACnF,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CACrB,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAU,CAAC,EAAE,QAAQ,CAAC;KACtF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge route dispatch. The service injects its auth and HTTP-posture callbacks; every
|
|
3
|
+
* knowledge decision (paths, gating, validation, staging) stays in this package.
|
|
4
|
+
*/
|
|
5
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
6
|
+
import { type KnowledgeRouteDeps } from './routes.js';
|
|
7
|
+
export interface KnowledgeDispatchDeps {
|
|
8
|
+
/** Tenant control-plane auth; resolves false when the response was already written. */
|
|
9
|
+
readonly authorize: (req: IncomingMessage, res: ServerResponse, org: string) => Promise<unknown | false>;
|
|
10
|
+
readonly routeDeps: KnowledgeRouteDeps;
|
|
11
|
+
readonly applySecurityHeaders: (res: ServerResponse) => void;
|
|
12
|
+
/** Returns true when the request was already rejected (e.g. HTTPS enforcement). */
|
|
13
|
+
readonly enforceHttps: (req: IncomingMessage, res: ServerResponse) => boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function dispatchKnowledgeRequest(req: IncomingMessage, res: ServerResponse, url: URL, deps: KnowledgeDispatchDeps): boolean;
|
|
16
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,CAClB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7D,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;CAC/E;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CA2BT"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { sendJson } from './http.js';
|
|
2
|
+
import { parseKnowledgePath } from './paths.js';
|
|
3
|
+
import { handleKnowledgeDocumentUpload, handleKnowledgePreflight, } from './routes.js';
|
|
4
|
+
import { handleKnowledgeList, handleKnowledgeStatus } from './status-routes.js';
|
|
5
|
+
export function dispatchKnowledgeRequest(req, res, url, deps) {
|
|
6
|
+
const ref = parseKnowledgePath(url.pathname);
|
|
7
|
+
if (ref === undefined)
|
|
8
|
+
return false;
|
|
9
|
+
const method = ref.kind === 'preflight' ? 'POST' : ref.kind === 'document' ? 'PUT' : 'GET';
|
|
10
|
+
if (method !== req.method)
|
|
11
|
+
return false;
|
|
12
|
+
const statusDeps = deps.routeDeps.status;
|
|
13
|
+
if ((ref.kind === 'list' || ref.kind === 'status') && statusDeps === undefined) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
deps.applySecurityHeaders(res);
|
|
17
|
+
if (deps.enforceHttps(req, res))
|
|
18
|
+
return true;
|
|
19
|
+
(async () => {
|
|
20
|
+
const identity = await deps.authorize(req, res, ref.tenant.org);
|
|
21
|
+
if (identity === false)
|
|
22
|
+
return;
|
|
23
|
+
if (ref.kind === 'preflight') {
|
|
24
|
+
await handleKnowledgePreflight(req, res, ref.tenant, deps.routeDeps);
|
|
25
|
+
}
|
|
26
|
+
else if (ref.kind === 'document') {
|
|
27
|
+
await handleKnowledgeDocumentUpload(req, res, ref.tenant, ref.sha256, deps.routeDeps);
|
|
28
|
+
}
|
|
29
|
+
else if (statusDeps !== undefined && ref.kind === 'list') {
|
|
30
|
+
await handleKnowledgeList(req, res, ref.tenant, statusDeps);
|
|
31
|
+
}
|
|
32
|
+
else if (statusDeps !== undefined && ref.kind === 'status') {
|
|
33
|
+
await handleKnowledgeStatus(req, res, ref.tenant, ref.component, statusDeps);
|
|
34
|
+
}
|
|
35
|
+
})().catch(() => {
|
|
36
|
+
if (!res.headersSent)
|
|
37
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
38
|
+
});
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAehF,MAAM,UAAU,wBAAwB,CACtC,GAAoB,EACpB,GAAmB,EACnB,GAAQ,EACR,IAA2B;IAE3B,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3F,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,QAAQ,KAAK,KAAK;YAAE,OAAO;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,6BAA6B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxF,CAAC;aAAM,IAAI,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3D,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime `search_<name>` execution (ADR 0202 as amended): feature gate → bundled BM25 for
|
|
3
|
+
* documents → budget-gated managed site search → deterministic RRF fusion with the exact
|
|
4
|
+
* origin/path policy postfilter. Budget exhaustion on a mixed component is a typed error —
|
|
5
|
+
* blocked, never silently degraded to document-only. Document-only components never touch
|
|
6
|
+
* the budget (file search is bundled and costs nothing).
|
|
7
|
+
*/
|
|
8
|
+
import { type SearchBudgetCeilings, type SearchBudgetStore, type SearchHit, type SiteSearch } from '@noodle-borg/knowledge';
|
|
9
|
+
import type { KnowledgeDeployHooks } from './publication.js';
|
|
10
|
+
import { type KnowledgeTenantRef } from './routes.js';
|
|
11
|
+
/** The component facts the executor needs; a structural subset of the compiled component. */
|
|
12
|
+
export interface KnowledgeSearchComponent {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly sites: readonly {
|
|
15
|
+
readonly origin: string;
|
|
16
|
+
readonly include: readonly string[];
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
export interface KnowledgeSearchRequest {
|
|
20
|
+
readonly query: string;
|
|
21
|
+
readonly limit?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface KnowledgeSearchExecutor {
|
|
24
|
+
enabled(tenant: KnowledgeTenantRef): Promise<boolean>;
|
|
25
|
+
/** Throws `KnowledgeError` or `SearchBudgetExhaustedError`; never returns partial truth. */
|
|
26
|
+
search(tenant: KnowledgeTenantRef, component: KnowledgeSearchComponent, request: KnowledgeSearchRequest): Promise<readonly SearchHit[]>;
|
|
27
|
+
}
|
|
28
|
+
export interface KnowledgeSearchExecutorDeps {
|
|
29
|
+
readonly hooks: KnowledgeDeployHooks;
|
|
30
|
+
readonly knowledgeEnabled: (tenant: KnowledgeTenantRef) => Promise<boolean>;
|
|
31
|
+
/** Site-search spend control; absent means site search is unavailable (documents still serve). */
|
|
32
|
+
readonly budget?: {
|
|
33
|
+
readonly store: SearchBudgetStore;
|
|
34
|
+
readonly ceilings: (tenant: KnowledgeTenantRef) => Promise<SearchBudgetCeilings>;
|
|
35
|
+
};
|
|
36
|
+
/** Managed live-site adapter bound per tenant; absent until the managed project is configured. */
|
|
37
|
+
readonly siteSearchFor?: (tenant: KnowledgeTenantRef) => SiteSearch;
|
|
38
|
+
}
|
|
39
|
+
export declare function createKnowledgeSearchExecutor(deps: KnowledgeSearchExecutorDeps): KnowledgeSearchExecutor;
|
|
40
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAQL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,aAAa,CAAC;AAE9E,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CAC7F;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,4FAA4F;IAC5F,MAAM,CACJ,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,wBAAwB,EACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,kGAAkG;IAClG,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;QAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;KAClF,CAAC;IACF,kGAAkG;IAClG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,UAAU,CAAC;CACrE;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,2BAA2B,GAChC,uBAAuB,CA8DzB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime `search_<name>` execution (ADR 0202 as amended): feature gate → bundled BM25 for
|
|
3
|
+
* documents → budget-gated managed site search → deterministic RRF fusion with the exact
|
|
4
|
+
* origin/path policy postfilter. Budget exhaustion on a mixed component is a typed error —
|
|
5
|
+
* blocked, never silently degraded to document-only. Document-only components never touch
|
|
6
|
+
* the budget (file search is bundled and costs nothing).
|
|
7
|
+
*/
|
|
8
|
+
import { DEFAULT_RESULT_LIMIT, fuseHits, KnowledgeError, MAX_QUERY_CHARS, MAX_RESULT_LIMIT, MIN_QUERY_CHARS, MIN_RESULT_LIMIT, SearchBudgetExhaustedError, } from '@noodle-borg/knowledge';
|
|
9
|
+
import { knowledgeEnableCommand } from './routes.js';
|
|
10
|
+
export function createKnowledgeSearchExecutor(deps) {
|
|
11
|
+
return {
|
|
12
|
+
enabled: (tenant) => deps.knowledgeEnabled(tenant),
|
|
13
|
+
async search(tenant, component, request) {
|
|
14
|
+
if (!(await deps.knowledgeEnabled(tenant))) {
|
|
15
|
+
throw new KnowledgeError('request', `knowledge is not enabled for this org/app/env; run: ${knowledgeEnableCommand(tenant)}`);
|
|
16
|
+
}
|
|
17
|
+
if (request.query.length < MIN_QUERY_CHARS || request.query.length > MAX_QUERY_CHARS) {
|
|
18
|
+
throw new KnowledgeError('request', `query must be between ${MIN_QUERY_CHARS} and ${MAX_QUERY_CHARS} characters`);
|
|
19
|
+
}
|
|
20
|
+
const limit = Math.min(MAX_RESULT_LIMIT, Math.max(MIN_RESULT_LIMIT, Math.floor(request.limit ?? DEFAULT_RESULT_LIMIT)));
|
|
21
|
+
const scope = { org: tenant.org, app: tenant.app, env: tenant.env };
|
|
22
|
+
const documents = await deps.hooks.searchDocuments(scope, component.name, {
|
|
23
|
+
query: request.query,
|
|
24
|
+
limit,
|
|
25
|
+
});
|
|
26
|
+
let sites = [];
|
|
27
|
+
const siteSearch = deps.siteSearchFor?.(tenant);
|
|
28
|
+
const wantsSites = component.sites.length > 0 && siteSearch !== undefined;
|
|
29
|
+
if (wantsSites && siteSearch !== undefined) {
|
|
30
|
+
if (deps.budget !== undefined) {
|
|
31
|
+
const ceilings = await deps.budget.ceilings(tenant);
|
|
32
|
+
const decision = await deps.budget.store.consume({ org: tenant.org, app: tenant.app }, 1, ceilings);
|
|
33
|
+
// Blocked, never degraded: a mixed component must not quietly answer from documents.
|
|
34
|
+
if (!decision.granted)
|
|
35
|
+
throw new SearchBudgetExhaustedError(decision.state);
|
|
36
|
+
}
|
|
37
|
+
const collected = [];
|
|
38
|
+
for (const policy of component.sites) {
|
|
39
|
+
const hits = await siteSearch.search({ origin: policy.origin, include: [...policy.include] }, { audience: 'public', revision: 'live' }, { query: request.query, limit });
|
|
40
|
+
collected.push(...hits);
|
|
41
|
+
}
|
|
42
|
+
sites = collected;
|
|
43
|
+
}
|
|
44
|
+
return fuseHits(documents, sites, {
|
|
45
|
+
limit,
|
|
46
|
+
sitePolicies: component.sites.map((policy) => ({
|
|
47
|
+
origin: policy.origin,
|
|
48
|
+
include: [...policy.include],
|
|
49
|
+
})),
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|