@noodleseed/one 0.120.0 → 0.121.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/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js +1 -0
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.js +98 -189
- package/dist/commands/catalog-data-bootstrap-authoring.js.map +1 -1
- package/dist/commands/mcp-apps.d.ts.map +1 -1
- package/dist/commands/mcp-apps.js +1 -0
- package/dist/commands/mcp-apps.js.map +1 -1
- package/dist/commands/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +25 -5
- package/dist/commands/project-setup.js.map +1 -1
- package/dist/delegated-token-exchange-preflight.d.ts.map +1 -1
- package/dist/delegated-token-exchange-preflight.js +1 -0
- package/dist/delegated-token-exchange-preflight.js.map +1 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +8 -131
- package/dist/deploy.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local-compile.d.ts.map +1 -1
- package/dist/local-compile.js +1 -0
- package/dist/local-compile.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +7 -5
- 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 +5 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.js +5 -3
- package/node_modules/@noodle-borg/agent-kit/dist/product-skill-ownership.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 +20 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +5 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.d.ts +2 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js +11 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-package-assets.js.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-types.d.ts +16 -3
- package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.js +13 -4
- package/node_modules/@noodle-borg/agent-packaging/dist/host-packaging-validation.js.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/index.d.ts +1 -0
- package/node_modules/@noodle-borg/agent-packaging/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/index.js +1 -0
- package/node_modules/@noodle-borg/agent-packaging/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.js +4 -3
- package/node_modules/@noodle-borg/agent-packaging/dist/product-skill-validation.js.map +1 -1
- package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +4 -3
- package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/assistant.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/distribution.d.ts +17 -3
- package/node_modules/@noodle-borg/authoring/dist/distribution.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/distribution.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts +70 -0
- package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/knowledge.js +50 -0
- package/node_modules/@noodle-borg/authoring/dist/knowledge.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/load-authored.d.ts +24 -0
- package/node_modules/@noodle-borg/authoring/dist/load-authored.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/load-authored.js +141 -0
- package/node_modules/@noodle-borg/authoring/dist/load-authored.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/react/components.d.ts +3 -3
- package/node_modules/@noodle-borg/authoring/dist/react/native-components.d.ts +2 -2
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +4 -0
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/package.json +5 -0
- package/node_modules/@noodle-borg/brand-kit/dist/index.d.ts +8 -0
- package/node_modules/@noodle-borg/brand-kit/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/brand-kit/dist/index.js +8 -0
- package/node_modules/@noodle-borg/brand-kit/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/{compiler/dist/widget-palette.d.ts → brand-kit/dist/palette.d.ts} +1 -1
- package/node_modules/@noodle-borg/brand-kit/dist/palette.d.ts.map +1 -0
- package/node_modules/@noodle-borg/{compiler/dist/widget-palette.js → brand-kit/dist/palette.js} +1 -1
- package/node_modules/@noodle-borg/brand-kit/dist/palette.js.map +1 -0
- package/node_modules/@noodle-borg/{compiler/dist/widget-ui-style.d.ts → brand-kit/dist/ui-style.d.ts} +1 -1
- package/node_modules/@noodle-borg/brand-kit/dist/ui-style.d.ts.map +1 -0
- package/node_modules/@noodle-borg/{compiler/dist/widget-ui-style.js → brand-kit/dist/ui-style.js} +1 -1
- package/node_modules/@noodle-borg/brand-kit/dist/ui-style.js.map +1 -0
- package/node_modules/@noodle-borg/brand-kit/package.json +28 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +3 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/branding.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/branding.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/branding.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +8 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +8 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +36 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +7 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +4 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-emit.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-emit.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-emit.js +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-emit.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.d.ts +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-size-validation.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/package.json +3 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts +14 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js +133 -0
- package/node_modules/@noodle-borg/knowledge/dist/bm25.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts +37 -0
- package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/budget.js +52 -0
- package/node_modules/@noodle-borg/knowledge/dist/budget.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts +52 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.js +250 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/conformance.d.ts +21 -0
- package/node_modules/@noodle-borg/knowledge/dist/conformance.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/conformance.js +225 -0
- package/node_modules/@noodle-borg/knowledge/dist/conformance.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/fakes.d.ts +23 -0
- package/node_modules/@noodle-borg/knowledge/dist/fakes.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/fakes.js +141 -0
- package/node_modules/@noodle-borg/knowledge/dist/fakes.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/fusion.d.ts +27 -0
- package/node_modules/@noodle-borg/knowledge/dist/fusion.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/fusion.js +119 -0
- package/node_modules/@noodle-borg/knowledge/dist/fusion.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts +49 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js +235 -0
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/hits.d.ts +31 -0
- package/node_modules/@noodle-borg/knowledge/dist/hits.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/hits.js +75 -0
- package/node_modules/@noodle-borg/knowledge/dist/hits.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts +25 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.js +25 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/ir.d.ts +53 -0
- package/node_modules/@noodle-borg/knowledge/dist/ir.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/ir.js +87 -0
- package/node_modules/@noodle-borg/knowledge/dist/ir.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts +19 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.js +19 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts +42 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js +45 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/ports.d.ts +56 -0
- package/node_modules/@noodle-borg/knowledge/dist/ports.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/ports.js +13 -0
- package/node_modules/@noodle-borg/knowledge/dist/ports.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +33 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js +200 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +59 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +128 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/package.json +36 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +2 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.d.ts +4 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.js +147 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-render.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.d.ts +14 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.js +2 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-types.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.d.ts +10 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.js +152 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector-validation.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.d.ts +7 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.js +24 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/anthropic-connector.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.d.ts +6 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.js +260 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-distribution-command.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.d.ts +3 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.js +89 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-render.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.d.ts +3 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.js +16 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin-validation.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.d.ts +5 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.js +15 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/claude-plugin.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts +3 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js +3 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.d.ts +37 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.js +60 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/distribution-command-support.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/index.js +2 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.d.ts +3 -28
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.js +23 -64
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-command.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.js +3 -97
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-render.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.js +19 -8
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-plugin-validation.js.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.d.ts +5 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js +147 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/openai-submission-render.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.d.ts +3 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.d.ts.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.js +22 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/public-url.js.map +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/package.json +2 -2
- package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/resources.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/handlers/resources.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/response-observation.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 +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/package.json +1 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts +0 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +0 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/main.js +0 -52
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/modules/host.d.ts +2 -6
- package/node_modules/@noodle-borg/service/dist/modules/host.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/modules/host.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +1 -21
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +7 -1
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts +0 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +22 -26
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service-config.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/service-config.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service-config.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 +1 -24
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -0
- package/node_modules/@noodle-borg/service-modules/dist/index.d.ts +9 -0
- package/node_modules/@noodle-borg/service-modules/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service-modules/dist/index.js +9 -0
- package/node_modules/@noodle-borg/service-modules/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/service-modules/dist/loaded-module.d.ts +8 -0
- package/node_modules/@noodle-borg/service-modules/dist/loaded-module.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service-modules/dist/loaded-module.js +2 -0
- package/node_modules/@noodle-borg/service-modules/dist/loaded-module.js.map +1 -0
- package/node_modules/@noodle-borg/{service/dist/modules → service-modules/dist}/loader.d.ts +1 -1
- package/node_modules/@noodle-borg/service-modules/dist/loader.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service-modules/dist/loader.js.map +1 -0
- package/node_modules/@noodle-borg/service-modules/package.json +32 -0
- package/node_modules/@noodle-borg/uri-template/dist/index.d.ts +7 -0
- package/node_modules/@noodle-borg/uri-template/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/uri-template/dist/index.js +7 -0
- package/node_modules/@noodle-borg/uri-template/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/uri-template/package.json +28 -0
- package/node_modules/@noodleseed/assistant/dist/{chunk-7L52WJ2E.js → chunk-MZNENVFY.js} +11 -3
- package/node_modules/@noodleseed/assistant/dist/{chunk-7L52WJ2E.js.map → chunk-MZNENVFY.js.map} +1 -1
- package/node_modules/@noodleseed/assistant/dist/{chunk-NPV64PUX.js → chunk-RIKRQFKS.js} +5 -1
- package/node_modules/@noodleseed/assistant/dist/{chunk-NPV64PUX.js.map → chunk-RIKRQFKS.js.map} +1 -1
- package/node_modules/@noodleseed/assistant/dist/{client-Ii_xTV09.d.ts → client-B6pnBmF8.d.ts} +1 -0
- package/node_modules/@noodleseed/assistant/dist/{client-401BAJqk.d.cts → client-BQ30Fq-c.d.cts} +1 -0
- package/node_modules/@noodleseed/assistant/dist/client.cjs +4 -0
- package/node_modules/@noodleseed/assistant/dist/client.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/client.d.cts +1 -1
- package/node_modules/@noodleseed/assistant/dist/client.d.ts +1 -1
- package/node_modules/@noodleseed/assistant/dist/client.js +1 -1
- package/node_modules/@noodleseed/assistant/dist/embed.global.js +2 -2
- package/node_modules/@noodleseed/assistant/dist/index.cjs +13 -1
- package/node_modules/@noodleseed/assistant/dist/index.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/index.d.cts +2 -2
- package/node_modules/@noodleseed/assistant/dist/index.d.ts +2 -2
- package/node_modules/@noodleseed/assistant/dist/index.js +2 -2
- package/node_modules/@noodleseed/assistant/dist/react/client.cjs +4 -0
- package/node_modules/@noodleseed/assistant/dist/react/client.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/react/client.d.cts +1 -1
- package/node_modules/@noodleseed/assistant/dist/react/client.d.ts +1 -1
- package/node_modules/@noodleseed/assistant/dist/react/client.js +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.cjs +13 -1
- package/node_modules/@noodleseed/assistant/dist/react.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.d.cts +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.d.ts +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.js +2 -2
- package/node_modules/@noodleseed/assistant/package.json +2 -1
- package/package.json +5 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-palette.d.ts.map +0 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-palette.js.map +0 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +0 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.d.ts +0 -7
- package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.js +0 -23
- package/node_modules/@noodle-borg/service/dist/feedback-operations/bootstrap.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/config.d.ts +0 -12
- package/node_modules/@noodle-borg/service/dist/feedback-operations/config.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/config.js +0 -47
- package/node_modules/@noodle-borg/service/dist/feedback-operations/config.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.d.ts +0 -24
- package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.js +0 -2
- package/node_modules/@noodle-borg/service/dist/feedback-operations/contracts.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.d.ts +0 -29
- package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.js +0 -263
- package/node_modules/@noodle-borg/service/dist/feedback-operations/delivery-worker.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.d.ts +0 -39
- package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.js +0 -142
- package/node_modules/@noodle-borg/service/dist/feedback-operations/linear-client.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.d.ts +0 -33
- package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.js +0 -142
- package/node_modules/@noodle-borg/service/dist/feedback-operations/reporter-email.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.d.ts +0 -138
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.js +0 -199
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-card.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.d.ts +0 -52
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.js +0 -103
- package/node_modules/@noodle-borg/service/dist/feedback-operations/slack-client.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/github/feedback-issues.d.ts +0 -44
- package/node_modules/@noodle-borg/service/dist/github/feedback-issues.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/github/feedback-issues.js +0 -117
- package/node_modules/@noodle-borg/service/dist/github/feedback-issues.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/modules/loader.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/modules/loader.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.d.ts +0 -10
- package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.js +0 -54
- package/node_modules/@noodle-borg/service/dist/routes/feedback-operations-dispatch.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/feedback.d.ts +0 -30
- package/node_modules/@noodle-borg/service/dist/routes/feedback.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/feedback.js +0 -233
- package/node_modules/@noodle-borg/service/dist/routes/feedback.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.d.ts +0 -17
- package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.js +0 -141
- package/node_modules/@noodle-borg/service/dist/routes/linear-feedback-webhook.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.d.ts +0 -15
- package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.js +0 -135
- package/node_modules/@noodle-borg/service/dist/routes/slack-feedback-actions.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/feedback-operations.d.ts +0 -188
- package/node_modules/@noodle-borg/service/dist/store/feedback-operations.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/feedback-operations.js +0 -489
- package/node_modules/@noodle-borg/service/dist/store/feedback-operations.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.d.ts +0 -35
- package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.js +0 -172
- package/node_modules/@noodle-borg/service/dist/store/postgres-feedback-operations.js.map +0 -1
- /package/node_modules/@noodle-borg/{service/dist/modules → service-modules/dist}/loader.js +0 -0
- /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.d.ts +0 -0
- /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.d.ts.map +0 -0
- /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.js +0 -0
- /package/node_modules/@noodle-borg/{compiler → uri-template}/dist/uri-template.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-agent-search.d.ts","sourceRoot":"","sources":["../src/google-agent-search.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAGpB,kGAAkG;AAClG,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,KACE,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAM3D,MAAM,WAAW,wBAAwB;IACvC,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,yBAAyB,CAAC;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC;AAyDD,qBAAa,wBAAyB,YAAW,cAAc;;gBAMjD,OAAO,EAAE,wBAAwB;IAI7C,OAAO,CAAC,aAAa;YAIP,IAAI;IAIZ,KAAK,CACT,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,OAAO,CAAC,iBAAiB,CAAC;IAuCvB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,MAAM,CACV,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;IAwBhC,OAAO,CAAC,aAAa;IAyBf,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,cAAc,CAClB,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;CAM1C;AAED,oGAAoG;AACpG,qBAAa,sBAAuB,YAAW,UAAU;;gBAG3C,OAAO,EAAE,wBAAwB;IAIvC,MAAM,CACV,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;CAuCjC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Agent Search adapter (ADR 0202 as amended): both knowledge ports over the Discovery Engine
|
|
3
|
+
* v1 REST surface, in the **Noodle-owned** managed project.
|
|
4
|
+
*
|
|
5
|
+
* Design constraints, enforced by tests:
|
|
6
|
+
* - **REST-only.** No `@google-cloud/*` dependency — Apache-licensed packages may not depend on the
|
|
7
|
+
* commercial vendor SDKs (ADR 0203 license gate); plain `fetch` against the documented v1 surface.
|
|
8
|
+
* - **No credentials in the adapter.** A `GoogleAccessTokenProvider` supplies short-lived bearer
|
|
9
|
+
* tokens; the credential broker owns the service accounts (three least-privilege identities:
|
|
10
|
+
* provisioning, publication, search) — never this file.
|
|
11
|
+
* - **Tenant + revision + audience metadata everywhere.** Every imported document carries `tenant`,
|
|
12
|
+
* `revision`, and `audience=public` struct metadata; every search filters on tenant + revision +
|
|
13
|
+
* audience, so a silently-empty index cannot answer confidently from a subset.
|
|
14
|
+
* - **Provider concepts stop here.** Resource names, snippets, and scores never cross the port
|
|
15
|
+
* boundary; hits leave as bounded, citable `SearchHit`s.
|
|
16
|
+
*
|
|
17
|
+
* API facts verified against official docs 2026-08-15 (cloud.google.com/generative-ai-app-builder
|
|
18
|
+
* REST reference): data stores under
|
|
19
|
+
* `projects/{p}/locations/{l}/collections/default_collection/dataStores`, document import via
|
|
20
|
+
* `.../branches/default_branch/documents:import`, search via
|
|
21
|
+
* `.../servingConfigs/default_serving_config:search`; OAuth scope `cloud-platform` or
|
|
22
|
+
* `discoveryengine.*`. Re-verify before changing protocol-sensitive shapes and record drift.
|
|
23
|
+
*/
|
|
24
|
+
import { createHash } from 'node:crypto';
|
|
25
|
+
import { siteHitAllowed } from './fusion.js';
|
|
26
|
+
import { buildExcerpt } from './hits.js';
|
|
27
|
+
import { knowledgeScopeKey } from './ir.js';
|
|
28
|
+
import { KnowledgeError, } from './ports.js';
|
|
29
|
+
import { documentsContentHash } from './revision-store.js';
|
|
30
|
+
const API_ROOT = 'https://discoveryengine.googleapis.com/v1';
|
|
31
|
+
const MAX_IMPORT_DOCUMENTS_PER_REQUEST = 100;
|
|
32
|
+
const SITE_COMPONENT = 'site';
|
|
33
|
+
function dataStoreName(options, componentName) {
|
|
34
|
+
const id = `ns-${tenantTag(options.scope)}-${componentName}`.toLowerCase();
|
|
35
|
+
return `projects/${options.project}/locations/${options.location}/collections/default_collection/dataStores/${id}`;
|
|
36
|
+
}
|
|
37
|
+
function tenantTag(scope) {
|
|
38
|
+
return createHash('sha256').update(knowledgeScopeKey(scope, '')).digest('hex').slice(0, 24);
|
|
39
|
+
}
|
|
40
|
+
function assertScope(actual, bound) {
|
|
41
|
+
if (actual.org !== bound.org || actual.app !== bound.app || actual.env !== bound.env) {
|
|
42
|
+
throw new KnowledgeError('predicate', 'adapter instance is bound to a different tenant scope');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function callGoogle(options, path, body) {
|
|
46
|
+
const root = options.apiRoot ?? API_ROOT;
|
|
47
|
+
const token = await options.tokenProvider();
|
|
48
|
+
const transport = options.transport ??
|
|
49
|
+
(async (url, init) => {
|
|
50
|
+
const response = await fetch(url, init);
|
|
51
|
+
return { status: response.status, json: () => response.json() };
|
|
52
|
+
});
|
|
53
|
+
let response;
|
|
54
|
+
try {
|
|
55
|
+
response = await transport(`${root}/${path}`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
|
|
58
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (cause) {
|
|
62
|
+
throw new KnowledgeError('provider', 'google agent search request failed', { cause });
|
|
63
|
+
}
|
|
64
|
+
if (response.status < 200 || response.status >= 300) {
|
|
65
|
+
// Attributable without content: the operation and status only; provider bodies never propagate.
|
|
66
|
+
const operation = path.split('?')[0]?.split('/').pop() ?? path;
|
|
67
|
+
throw new KnowledgeError('provider', `google agent search ${operation} returned HTTP ${response.status}`);
|
|
68
|
+
}
|
|
69
|
+
return response.json();
|
|
70
|
+
}
|
|
71
|
+
export class GoogleAgentSearchAdapter {
|
|
72
|
+
#options;
|
|
73
|
+
/** scopeKey → serving revisionId, and revisionId → scopeKey for the activate() pointer flip. */
|
|
74
|
+
#active = new Map();
|
|
75
|
+
#scopeOfRevision = new Map();
|
|
76
|
+
constructor(options) {
|
|
77
|
+
this.#options = options;
|
|
78
|
+
}
|
|
79
|
+
dataStoreName(componentName) {
|
|
80
|
+
return dataStoreName(this.#options, componentName);
|
|
81
|
+
}
|
|
82
|
+
async call(path, body) {
|
|
83
|
+
return callGoogle(this.#options, path, body);
|
|
84
|
+
}
|
|
85
|
+
async stage(scope, componentName, documents) {
|
|
86
|
+
assertScope(scope, this.#options.scope);
|
|
87
|
+
const contentHash = documentsContentHash(documents.map((document) => document.descriptor.sha256));
|
|
88
|
+
const revisionId = `g-${contentHash.slice(0, 24)}`;
|
|
89
|
+
const tenant = tenantTag(scope);
|
|
90
|
+
const googleDocuments = documents.map((document) => ({
|
|
91
|
+
id: document.descriptor.sha256.slice(0, 32),
|
|
92
|
+
structData: {
|
|
93
|
+
tenant,
|
|
94
|
+
revision: revisionId,
|
|
95
|
+
audience: 'public',
|
|
96
|
+
title: document.descriptor.title,
|
|
97
|
+
...(document.descriptor.sourceUrl !== undefined
|
|
98
|
+
? { uri: document.descriptor.sourceUrl }
|
|
99
|
+
: {}),
|
|
100
|
+
},
|
|
101
|
+
jsonData: JSON.stringify({ text: document.text }),
|
|
102
|
+
}));
|
|
103
|
+
for (let index = 0; index < googleDocuments.length; index += MAX_IMPORT_DOCUMENTS_PER_REQUEST) {
|
|
104
|
+
const batch = googleDocuments.slice(index, index + MAX_IMPORT_DOCUMENTS_PER_REQUEST);
|
|
105
|
+
await this.call(`${this.dataStoreName(componentName)}/branches/default_branch/documents:import`, {
|
|
106
|
+
documents: batch,
|
|
107
|
+
reconciliationMode: 'FULL',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
this.#scopeOfRevision.set(revisionId, knowledgeScopeKey(scope, componentName));
|
|
111
|
+
return {
|
|
112
|
+
revisionId,
|
|
113
|
+
scope,
|
|
114
|
+
componentName,
|
|
115
|
+
documents: documents.map((document) => document.descriptor),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
async verify(revisionId, predicate) {
|
|
119
|
+
if (predicate.audience !== 'public') {
|
|
120
|
+
throw new KnowledgeError('predicate', 'the managed adapter serves a public audience only');
|
|
121
|
+
}
|
|
122
|
+
if (predicate.revision !== revisionId)
|
|
123
|
+
return false;
|
|
124
|
+
// The positive filtered query is the launch gate. The service executes one real search through
|
|
125
|
+
// this adapter with the revision filter before activating; staging already tagged every
|
|
126
|
+
// document, so an empty result here means the import must not activate.
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
async activate(revisionId) {
|
|
130
|
+
const scopeKey = this.#scopeOfRevision.get(revisionId);
|
|
131
|
+
if (scopeKey === undefined) {
|
|
132
|
+
throw new KnowledgeError('not-found', `revision ${revisionId} is not staged`);
|
|
133
|
+
}
|
|
134
|
+
this.#active.set(scopeKey, revisionId);
|
|
135
|
+
}
|
|
136
|
+
async search(scope, componentName, request) {
|
|
137
|
+
assertScope(scope, this.#options.scope);
|
|
138
|
+
const scopeKey = knowledgeScopeKey(scope, componentName);
|
|
139
|
+
const revision = this.#active.get(scopeKey);
|
|
140
|
+
if (revision === undefined) {
|
|
141
|
+
throw new KnowledgeError('not-found', 'no active revision for this component');
|
|
142
|
+
}
|
|
143
|
+
const response = await this.call(`${this.dataStoreName(componentName)}/servingConfigs/default_serving_config:search`, {
|
|
144
|
+
query: request.query,
|
|
145
|
+
pageSize: request.limit,
|
|
146
|
+
filter: `tenant: ANY("${tenantTag(scope)}") AND revision: ANY("${revision}") AND audience: ANY("public")`,
|
|
147
|
+
contentSearchSpec: {
|
|
148
|
+
snippetSpec: { returnSnippet: true, maxSnippetCount: 1 },
|
|
149
|
+
extractiveContentSpec: { maxExtractiveAnswerCount: 0, maxExtractiveSegmentCount: 0 },
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
const results = response.results;
|
|
153
|
+
if (!Array.isArray(results))
|
|
154
|
+
return [];
|
|
155
|
+
return results.slice(0, request.limit).map((raw) => this.toDocumentHit(raw, request.query));
|
|
156
|
+
}
|
|
157
|
+
toDocumentHit(raw, query) {
|
|
158
|
+
const result = raw;
|
|
159
|
+
const struct = result.document?.structData ?? {};
|
|
160
|
+
const title = struct.title ?? result.document?.id ?? 'Result';
|
|
161
|
+
let text = result.snippet ?? '';
|
|
162
|
+
if (text === '' && result.document?.jsonData !== undefined) {
|
|
163
|
+
try {
|
|
164
|
+
text = String(JSON.parse(result.document.jsonData).text ?? '');
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
text = '';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const uri = struct.uri;
|
|
171
|
+
return {
|
|
172
|
+
id: `doc:${result.document?.id ?? createHash('sha256').update(title).digest('hex').slice(0, 16)}`,
|
|
173
|
+
title,
|
|
174
|
+
excerpt: buildExcerpt(text, query),
|
|
175
|
+
sourceKind: 'document',
|
|
176
|
+
...(uri?.startsWith('https://') ? { uri } : {}),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
async delete(revisionId) {
|
|
180
|
+
// Managed v0: imports use FULL reconciliation per data store, so the next stage displaces old
|
|
181
|
+
// revisions provider-side; deletion is recorded in the revision store only.
|
|
182
|
+
this.#scopeOfRevision.delete(revisionId);
|
|
183
|
+
for (const [scopeKey, revision] of this.#active) {
|
|
184
|
+
if (revision === revisionId)
|
|
185
|
+
this.#active.delete(scopeKey);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async activeRevision(scope, componentName) {
|
|
189
|
+
assertScope(scope, this.#options.scope);
|
|
190
|
+
const revision = this.#active.get(knowledgeScopeKey(scope, componentName));
|
|
191
|
+
if (revision === undefined)
|
|
192
|
+
return undefined;
|
|
193
|
+
return { revisionId: revision, scope, componentName, documents: [] };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** Site half of the managed adapter: live public-website search over the tenant's WEBSITE store. */
|
|
197
|
+
export class GoogleAgentSearchSites {
|
|
198
|
+
#options;
|
|
199
|
+
constructor(options) {
|
|
200
|
+
this.#options = options;
|
|
201
|
+
}
|
|
202
|
+
async search(policy, predicate, request) {
|
|
203
|
+
if (predicate.audience !== 'public') {
|
|
204
|
+
throw new KnowledgeError('predicate', 'site search rejects non-public audiences');
|
|
205
|
+
}
|
|
206
|
+
if (request.query.trim().length === 0) {
|
|
207
|
+
throw new KnowledgeError('request', 'query must not be empty');
|
|
208
|
+
}
|
|
209
|
+
// The tenant's WEBSITE data store; the provider's crawler owns discovery and freshness. Site
|
|
210
|
+
// content is live, so no revision filter — only tenant + public audience.
|
|
211
|
+
const response = await callGoogle(this.#options, `${dataStoreName(this.#options, SITE_COMPONENT)}/servingConfigs/default_serving_config:search`, {
|
|
212
|
+
query: request.query,
|
|
213
|
+
pageSize: request.limit,
|
|
214
|
+
filter: `tenant: ANY("${tenantTag(this.#options.scope)}") AND audience: ANY("public")`,
|
|
215
|
+
contentSearchSpec: { snippetSpec: { returnSnippet: true, maxSnippetCount: 1 } },
|
|
216
|
+
});
|
|
217
|
+
const results = response.results;
|
|
218
|
+
if (!Array.isArray(results))
|
|
219
|
+
return [];
|
|
220
|
+
const candidates = results.map((raw) => {
|
|
221
|
+
const result = raw;
|
|
222
|
+
const uri = result.documentUri ?? '';
|
|
223
|
+
return {
|
|
224
|
+
id: uri,
|
|
225
|
+
title: result.document?.structData?.title ?? uri,
|
|
226
|
+
excerpt: buildExcerpt(result.snippet ?? '', request.query),
|
|
227
|
+
sourceKind: 'site',
|
|
228
|
+
...(uri.startsWith('https://') ? { uri } : {}),
|
|
229
|
+
};
|
|
230
|
+
});
|
|
231
|
+
// Exact origin/path policy postfilter runs BEFORE the requested limit (ADR 0202).
|
|
232
|
+
return candidates.filter((hit) => siteHitAllowed(policy, hit)).slice(0, request.limit);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=google-agent-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-agent-search.js","sourceRoot":"","sources":["../src/google-agent-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded search request/response shapes shared by every `KnowledgeIndex`/`SiteSearch`
|
|
3
|
+
* implementation and the generated `search_<name>` tool schema.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export declare const searchRequestSchema: z.ZodObject<{
|
|
7
|
+
query: z.ZodString;
|
|
8
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
}, z.core.$strict>;
|
|
10
|
+
export type SearchRequest = z.infer<typeof searchRequestSchema>;
|
|
11
|
+
export declare const searchHitSchema: z.ZodObject<{
|
|
12
|
+
id: z.ZodString;
|
|
13
|
+
title: z.ZodString;
|
|
14
|
+
excerpt: z.ZodString;
|
|
15
|
+
sourceKind: z.ZodEnum<{
|
|
16
|
+
document: "document";
|
|
17
|
+
site: "site";
|
|
18
|
+
}>;
|
|
19
|
+
uri: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
export type SearchHit = z.infer<typeof searchHitSchema>;
|
|
22
|
+
/** Collapse whitespace and truncate to the structural excerpt bound. */
|
|
23
|
+
export declare function normalizeExcerpt(text: string, max?: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Extract a window of the document around the highest-density region of query terms, then
|
|
26
|
+
* normalize. Deterministic for identical inputs.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildExcerpt(text: string, query: string, max?: number): string;
|
|
29
|
+
/** Shared lowercase word tokenizer used for excerpt placement and the bundled BM25 adapter. */
|
|
30
|
+
export declare function tokenize(text: string): string[];
|
|
31
|
+
//# sourceMappingURL=hits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hits.d.ts","sourceRoot":"","sources":["../src/hits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,mBAAmB;;;kBAUrB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;kBAejB,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,MAAM,CAI9E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAoB,GAAG,MAAM,CAqBzF;AAED,+FAA+F;AAC/F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded search request/response shapes shared by every `KnowledgeIndex`/`SiteSearch`
|
|
3
|
+
* implementation and the generated `search_<name>` tool schema.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { DEFAULT_RESULT_LIMIT, MAX_EXCERPT_CHARS, MAX_QUERY_CHARS, MAX_RESULT_LIMIT, MIN_QUERY_CHARS, MIN_RESULT_LIMIT, } from './limits.js';
|
|
7
|
+
export const searchRequestSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
query: z.string().min(MIN_QUERY_CHARS).max(MAX_QUERY_CHARS),
|
|
10
|
+
limit: z
|
|
11
|
+
.number()
|
|
12
|
+
.int()
|
|
13
|
+
.min(MIN_RESULT_LIMIT)
|
|
14
|
+
.max(MAX_RESULT_LIMIT)
|
|
15
|
+
.default(DEFAULT_RESULT_LIMIT),
|
|
16
|
+
})
|
|
17
|
+
.strict();
|
|
18
|
+
export const searchHitSchema = z
|
|
19
|
+
.object({
|
|
20
|
+
/** Stable identifier: content-addressed for documents, canonical URL for site hits. */
|
|
21
|
+
id: z.string().min(1),
|
|
22
|
+
title: z.string().min(1),
|
|
23
|
+
/** Plain-text evidence, never provider prose; bounded by MAX_EXCERPT_CHARS. */
|
|
24
|
+
excerpt: z.string().max(MAX_EXCERPT_CHARS),
|
|
25
|
+
sourceKind: z.enum(['document', 'site']),
|
|
26
|
+
/** Optional exact HTTPS citation URI. */
|
|
27
|
+
uri: z
|
|
28
|
+
.string()
|
|
29
|
+
.url()
|
|
30
|
+
.refine((value) => value.startsWith('https://'), 'must be an HTTPS URL')
|
|
31
|
+
.optional(),
|
|
32
|
+
})
|
|
33
|
+
.strict();
|
|
34
|
+
/** Collapse whitespace and truncate to the structural excerpt bound. */
|
|
35
|
+
export function normalizeExcerpt(text, max = MAX_EXCERPT_CHARS) {
|
|
36
|
+
const flattened = text.replaceAll(/\s+/g, ' ').trim();
|
|
37
|
+
if (flattened.length <= max)
|
|
38
|
+
return flattened;
|
|
39
|
+
return `${flattened.slice(0, max - 1)}…`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extract a window of the document around the highest-density region of query terms, then
|
|
43
|
+
* normalize. Deterministic for identical inputs.
|
|
44
|
+
*/
|
|
45
|
+
export function buildExcerpt(text, query, max = MAX_EXCERPT_CHARS) {
|
|
46
|
+
const terms = tokenize(query);
|
|
47
|
+
if (terms.length === 0 || text.length <= max)
|
|
48
|
+
return normalizeExcerpt(text, max);
|
|
49
|
+
const lower = text.toLowerCase();
|
|
50
|
+
const positions = [];
|
|
51
|
+
for (const term of terms) {
|
|
52
|
+
let index = lower.indexOf(term);
|
|
53
|
+
while (index !== -1) {
|
|
54
|
+
positions.push(index);
|
|
55
|
+
index = lower.indexOf(term, index + term.length);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (positions.length === 0)
|
|
59
|
+
return normalizeExcerpt(text.slice(0, max), max);
|
|
60
|
+
positions.sort((a, b) => a - b);
|
|
61
|
+
const middle = positions[Math.floor(positions.length / 2)] ?? positions[0];
|
|
62
|
+
if (middle === undefined)
|
|
63
|
+
return normalizeExcerpt(text.slice(0, max), max);
|
|
64
|
+
const windowStart = Math.max(0, middle - Math.floor(max / 2));
|
|
65
|
+
const window = text.slice(windowStart, windowStart + max);
|
|
66
|
+
return normalizeExcerpt(window, max);
|
|
67
|
+
}
|
|
68
|
+
/** Shared lowercase word tokenizer used for excerpt placement and the bundled BM25 adapter. */
|
|
69
|
+
export function tokenize(text) {
|
|
70
|
+
return text
|
|
71
|
+
.toLowerCase()
|
|
72
|
+
.split(/[^a-z0-9]+/)
|
|
73
|
+
.filter((term) => term.length > 0);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=hits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hits.js","sourceRoot":"","sources":["../src/hits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer-owned knowledge retrieval (ADR 0202, amended for the managed-bundled v0): the
|
|
3
|
+
* structural limits, the compiled Core v2 component shapes, the provider-neutral
|
|
4
|
+
* `KnowledgeIndex`/`SiteSearch` ports, deterministic RRF fusion, the bundled BM25 adapter,
|
|
5
|
+
* deploy-coupled revision coordination, and the tenant search budget that bounds metered
|
|
6
|
+
* retrieval spend.
|
|
7
|
+
*
|
|
8
|
+
* The shared port conformance suites are deliberately absent here. This entrypoint is loaded
|
|
9
|
+
* by the published CLI through `@noodle-borg/compiler`, so it stays limited to what a tarball
|
|
10
|
+
* installs; adapter authors import the suites from `@noodle-borg/knowledge/conformance`.
|
|
11
|
+
*/
|
|
12
|
+
export * from './bm25.js';
|
|
13
|
+
export * from './budget.js';
|
|
14
|
+
export * from './compile.js';
|
|
15
|
+
export * from './fakes.js';
|
|
16
|
+
export * from './fusion.js';
|
|
17
|
+
export * from './google-agent-search.js';
|
|
18
|
+
export * from './hits.js';
|
|
19
|
+
export * from './ir.js';
|
|
20
|
+
export * from './limits.js';
|
|
21
|
+
export * from './manifest-schema.js';
|
|
22
|
+
export * from './ports.js';
|
|
23
|
+
export * from './postgres-revision-store.js';
|
|
24
|
+
export * from './revision-store.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer-owned knowledge retrieval (ADR 0202, amended for the managed-bundled v0): the
|
|
3
|
+
* structural limits, the compiled Core v2 component shapes, the provider-neutral
|
|
4
|
+
* `KnowledgeIndex`/`SiteSearch` ports, deterministic RRF fusion, the bundled BM25 adapter,
|
|
5
|
+
* deploy-coupled revision coordination, and the tenant search budget that bounds metered
|
|
6
|
+
* retrieval spend.
|
|
7
|
+
*
|
|
8
|
+
* The shared port conformance suites are deliberately absent here. This entrypoint is loaded
|
|
9
|
+
* by the published CLI through `@noodle-borg/compiler`, so it stays limited to what a tarball
|
|
10
|
+
* installs; adapter authors import the suites from `@noodle-borg/knowledge/conformance`.
|
|
11
|
+
*/
|
|
12
|
+
export * from './bm25.js';
|
|
13
|
+
export * from './budget.js';
|
|
14
|
+
export * from './compile.js';
|
|
15
|
+
export * from './fakes.js';
|
|
16
|
+
export * from './fusion.js';
|
|
17
|
+
export * from './google-agent-search.js';
|
|
18
|
+
export * from './hits.js';
|
|
19
|
+
export * from './ir.js';
|
|
20
|
+
export * from './limits.js';
|
|
21
|
+
export * from './manifest-schema.js';
|
|
22
|
+
export * from './ports.js';
|
|
23
|
+
export * from './postgres-revision-store.js';
|
|
24
|
+
export * from './revision-store.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge component internal representation (Core v2, ADR 0202). Compiled data contains
|
|
3
|
+
* descriptors and content hashes — never file bytes, provider identifiers, or credentials.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
/** Mandatory typed retrieval predicate. v0 pins the audience to `public`; other kinds are unrepresentable. */
|
|
7
|
+
export declare const audiencePredicateSchema: z.ZodObject<{
|
|
8
|
+
audience: z.ZodLiteral<"public">;
|
|
9
|
+
revision: z.ZodString;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
export type AudiencePredicate = z.infer<typeof audiencePredicateSchema>;
|
|
12
|
+
/** One deploy-coupled document as compiled data: descriptor plus content hash, no bytes. */
|
|
13
|
+
export declare const documentDescriptorSchema: z.ZodObject<{
|
|
14
|
+
path: z.ZodString;
|
|
15
|
+
title: z.ZodString;
|
|
16
|
+
sourceUrl: z.ZodOptional<z.ZodString>;
|
|
17
|
+
sha256: z.ZodString;
|
|
18
|
+
bytes: z.ZodNumber;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export type DocumentDescriptor = z.infer<typeof documentDescriptorSchema>;
|
|
21
|
+
/** A live public website scope. The provider owns freshness; we pin only the allowed origin/path policy. */
|
|
22
|
+
export declare const sitePolicySchema: z.ZodObject<{
|
|
23
|
+
origin: z.ZodString;
|
|
24
|
+
include: z.ZodArray<z.ZodString>;
|
|
25
|
+
}, z.core.$strict>;
|
|
26
|
+
export type SitePolicy = z.infer<typeof sitePolicySchema>;
|
|
27
|
+
/** One knowledge component: bounded documents plus optional live-site scopes. */
|
|
28
|
+
export declare const knowledgeComponentSchema: z.ZodObject<{
|
|
29
|
+
name: z.ZodString;
|
|
30
|
+
title: z.ZodString;
|
|
31
|
+
description: z.ZodString;
|
|
32
|
+
documents: z.ZodArray<z.ZodObject<{
|
|
33
|
+
path: z.ZodString;
|
|
34
|
+
title: z.ZodString;
|
|
35
|
+
sourceUrl: z.ZodOptional<z.ZodString>;
|
|
36
|
+
sha256: z.ZodString;
|
|
37
|
+
bytes: z.ZodNumber;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
sites: z.ZodArray<z.ZodObject<{
|
|
40
|
+
origin: z.ZodString;
|
|
41
|
+
include: z.ZodArray<z.ZodString>;
|
|
42
|
+
}, z.core.$strict>>;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
export type KnowledgeComponent = z.infer<typeof knowledgeComponentSchema>;
|
|
45
|
+
/** Deployment scope every knowledge binding resolves (ADR 0048 org → app → env). */
|
|
46
|
+
export declare const knowledgeScopeSchema: z.ZodObject<{
|
|
47
|
+
org: z.ZodString;
|
|
48
|
+
app: z.ZodString;
|
|
49
|
+
env: z.ZodString;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
export type KnowledgeScope = z.infer<typeof knowledgeScopeSchema>;
|
|
52
|
+
export declare function knowledgeScopeKey(scope: KnowledgeScope, name: string): string;
|
|
53
|
+
//# sourceMappingURL=ir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,8GAA8G;AAC9G,eAAO,MAAM,uBAAuB;;;kBAMzB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAOxE,4FAA4F;AAC5F,eAAO,MAAM,wBAAwB;;;;;;kBA+BjC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,4GAA4G;AAC5G,eAAO,MAAM,gBAAgB;;;kBAalB,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;kBAa1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,oFAAoF;AACpF,eAAO,MAAM,oBAAoB;;;;kBAMtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge component internal representation (Core v2, ADR 0202). Compiled data contains
|
|
3
|
+
* descriptors and content hashes — never file bytes, provider identifiers, or credentials.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ALLOWED_DOCUMENT_EXTENSIONS, MAX_DOCUMENTS_PER_COMPONENT } from './limits.js';
|
|
7
|
+
/** Mandatory typed retrieval predicate. v0 pins the audience to `public`; other kinds are unrepresentable. */
|
|
8
|
+
export const audiencePredicateSchema = z
|
|
9
|
+
.object({
|
|
10
|
+
audience: z.literal('public'),
|
|
11
|
+
/** Revision the predicate must match — a knowledge base that silently returns nothing answers confidently from a subset. */
|
|
12
|
+
revision: z.string().min(1),
|
|
13
|
+
})
|
|
14
|
+
.strict();
|
|
15
|
+
const httpsUrl = z
|
|
16
|
+
.string()
|
|
17
|
+
.url()
|
|
18
|
+
.refine((value) => value.startsWith('https://'), 'must be an exact HTTPS URL');
|
|
19
|
+
/** One deploy-coupled document as compiled data: descriptor plus content hash, no bytes. */
|
|
20
|
+
export const documentDescriptorSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
/** Project-root-relative POSIX path of the source file. */
|
|
23
|
+
path: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.refine((value) => !value.startsWith('/') && !value.split('/').includes('..'), 'document path must stay inside the project root'),
|
|
27
|
+
/** Required non-empty title. */
|
|
28
|
+
title: z.string().min(1),
|
|
29
|
+
/** Optional exact HTTPS source URL shown as the citation target. */
|
|
30
|
+
sourceUrl: httpsUrl.optional(),
|
|
31
|
+
/** Lowercase hex SHA-256 of the UTF-8 content, pinned by deploy records. */
|
|
32
|
+
sha256: z
|
|
33
|
+
.string()
|
|
34
|
+
.length(64)
|
|
35
|
+
.regex(/^[0-9a-f]{64}$/),
|
|
36
|
+
/** Uncompressed UTF-8 byte size. */
|
|
37
|
+
bytes: z.number().int().positive(),
|
|
38
|
+
})
|
|
39
|
+
.strict()
|
|
40
|
+
.superRefine((value, context) => {
|
|
41
|
+
const extension = value.path.slice(value.path.lastIndexOf('.'));
|
|
42
|
+
if (!ALLOWED_DOCUMENT_EXTENSIONS.includes(extension)) {
|
|
43
|
+
context.addIssue({
|
|
44
|
+
code: 'custom',
|
|
45
|
+
message: `document extension must be one of ${ALLOWED_DOCUMENT_EXTENSIONS.join(', ')}`,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
/** A live public website scope. The provider owns freshness; we pin only the allowed origin/path policy. */
|
|
50
|
+
export const sitePolicySchema = z
|
|
51
|
+
.object({
|
|
52
|
+
/** Exact HTTPS origin (`scheme://host[:port]`), no path. */
|
|
53
|
+
origin: httpsUrl.refine((value) => {
|
|
54
|
+
const afterScheme = value.slice('https://'.length);
|
|
55
|
+
return !afterScheme.includes('/');
|
|
56
|
+
}, { message: 'site origin must not contain a path' }),
|
|
57
|
+
/** Positive path globs; at least one, so the crawled scope is an explicit choice. */
|
|
58
|
+
include: z.array(z.string().min(1)).min(1),
|
|
59
|
+
})
|
|
60
|
+
.strict();
|
|
61
|
+
/** One knowledge component: bounded documents plus optional live-site scopes. */
|
|
62
|
+
export const knowledgeComponentSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
/** Stable logical name used in the generated `search_<name>` tool and revision keys. */
|
|
65
|
+
name: z
|
|
66
|
+
.string()
|
|
67
|
+
.min(1)
|
|
68
|
+
.max(64)
|
|
69
|
+
.regex(/^[a-z][a-z0-9_]*$/, 'component name must be lowercase snake-case'),
|
|
70
|
+
title: z.string().min(1),
|
|
71
|
+
description: z.string().min(1),
|
|
72
|
+
documents: z.array(documentDescriptorSchema).max(MAX_DOCUMENTS_PER_COMPONENT),
|
|
73
|
+
sites: z.array(sitePolicySchema),
|
|
74
|
+
})
|
|
75
|
+
.strict();
|
|
76
|
+
/** Deployment scope every knowledge binding resolves (ADR 0048 org → app → env). */
|
|
77
|
+
export const knowledgeScopeSchema = z
|
|
78
|
+
.object({
|
|
79
|
+
org: z.string().min(1),
|
|
80
|
+
app: z.string().min(1),
|
|
81
|
+
env: z.string().min(1),
|
|
82
|
+
})
|
|
83
|
+
.strict();
|
|
84
|
+
export function knowledgeScopeKey(scope, name) {
|
|
85
|
+
return `${scope.org}/${scope.app}/${scope.env}/${name}`;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=ir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural v0 knowledge limits (ADR 0202 fixed table, amended for the managed-bundled model).
|
|
3
|
+
* These are ceilings, not defaults: operators and app code may narrow them, never raise them.
|
|
4
|
+
* One owner for every bound so a declared limit nobody reads is unrepresentable.
|
|
5
|
+
*/
|
|
6
|
+
/** UTF-8 `.md` / `.txt` only; regular, non-symlinked, inside project root. */
|
|
7
|
+
export declare const ALLOWED_DOCUMENT_EXTENSIONS: readonly [".md", ".txt"];
|
|
8
|
+
export declare const MAX_DOCUMENTS_PER_COMPONENT = 100;
|
|
9
|
+
export declare const MAX_DOCUMENT_BYTES: number;
|
|
10
|
+
export declare const MAX_COMPONENT_TOTAL_BYTES: number;
|
|
11
|
+
export declare const MIN_QUERY_CHARS = 1;
|
|
12
|
+
export declare const MAX_QUERY_CHARS = 2000;
|
|
13
|
+
export declare const MIN_RESULT_LIMIT = 1;
|
|
14
|
+
export declare const MAX_RESULT_LIMIT = 20;
|
|
15
|
+
export declare const DEFAULT_RESULT_LIMIT = 8;
|
|
16
|
+
export declare const MAX_EXCERPT_CHARS = 2000;
|
|
17
|
+
/** Reciprocal-rank fusion constant; equal weight across sources (ADR 0202). */
|
|
18
|
+
export declare const RRF_K = 60;
|
|
19
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,0BAA2B,CAAC;AAEpE,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,kBAAkB,QAAc,CAAC;AAC9C,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAE1D,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,+EAA+E;AAC/E,eAAO,MAAM,KAAK,KAAK,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural v0 knowledge limits (ADR 0202 fixed table, amended for the managed-bundled model).
|
|
3
|
+
* These are ceilings, not defaults: operators and app code may narrow them, never raise them.
|
|
4
|
+
* One owner for every bound so a declared limit nobody reads is unrepresentable.
|
|
5
|
+
*/
|
|
6
|
+
/** UTF-8 `.md` / `.txt` only; regular, non-symlinked, inside project root. */
|
|
7
|
+
export const ALLOWED_DOCUMENT_EXTENSIONS = ['.md', '.txt'];
|
|
8
|
+
export const MAX_DOCUMENTS_PER_COMPONENT = 100;
|
|
9
|
+
export const MAX_DOCUMENT_BYTES = 1024 * 1024;
|
|
10
|
+
export const MAX_COMPONENT_TOTAL_BYTES = 25 * 1024 * 1024;
|
|
11
|
+
export const MIN_QUERY_CHARS = 1;
|
|
12
|
+
export const MAX_QUERY_CHARS = 2000;
|
|
13
|
+
export const MIN_RESULT_LIMIT = 1;
|
|
14
|
+
export const MAX_RESULT_LIMIT = 20;
|
|
15
|
+
export const DEFAULT_RESULT_LIMIT = 8;
|
|
16
|
+
export const MAX_EXCERPT_CHARS = 2000;
|
|
17
|
+
/** Reciprocal-rank fusion constant; equal weight across sources (ADR 0202). */
|
|
18
|
+
export const RRF_K = 60;
|
|
19
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAC;AAEpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC"}
|