@noodleseed/one 0.125.0 → 0.127.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-account.d.ts +2 -3
- package/dist/commands/catalog-data-account.d.ts.map +1 -1
- package/dist/commands/catalog-data-account.js +2 -310
- package/dist/commands/catalog-data-account.js.map +1 -1
- package/dist/commands/catalog-data-assistant.d.ts +2 -3
- package/dist/commands/catalog-data-assistant.d.ts.map +1 -1
- package/dist/commands/catalog-data-assistant.js +2 -259
- package/dist/commands/catalog-data-assistant.js.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.d.ts +2 -3
- package/dist/commands/catalog-data-auth-discovery.d.ts.map +1 -1
- package/dist/commands/catalog-data-auth-discovery.js +2 -357
- package/dist/commands/catalog-data-auth-discovery.js.map +1 -1
- package/dist/commands/catalog-data-billing.d.ts +2 -3
- package/dist/commands/catalog-data-billing.d.ts.map +1 -1
- package/dist/commands/catalog-data-billing.js +2 -311
- package/dist/commands/catalog-data-billing.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.d.ts +2 -3
- package/dist/commands/catalog-data-bootstrap-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-authoring.js +2 -381
- package/dist/commands/catalog-data-bootstrap-authoring.js.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts +2 -3
- package/dist/commands/catalog-data-bootstrap-pre-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-bootstrap-pre-auth.js +2 -388
- package/dist/commands/catalog-data-bootstrap-pre-auth.js.map +1 -1
- package/dist/commands/catalog-data-config.d.ts +2 -6
- package/dist/commands/catalog-data-config.d.ts.map +1 -1
- package/dist/commands/catalog-data-config.js +2 -266
- package/dist/commands/catalog-data-config.js.map +1 -1
- package/dist/commands/catalog-data-core.d.ts +2 -5
- package/dist/commands/catalog-data-core.d.ts.map +1 -1
- package/dist/commands/catalog-data-core.js +2 -86
- package/dist/commands/catalog-data-core.js.map +1 -1
- package/dist/commands/catalog-data-distributions.d.ts +3 -0
- package/dist/commands/catalog-data-distributions.d.ts.map +1 -0
- package/dist/commands/catalog-data-distributions.js +3 -0
- package/dist/commands/catalog-data-distributions.js.map +1 -0
- package/dist/commands/catalog-data-hosted-deployment.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-deployment.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-deployment.js +2 -329
- package/dist/commands/catalog-data-hosted-deployment.js.map +1 -1
- package/dist/commands/catalog-data-hosted-governance.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-governance.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-governance.js +2 -3
- package/dist/commands/catalog-data-hosted-governance.js.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.d.ts +2 -3
- package/dist/commands/catalog-data-hosted-observability.d.ts.map +1 -1
- package/dist/commands/catalog-data-hosted-observability.js +2 -453
- package/dist/commands/catalog-data-hosted-observability.js.map +1 -1
- package/dist/commands/catalog-data-local-authoring.d.ts +2 -3
- package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-local-authoring.js +2 -293
- package/dist/commands/catalog-data-local-authoring.js.map +1 -1
- package/dist/commands/catalog-data-platform-auth.d.ts +2 -6
- package/dist/commands/catalog-data-platform-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-platform-auth.js +2 -332
- package/dist/commands/catalog-data-platform-auth.js.map +1 -1
- package/dist/commands/catalog-data-policy.d.ts +2 -3
- package/dist/commands/catalog-data-policy.d.ts.map +1 -1
- package/dist/commands/catalog-data-policy.js +2 -327
- package/dist/commands/catalog-data-policy.js.map +1 -1
- package/dist/commands/catalog-data-tenant-admin.d.ts +2 -3
- package/dist/commands/catalog-data-tenant-admin.d.ts.map +1 -1
- package/dist/commands/catalog-data-tenant-admin.js +2 -478
- package/dist/commands/catalog-data-tenant-admin.js.map +1 -1
- package/dist/commands/catalog-data-tenant-resources.d.ts +2 -3
- package/dist/commands/catalog-data-tenant-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-tenant-resources.js +2 -222
- package/dist/commands/catalog-data-tenant-resources.js.map +1 -1
- package/dist/commands/catalog-types.d.ts +2 -103
- package/dist/commands/catalog-types.d.ts.map +1 -1
- package/dist/commands/catalog-types.js +0 -5
- package/dist/commands/catalog-types.js.map +1 -1
- package/dist/commands/catalog.d.ts.map +1 -1
- package/dist/commands/catalog.js +3 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/distribution-lifecycle-ops.d.ts +3 -0
- package/dist/commands/distribution-lifecycle-ops.d.ts.map +1 -0
- package/dist/commands/distribution-lifecycle-ops.js +200 -0
- package/dist/commands/distribution-lifecycle-ops.js.map +1 -0
- package/dist/commands/distribution-ops-support.d.ts +36 -0
- package/dist/commands/distribution-ops-support.d.ts.map +1 -0
- package/dist/commands/distribution-ops-support.js +109 -0
- package/dist/commands/distribution-ops-support.js.map +1 -0
- package/dist/commands/distributions-ops.d.ts +3 -0
- package/dist/commands/distributions-ops.d.ts.map +1 -0
- package/dist/commands/distributions-ops.js +272 -0
- package/dist/commands/distributions-ops.js.map +1 -0
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +27 -9
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/control-plane-request.d.ts +24 -0
- package/dist/control-plane-request.d.ts.map +1 -0
- package/dist/control-plane-request.js +124 -0
- package/dist/control-plane-request.js.map +1 -0
- package/dist/control-plane.d.ts +1 -17
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +1 -112
- package/dist/control-plane.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin-mode/plugin-operation-contract.d.ts +9 -9
- 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 +5 -1
- 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 +2 -2
- 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/skill-authoring-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +4 -2
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.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 +17 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js +1 -1
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts +66 -2
- package/node_modules/@noodle-borg/authoring/dist/knowledge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/knowledge.js +54 -2
- package/node_modules/@noodle-borg/authoring/dist/knowledge.js.map +1 -1
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.js +311 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-account.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js +260 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-assistant.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.js +358 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-auth-discovery.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +312 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.js +382 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-authoring.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.js +389 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-bootstrap-pre-auth.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.d.ts +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +267 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.d.ts +6 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.js +87 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-core.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.js +260 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-distributions.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.js +330 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-deployment.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.js +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-governance.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.js +470 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-hosted-observability.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.js +294 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-local-authoring.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.d.ts +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.js +333 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-platform-auth.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.js +328 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-policy.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.js +479 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-admin.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.d.ts +4 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +223 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.d.ts +104 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.d.ts +19 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js +19 -0
- package/node_modules/@noodle-borg/cli-catalog/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/cli-catalog/package.json +97 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +58 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/algolia-index.d.ts +30 -0
- package/node_modules/@noodle-borg/knowledge/dist/algolia-index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/algolia-index.js +141 -0
- package/node_modules/@noodle-borg/knowledge/dist/algolia-index.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts +4 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/compile.js +3 -0
- package/node_modules/@noodle-borg/knowledge/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.d.ts +2 -8
- 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 +0 -48
- package/node_modules/@noodle-borg/knowledge/dist/google-agent-search.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts +2 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/index.js +2 -0
- package/node_modules/@noodle-borg/knowledge/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts +6 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/limits.js +6 -0
- package/node_modules/@noodle-borg/knowledge/dist/limits.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts +58 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js +28 -0
- package/node_modules/@noodle-borg/knowledge/dist/manifest-schema.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/meilisearch-index.d.ts +33 -0
- package/node_modules/@noodle-borg/knowledge/dist/meilisearch-index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/meilisearch-index.js +153 -0
- package/node_modules/@noodle-borg/knowledge/dist/meilisearch-index.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +1 -0
- 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 +3 -0
- package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/provider-index-shared.d.ts +19 -0
- package/node_modules/@noodle-borg/knowledge/dist/provider-index-shared.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/provider-index-shared.js +47 -0
- package/node_modules/@noodle-borg/knowledge/dist/provider-index-shared.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +7 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +4 -0
- package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-crawl/dist/bounds.d.ts +3 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/bounds.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/bounds.js +30 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/bounds.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/firecrawl.d.ts +13 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/firecrawl.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/firecrawl.js +90 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/firecrawl.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/first-party.d.ts +11 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/first-party.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/first-party.js +108 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/first-party.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/html-text.d.ts +19 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/html-text.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/html-text.js +62 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/html-text.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/index.d.ts +5 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/index.js +4 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/origin.d.ts +3 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/origin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/origin.js +30 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/origin.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/ports.d.ts +28 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/ports.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/ports.js +8 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/ports.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/robots.d.ts +12 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/robots.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/robots.js +64 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/robots.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/sitemap.d.ts +3 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/sitemap.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/sitemap.js +11 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/sitemap.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/tavily.d.ts +11 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/tavily.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/tavily.js +53 -0
- package/node_modules/@noodle-borg/knowledge-crawl/dist/tavily.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-crawl/package.json +32 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.d.ts +71 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.js +138 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/crawl-lifecycle.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.js +11 -3
- package/node_modules/@noodle-borg/knowledge-operations/dist/dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.d.ts +7 -13
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js +16 -27
- package/node_modules/@noodle-borg/knowledge-operations/dist/executor.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.d.ts +2 -2
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.js +2 -2
- package/node_modules/@noodle-borg/knowledge-operations/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.d.ts +4 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.js +6 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/paths.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/postgres-crawl-state.d.ts +12 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/postgres-crawl-state.d.ts.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/postgres-crawl-state.js +58 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/postgres-crawl-state.js.map +1 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.d.ts +14 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js +84 -42
- package/node_modules/@noodle-borg/knowledge-operations/dist/publication.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts +18 -11
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js +149 -26
- package/node_modules/@noodle-borg/knowledge-operations/dist/service-wiring.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.d.ts +13 -4
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.d.ts.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.js +28 -0
- package/node_modules/@noodle-borg/knowledge-operations/dist/status-routes.js.map +1 -1
- package/node_modules/@noodle-borg/knowledge-operations/package.json +1 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +67 -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/command.d.ts +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.d.ts.map +1 -1
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js +1 -0
- package/node_modules/@noodle-borg/plugin-distribution/dist/command.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +3 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/server.d.ts +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 +26 -4
- package/node_modules/@noodle-borg/protocol/dist/v2/server.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/v2/skills.d.ts +30 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/skills.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/skills.js +126 -0
- package/node_modules/@noodle-borg/protocol/dist/v2/skills.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/package.json +3 -1
- package/node_modules/@noodle-borg/service/dist/assistant-bindings.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/assistant-bindings.js +29 -1
- package/node_modules/@noodle-borg/service/dist/assistant-bindings.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/knowledge-wiring.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/knowledge-wiring.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/knowledge-wiring.js +10 -0
- package/node_modules/@noodle-borg/service/dist/knowledge-wiring.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.js +21 -0
- package/node_modules/@noodle-borg/service/dist/modules/commercial-modules.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.js +155 -0
- package/node_modules/@noodle-borg/service/dist/modules/route-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +10 -2
- package/node_modules/@noodle-borg/service/dist/registry-targets.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 -20
- 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 +18 -18
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/admission-context.js +5 -1
- package/node_modules/@noodle-borg/transport-http/dist/admission-context.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.js +4 -1
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.js.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +561 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts.map +1 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.js +223 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/distribution.js.map +1 -0
- 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 +42 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts.map +1 -1
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js +14 -0
- package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.js.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/{chunk-MZNENVFY.js → chunk-RFETV5KQ.js} +158 -6
- package/node_modules/@noodleseed/assistant/dist/chunk-RFETV5KQ.js.map +1 -0
- package/node_modules/@noodleseed/assistant/dist/{chunk-RIKRQFKS.js → chunk-S373FCAI.js} +2 -1
- package/node_modules/@noodleseed/assistant/dist/client.js +1 -1
- package/node_modules/@noodleseed/assistant/dist/embed.global.js +57 -57
- package/node_modules/@noodleseed/assistant/dist/index.cjs +268 -117
- package/node_modules/@noodleseed/assistant/dist/index.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/index.js +2 -2
- package/node_modules/@noodleseed/assistant/dist/react/client.js +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.cjs +268 -117
- package/node_modules/@noodleseed/assistant/dist/react.cjs.map +1 -1
- package/node_modules/@noodleseed/assistant/dist/react.js +2 -2
- package/package.json +6 -2
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.d.ts +0 -15
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.d.ts.map +0 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.js +0 -50
- package/node_modules/@noodle-borg/knowledge-operations/dist/google-identity.js.map +0 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts +0 -34
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.d.ts.map +0 -1
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js +0 -68
- package/node_modules/@noodle-borg/knowledge-operations/dist/managed-google.js.map +0 -1
- package/node_modules/@noodleseed/assistant/dist/chunk-MZNENVFY.js.map +0 -1
- /package/node_modules/@noodleseed/assistant/dist/{chunk-RIKRQFKS.js.map → chunk-S373FCAI.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firecrawl.js","sourceRoot":"","sources":["../src/firecrawl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CrawlPage, SiteCrawlRequest, SiteFetcher } from './ports.js';
|
|
2
|
+
export interface FirstPartySiteFetcherOptions {
|
|
3
|
+
/** Injected for tests; defaults to the SSRF-guarded fetch. */
|
|
4
|
+
readonly fetchImpl?: typeof fetch;
|
|
5
|
+
}
|
|
6
|
+
export declare class FirstPartySiteFetcher implements SiteFetcher {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options?: FirstPartySiteFetcherOptions);
|
|
9
|
+
fetchSite(request: SiteCrawlRequest): Promise<readonly CrawlPage[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=first-party.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-party.d.ts","sourceRoot":"","sources":["../src/first-party.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO3E,MAAM,WAAW,4BAA4B;IAC3C,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,qBAAa,qBAAsB,YAAW,WAAW;;gBAG3C,OAAO,GAAE,4BAAiC;IAMhD,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;CAkF1E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The managed first-party site fetcher (ADR 0202 amendment 2026-08-18): sitemap-first discovery,
|
|
3
|
+
* an include-contained same-origin link walk, robots.txt, and bounded, deterministic output.
|
|
4
|
+
*
|
|
5
|
+
* Egress is SSRF-guarded in layers: the default fetch path is `guardedFetch` from
|
|
6
|
+
* `@noodle-borg/connector-http` (socket-level DNS pinning to public unicast addresses, ADR 0026),
|
|
7
|
+
* and this fetcher additionally enforces HTTPS-only, rejects literal-IP origins (no DNS step means
|
|
8
|
+
* no pinning), keeps every fetched URL on the declared origin, and never follows redirects
|
|
9
|
+
* (a moved page is indexed at its new URL when discovery finds it there).
|
|
10
|
+
*/
|
|
11
|
+
import { guardedFetch } from '@noodle-borg/connector-http';
|
|
12
|
+
import { pathMatches } from '@noodle-borg/knowledge';
|
|
13
|
+
import { extractPageContent } from './html-text.js';
|
|
14
|
+
import { parseOrigin, safeUrl } from './origin.js';
|
|
15
|
+
import { parseRobots } from './robots.js';
|
|
16
|
+
import { parseSitemapLocations } from './sitemap.js';
|
|
17
|
+
const ALLOW_ALL = { isAllowed: () => true, sitemaps: [] };
|
|
18
|
+
const LINK = /<a\s[^>]*?href\s*=\s*["']([^"'#]+)["']/gi;
|
|
19
|
+
export class FirstPartySiteFetcher {
|
|
20
|
+
#fetch;
|
|
21
|
+
constructor(options = {}) {
|
|
22
|
+
this.#fetch =
|
|
23
|
+
options.fetchImpl ??
|
|
24
|
+
((url, init) => guardedFetch(new URL(String(url)), init));
|
|
25
|
+
}
|
|
26
|
+
async fetchSite(request) {
|
|
27
|
+
const origin = parseOrigin(request.origin);
|
|
28
|
+
const robots = await this.#robots(origin);
|
|
29
|
+
const indexable = (url) => url.origin === origin.origin &&
|
|
30
|
+
robots.isAllowed(url.pathname) &&
|
|
31
|
+
request.include.some((glob) => pathMatches(url.pathname, glob));
|
|
32
|
+
const queue = new Set();
|
|
33
|
+
for (const location of await this.#sitemapLocations(origin, robots)) {
|
|
34
|
+
const url = safeUrl(location);
|
|
35
|
+
if (url !== undefined && indexable(url))
|
|
36
|
+
queue.add(url.origin + url.pathname);
|
|
37
|
+
}
|
|
38
|
+
const pages = [];
|
|
39
|
+
const visited = new Set();
|
|
40
|
+
// The root is fetched for discovery even when it is not itself indexable.
|
|
41
|
+
const discovery = [`${origin.origin}/`];
|
|
42
|
+
for (;;) {
|
|
43
|
+
const next = [...queue].filter((url) => !visited.has(url)).sort()[0] ??
|
|
44
|
+
discovery.find((url) => !visited.has(url));
|
|
45
|
+
if (next === undefined || pages.length >= request.maxPages)
|
|
46
|
+
break;
|
|
47
|
+
visited.add(next);
|
|
48
|
+
const fetched = await this.#page(next, request.maxPageBytes);
|
|
49
|
+
if (fetched === undefined)
|
|
50
|
+
continue;
|
|
51
|
+
for (const href of fetched.html.matchAll(LINK)) {
|
|
52
|
+
const linked = safeUrl(href[1] ?? '', next);
|
|
53
|
+
if (linked !== undefined && indexable(linked))
|
|
54
|
+
queue.add(linked.origin + linked.pathname);
|
|
55
|
+
}
|
|
56
|
+
if (indexable(new URL(next)) && fetched.text !== '') {
|
|
57
|
+
pages.push({
|
|
58
|
+
url: next,
|
|
59
|
+
title: fetched.title === '' ? next : fetched.title,
|
|
60
|
+
text: fetched.text,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return pages.sort((a, b) => a.url.localeCompare(b.url));
|
|
65
|
+
}
|
|
66
|
+
async #robots(origin) {
|
|
67
|
+
try {
|
|
68
|
+
const response = await this.#fetch(`${origin.origin}/robots.txt`);
|
|
69
|
+
if (response.status !== 200)
|
|
70
|
+
return ALLOW_ALL;
|
|
71
|
+
return parseRobots(await response.text());
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return ALLOW_ALL;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async #sitemapLocations(origin, robots) {
|
|
78
|
+
const sitemapUrls = (robots.sitemaps.length > 0 ? robots.sitemaps : [`${origin.origin}/sitemap.xml`]).filter((url) => safeUrl(url)?.origin === origin.origin);
|
|
79
|
+
const locations = [];
|
|
80
|
+
for (const sitemapUrl of sitemapUrls) {
|
|
81
|
+
try {
|
|
82
|
+
const response = await this.#fetch(sitemapUrl);
|
|
83
|
+
if (response.status !== 200)
|
|
84
|
+
continue;
|
|
85
|
+
locations.push(...parseSitemapLocations(await response.text()));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// A missing or failing sitemap is not an error; the link walk still discovers pages.
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return locations;
|
|
92
|
+
}
|
|
93
|
+
async #page(url, maxPageBytes) {
|
|
94
|
+
try {
|
|
95
|
+
const response = await this.#fetch(url, { redirect: 'manual' });
|
|
96
|
+
if (response.status !== 200)
|
|
97
|
+
return undefined;
|
|
98
|
+
const bytes = await response.arrayBuffer();
|
|
99
|
+
if (bytes.byteLength > maxPageBytes)
|
|
100
|
+
return undefined;
|
|
101
|
+
return extractPageContent(response.headers.get('content-type') ?? '', bytes);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=first-party.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-party.js","sourceRoot":"","sources":["../src/first-party.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deliberately small HTML→text extraction for a lexical index: strip non-content blocks and
|
|
3
|
+
* markup, decode the common entities, collapse whitespace. Fetched pages are untrusted input —
|
|
4
|
+
* this reduces them to bounded plain text and nothing here evaluates or resolves anything.
|
|
5
|
+
*/
|
|
6
|
+
export declare function extractHtmlText(html: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* The content-extraction seam: (content type, bytes) → indexable `{ html, title, text }`, or
|
|
9
|
+
* `undefined` for media we cannot yet extract. Future formats — PDF is the named next candidate
|
|
10
|
+
* (ADR 0202 deferred triggers) — become one new case here; everything downstream (sealing,
|
|
11
|
+
* revisions, indexing, fusion, citations) is format-agnostic.
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractPageContent(contentType: string, bytes: ArrayBuffer): {
|
|
14
|
+
html: string;
|
|
15
|
+
title: string;
|
|
16
|
+
text: string;
|
|
17
|
+
} | undefined;
|
|
18
|
+
export declare function extractHtmlTitle(html: string): string;
|
|
19
|
+
//# sourceMappingURL=html-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-text.d.ts","sourceRoot":"","sources":["../src/html-text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgCH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAI3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYrD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deliberately small HTML→text extraction for a lexical index: strip non-content blocks and
|
|
3
|
+
* markup, decode the common entities, collapse whitespace. Fetched pages are untrusted input —
|
|
4
|
+
* this reduces them to bounded plain text and nothing here evaluates or resolves anything.
|
|
5
|
+
*/
|
|
6
|
+
const NON_CONTENT_BLOCKS = /<(script|style|noscript|template|svg)\b[\s\S]*?<\/\1\s*>/gi;
|
|
7
|
+
const BLOCK_BREAK = /<\/?(p|div|li|ul|ol|table|tr|td|th|h[1-6]|br|hr|section|article|header|footer|nav|blockquote|pre)\b[^>]*>/gi;
|
|
8
|
+
const NAMED_ENTITIES = {
|
|
9
|
+
amp: '&',
|
|
10
|
+
lt: '<',
|
|
11
|
+
gt: '>',
|
|
12
|
+
quot: '"',
|
|
13
|
+
apos: "'",
|
|
14
|
+
nbsp: ' ',
|
|
15
|
+
mdash: '—',
|
|
16
|
+
ndash: '–',
|
|
17
|
+
hellip: '…',
|
|
18
|
+
rsquo: '’',
|
|
19
|
+
lsquo: '‘',
|
|
20
|
+
rdquo: '”',
|
|
21
|
+
ldquo: '“',
|
|
22
|
+
copy: '©',
|
|
23
|
+
};
|
|
24
|
+
function decodeEntities(text) {
|
|
25
|
+
return text
|
|
26
|
+
.replace(/&#x([0-9a-f]+);/gi, (_, hex) => String.fromCodePoint(Number.parseInt(hex, 16)))
|
|
27
|
+
.replace(/&#(\d+);/g, (_, dec) => String.fromCodePoint(Number.parseInt(dec, 10)))
|
|
28
|
+
.replace(/&([a-z]+);/gi, (match, name) => NAMED_ENTITIES[name.toLowerCase()] ?? match);
|
|
29
|
+
}
|
|
30
|
+
export function extractHtmlText(html) {
|
|
31
|
+
const withoutBlocks = html.replace(NON_CONTENT_BLOCKS, ' ');
|
|
32
|
+
const withBreaks = withoutBlocks.replace(BLOCK_BREAK, ' ');
|
|
33
|
+
const withoutTags = withBreaks.replace(/<[^>]+>/g, '');
|
|
34
|
+
return decodeEntities(withoutTags).replace(/\s+/g, ' ').trim();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The content-extraction seam: (content type, bytes) → indexable `{ html, title, text }`, or
|
|
38
|
+
* `undefined` for media we cannot yet extract. Future formats — PDF is the named next candidate
|
|
39
|
+
* (ADR 0202 deferred triggers) — become one new case here; everything downstream (sealing,
|
|
40
|
+
* revisions, indexing, fusion, citations) is format-agnostic.
|
|
41
|
+
*/
|
|
42
|
+
export function extractPageContent(contentType, bytes) {
|
|
43
|
+
if (!contentType.startsWith('text/html'))
|
|
44
|
+
return undefined;
|
|
45
|
+
const html = new TextDecoder().decode(bytes);
|
|
46
|
+
return { html, title: extractHtmlTitle(html), text: extractHtmlText(html) };
|
|
47
|
+
}
|
|
48
|
+
export function extractHtmlTitle(html) {
|
|
49
|
+
const title = /<title[^>]*>([\s\S]*?)<\/title\s*>/i.exec(html)?.[1];
|
|
50
|
+
if (title !== undefined && title.trim() !== '')
|
|
51
|
+
return decodeEntities(title).replace(/\s+/g, ' ').trim();
|
|
52
|
+
const heading = /<h1[^>]*>([\s\S]*?)<\/h1\s*>/i.exec(html)?.[1];
|
|
53
|
+
if (heading !== undefined) {
|
|
54
|
+
const text = decodeEntities(heading.replace(/<[^>]+>/g, ''))
|
|
55
|
+
.replace(/\s+/g, ' ')
|
|
56
|
+
.trim();
|
|
57
|
+
if (text !== '')
|
|
58
|
+
return text;
|
|
59
|
+
}
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=html-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-text.js","sourceRoot":"","sources":["../src/html-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FirecrawlSiteFetcher, type FirecrawlSiteFetcherOptions } from './firecrawl.js';
|
|
2
|
+
export { FirstPartySiteFetcher, type FirstPartySiteFetcherOptions } from './first-party.js';
|
|
3
|
+
export type { CrawlPage, SiteCrawlRequest, SiteFetcher } from './ports.js';
|
|
4
|
+
export { TavilySiteFetcher, type TavilySiteFetcherOptions } from './tavily.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAoC,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAqC,MAAM,kBAAkB,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAiC,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAe/C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAOpE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Shared origin/URL validation for every fetcher (managed and BYO). */
|
|
2
|
+
import { isIP } from 'node:net';
|
|
3
|
+
import { KnowledgeError } from '@noodle-borg/knowledge';
|
|
4
|
+
export function parseOrigin(origin) {
|
|
5
|
+
let url;
|
|
6
|
+
try {
|
|
7
|
+
url = new URL(origin);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new KnowledgeError('request', `site origin ${origin} is not a valid URL`);
|
|
11
|
+
}
|
|
12
|
+
if (url.protocol !== 'https:') {
|
|
13
|
+
throw new KnowledgeError('request', 'site origin must use https');
|
|
14
|
+
}
|
|
15
|
+
if (isIP(url.hostname.replace(/^\[|\]$/g, '')) !== 0) {
|
|
16
|
+
// A literal-IP host has no DNS step, which would bypass the socket-level SSRF guard.
|
|
17
|
+
throw new KnowledgeError('request', 'site origin must be a DNS hostname, not an IP address');
|
|
18
|
+
}
|
|
19
|
+
return url;
|
|
20
|
+
}
|
|
21
|
+
export function safeUrl(href, base) {
|
|
22
|
+
try {
|
|
23
|
+
const url = base === undefined ? new URL(href) : new URL(href, base);
|
|
24
|
+
return url.protocol === 'https:' ? url : undefined;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,eAAe,MAAM,qBAAqB,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,qFAAqF;QACrF,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,uDAAuD,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAa;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral site crawling port (ADR 0202 amendment 2026-08-18): one bounded call in, a
|
|
3
|
+
* deterministic ordered list of plain-text pages out. Every fetcher — the managed first-party
|
|
4
|
+
* crawler and the BYO provider adapters — satisfies this contract and its shared tests; provider
|
|
5
|
+
* concepts (job ids, credits, raw payloads) never cross it.
|
|
6
|
+
*/
|
|
7
|
+
export interface SiteCrawlRequest {
|
|
8
|
+
/** Exact HTTPS origin, no path. Literal-IP hosts are rejected (they bypass the DNS SSRF guard). */
|
|
9
|
+
readonly origin: string;
|
|
10
|
+
/** Path globs a page must match to be indexed; discovery may touch only these plus the root. */
|
|
11
|
+
readonly include: readonly string[];
|
|
12
|
+
readonly maxPages: number;
|
|
13
|
+
readonly maxPageBytes: number;
|
|
14
|
+
}
|
|
15
|
+
export interface CrawlPage {
|
|
16
|
+
readonly url: string;
|
|
17
|
+
readonly title: string;
|
|
18
|
+
readonly text: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SiteFetcher {
|
|
21
|
+
/**
|
|
22
|
+
* Crawl the site within the request bounds. Returns pages sorted by URL; individual page
|
|
23
|
+
* failures are skipped, a total provider failure throws a `KnowledgeError` with an
|
|
24
|
+
* attributable layer and no content.
|
|
25
|
+
*/
|
|
26
|
+
fetchSite(request: SiteCrawlRequest): Promise<readonly CrawlPage[]>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,mGAAmG;IACnG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;CACrE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral site crawling port (ADR 0202 amendment 2026-08-18): one bounded call in, a
|
|
3
|
+
* deterministic ordered list of plain-text pages out. Every fetcher — the managed first-party
|
|
4
|
+
* crawler and the BYO provider adapters — satisfies this contract and its shared tests; provider
|
|
5
|
+
* concepts (job ids, credits, raw payloads) never cross it.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal robots.txt evaluation for the managed crawler: `*` user-agent groups only, with the
|
|
3
|
+
* de-facto longest-match precedence between Allow and Disallow (Allow wins an exact-length tie),
|
|
4
|
+
* plus global `Sitemap:` collection. Deliberately dependency-free; if richer semantics are ever
|
|
5
|
+
* needed, verify the dependency license first (root rules).
|
|
6
|
+
*/
|
|
7
|
+
export interface Robots {
|
|
8
|
+
isAllowed(path: string): boolean;
|
|
9
|
+
readonly sitemaps: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function parseRobots(text: string): Robots;
|
|
12
|
+
//# sourceMappingURL=robots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmDhD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal robots.txt evaluation for the managed crawler: `*` user-agent groups only, with the
|
|
3
|
+
* de-facto longest-match precedence between Allow and Disallow (Allow wins an exact-length tie),
|
|
4
|
+
* plus global `Sitemap:` collection. Deliberately dependency-free; if richer semantics are ever
|
|
5
|
+
* needed, verify the dependency license first (root rules).
|
|
6
|
+
*/
|
|
7
|
+
export function parseRobots(text) {
|
|
8
|
+
const rules = [];
|
|
9
|
+
const sitemaps = [];
|
|
10
|
+
let inStarGroup = false;
|
|
11
|
+
let groupHasAgents = false;
|
|
12
|
+
for (const rawLine of text.split(/\r?\n/)) {
|
|
13
|
+
const line = rawLine.replace(/#.*$/, '').trim();
|
|
14
|
+
if (line === '')
|
|
15
|
+
continue;
|
|
16
|
+
const separator = line.indexOf(':');
|
|
17
|
+
if (separator === -1)
|
|
18
|
+
continue;
|
|
19
|
+
const field = line.slice(0, separator).trim().toLowerCase();
|
|
20
|
+
const value = line.slice(separator + 1).trim();
|
|
21
|
+
if (field === 'sitemap') {
|
|
22
|
+
if (value !== '')
|
|
23
|
+
sitemaps.push(value);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (field === 'user-agent') {
|
|
27
|
+
// Consecutive user-agent lines share one group; a rule line closes the agent list, so a
|
|
28
|
+
// user-agent line after rules starts a fresh group.
|
|
29
|
+
if (groupHasAgents) {
|
|
30
|
+
inStarGroup = false;
|
|
31
|
+
groupHasAgents = false;
|
|
32
|
+
}
|
|
33
|
+
if (value === '*')
|
|
34
|
+
inStarGroup = true;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (field === 'allow' || field === 'disallow') {
|
|
38
|
+
groupHasAgents = true;
|
|
39
|
+
if (!inStarGroup)
|
|
40
|
+
continue;
|
|
41
|
+
// A bare "Disallow:" means allow-all per the de-facto standard.
|
|
42
|
+
if (value === '')
|
|
43
|
+
continue;
|
|
44
|
+
rules.push({ allow: field === 'allow', path: value });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
sitemaps,
|
|
49
|
+
isAllowed(path) {
|
|
50
|
+
let best;
|
|
51
|
+
for (const rule of rules) {
|
|
52
|
+
if (!path.startsWith(rule.path))
|
|
53
|
+
continue;
|
|
54
|
+
if (best === undefined ||
|
|
55
|
+
rule.path.length > best.path.length ||
|
|
56
|
+
(rule.path.length === best.path.length && rule.allow)) {
|
|
57
|
+
best = rule;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return best?.allow ?? true;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=robots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,SAAS;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,KAAK,KAAK,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3B,wFAAwF;YACxF,oDAAoD;YACpD,IAAI,cAAc,EAAE,CAAC;gBACnB,WAAW,GAAG,KAAK,CAAC;gBACpB,cAAc,GAAG,KAAK,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,KAAK,GAAG;gBAAE,WAAW,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9C,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,WAAW;gBAAE,SAAS;YAC3B,gEAAgE;YAChE,IAAI,KAAK,KAAK,EAAE;gBAAE,SAAS;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,SAAS,CAAC,IAAY;YACpB,IAAI,IAA4B,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1C,IACE,IAAI,KAAK,SAAS;oBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;oBACnC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,EACrD,CAAC;oBACD,IAAI,GAAG,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAOpE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Bounded `<loc>` extraction from sitemap XML — locations only, nothing else is read. */
|
|
2
|
+
export function parseSitemapLocations(xml) {
|
|
3
|
+
const locations = [];
|
|
4
|
+
for (const match of xml.matchAll(/<loc>\s*([^<]+?)\s*<\/loc>/gi)) {
|
|
5
|
+
const location = match[1];
|
|
6
|
+
if (location !== undefined && location !== '')
|
|
7
|
+
locations.push(location);
|
|
8
|
+
}
|
|
9
|
+
return locations;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=sitemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CrawlPage, SiteCrawlRequest, SiteFetcher } from './ports.js';
|
|
2
|
+
export interface TavilySiteFetcherOptions {
|
|
3
|
+
readonly apiKey: string;
|
|
4
|
+
readonly fetchImpl?: typeof fetch;
|
|
5
|
+
}
|
|
6
|
+
export declare class TavilySiteFetcher implements SiteFetcher {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options: TavilySiteFetcherOptions);
|
|
9
|
+
fetchSite(request: SiteCrawlRequest): Promise<readonly CrawlPage[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=tavily.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tavily.d.ts","sourceRoot":"","sources":["../src/tavily.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI3E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED,qBAAa,iBAAkB,YAAW,WAAW;;gBAIvC,OAAO,EAAE,wBAAwB;IAKvC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC;CAqC1E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BYO Tavily fetcher (ADR 0202 amendment 2026-08-18): the customer's own Tavily account crawls
|
|
3
|
+
* the site through the synchronous hosted REST API. Wire shape transcribed from the official API
|
|
4
|
+
* reference 2026-08-18: `POST https://api.tavily.com/crawl` with Bearer auth and
|
|
5
|
+
* `{ url, limit, allow_external, format, extract_depth }` → `{ results: [{ url, raw_content }] }`.
|
|
6
|
+
* Crawled pages carry no separate title field, so the URL stands in. Errors are attributable and
|
|
7
|
+
* content-free — provider bodies and the API key never cross the port.
|
|
8
|
+
*/
|
|
9
|
+
import { KnowledgeError } from '@noodle-borg/knowledge';
|
|
10
|
+
import { boundPages } from './bounds.js';
|
|
11
|
+
import { parseOrigin } from './origin.js';
|
|
12
|
+
const API = 'https://api.tavily.com/crawl';
|
|
13
|
+
export class TavilySiteFetcher {
|
|
14
|
+
#apiKey;
|
|
15
|
+
#fetch;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.#apiKey = options.apiKey;
|
|
18
|
+
this.#fetch = options.fetchImpl ?? fetch;
|
|
19
|
+
}
|
|
20
|
+
async fetchSite(request) {
|
|
21
|
+
const origin = parseOrigin(request.origin);
|
|
22
|
+
let response;
|
|
23
|
+
try {
|
|
24
|
+
response = await this.#fetch(API, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
authorization: `Bearer ${this.#apiKey}`,
|
|
28
|
+
'content-type': 'application/json',
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({
|
|
31
|
+
url: origin.origin,
|
|
32
|
+
limit: request.maxPages,
|
|
33
|
+
allow_external: false,
|
|
34
|
+
format: 'text',
|
|
35
|
+
extract_depth: 'basic',
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new KnowledgeError('provider', 'tavily crawl request failed');
|
|
41
|
+
}
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
throw new KnowledgeError('provider', `tavily crawl returned HTTP ${response.status}`);
|
|
44
|
+
}
|
|
45
|
+
const body = (await response.json().catch(() => ({})));
|
|
46
|
+
return boundPages((body.results ?? []).map((result) => ({
|
|
47
|
+
url: result.url ?? '',
|
|
48
|
+
title: '',
|
|
49
|
+
text: result.raw_content ?? '',
|
|
50
|
+
})), request, origin);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=tavily.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tavily.js","sourceRoot":"","sources":["../src/tavily.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,GAAG,GAAG,8BAA8B,CAAC;AAO3C,MAAM,OAAO,iBAAiB;IACnB,OAAO,CAAS;IAChB,MAAM,CAAe;IAE9B,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAyB;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;oBACvC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,EAAE,MAAM,CAAC,MAAM;oBAClB,KAAK,EAAE,OAAO,CAAC,QAAQ;oBACvB,cAAc,EAAE,KAAK;oBACrB,MAAM,EAAE,MAAM;oBACd,aAAa,EAAE,OAAO;iBACvB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAEpD,CAAC;QACF,OAAO,UAAU,CACf,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;YACrB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;SAC/B,CAAC,CAAC,EACH,OAAO,EACP,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@noodle-borg/knowledge-crawl",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=24"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -p tsconfig.json",
|
|
23
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@noodle-borg/connector-http": "0.0.0",
|
|
27
|
+
"@noodle-borg/knowledge": "0.0.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^24.13.1"
|
|
31
|
+
}
|
|
32
|
+
}
|