@bevel-software/platform-core-backend 0.22.0 → 0.23.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/core/core-ports.d.ts +11 -1
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts +3 -3
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +30 -11
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +9 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +112 -23
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +34 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +89 -13
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +0 -12
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +11 -13
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +42 -12
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +67 -10
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +214 -35
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +13 -15
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/auth/account-admission.d.ts +58 -7
- package/dist/modules/auth/account-admission.d.ts.map +1 -1
- package/dist/modules/auth/account-admission.js +44 -1
- package/dist/modules/auth/account-admission.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +1 -1
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +61 -5
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.middleware.d.ts +1 -1
- package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
- package/dist/modules/auth/auth.middleware.js +18 -7
- package/dist/modules/auth/auth.middleware.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +8 -0
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +70 -2
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +176 -7
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +7 -2
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +41 -24
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +35 -27
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.d.ts.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +12 -2
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.d.ts +11 -16
- package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +79 -0
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts +2 -2
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +14 -3
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
- package/dist/modules/kb-sync/sync-auth.d.ts +3 -1
- package/dist/modules/kb-sync/sync-auth.d.ts.map +1 -1
- package/dist/modules/kb-sync/sync-auth.js +1 -1
- package/dist/modules/kb-sync/sync-auth.js.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +21 -6
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +3 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +8 -3
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +52 -1
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +207 -19
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/skills.contract.d.ts +90 -18
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.contract.js +4 -1
- package/dist/modules/skills/skills.contract.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +98 -9
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +239 -37
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +7 -0
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +71 -7
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +4 -2
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.d.ts +3 -3
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +16 -7
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +34 -12
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts +2 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +25 -4
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +3 -2
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-helpers/validate-token.js +1 -1
- package/dist/modules/tool-helpers/validate-token.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +98 -0
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/workflow/agent-tools/change-request-summary.js +81 -0
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +75 -35
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +24 -0
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +30 -0
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +69 -0
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +153 -2
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +38 -0
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +55 -0
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/workflow-hooks.d.ts +54 -32
- package/dist/modules/workflow/workflow-hooks.d.ts.map +1 -1
- package/dist/modules/workflow/workflow-hooks.js +16 -1
- package/dist/modules/workflow/workflow-hooks.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +60 -6
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +111 -4
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/agent-access.gate.d.ts +94 -0
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -0
- package/dist/modules/workspace/agent-access.gate.js +123 -0
- package/dist/modules/workspace/agent-access.gate.js.map +1 -0
- package/dist/modules/workspace/routine-write-policy.d.ts +5 -6
- package/dist/modules/workspace/routine-write-policy.d.ts.map +1 -1
- package/dist/modules/workspace/routine-write-policy.js +5 -6
- package/dist/modules/workspace/routine-write-policy.js.map +1 -1
- package/dist/modules/workspace/session-sink.d.ts +5 -5
- package/dist/modules/workspace/set-aside-clone.d.ts +46 -0
- package/dist/modules/workspace/set-aside-clone.d.ts.map +1 -0
- package/dist/modules/workspace/set-aside-clone.js +92 -0
- package/dist/modules/workspace/set-aside-clone.js.map +1 -0
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts +59 -9
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +65 -24
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +92 -3
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +115 -5
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +255 -25
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +2 -2
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +309 -115
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/write-access/write-access.d.ts +60 -0
- package/dist/modules/write-access/write-access.d.ts.map +1 -0
- package/dist/modules/write-access/write-access.js +129 -0
- package/dist/modules/write-access/write-access.js.map +1 -0
- package/dist/shared/domain-errors.d.ts +25 -0
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +28 -0
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +20 -0
- package/dist/shared/git.contract.d.ts.map +1 -1
- package/dist/shared/git.contract.js +26 -0
- package/dist/shared/git.contract.js.map +1 -1
- package/dist/tenancy/static-tenant-source.d.ts +0 -1
- package/dist/tenancy/static-tenant-source.d.ts.map +1 -1
- package/dist/tenancy/static-tenant-source.js +0 -2
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0014_change_request_closed_reason.sql +1 -0
- package/migrations/0015_account_deactivation.sql +3 -0
- package/migrations/meta/0014_snapshot.json +2265 -0
- package/migrations/meta/0015_snapshot.json +2271 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +3 -3
- package/src/__tests__/kb-layout-config.test.ts +0 -2
- package/src/__tests__/retired-settings.test.ts +96 -0
- package/src/core/__tests__/gated-boot.test.ts +132 -0
- package/src/core/__tests__/lifecycle.test.ts +170 -1
- package/src/core/__tests__/set-aside-root-is-one-place.test.ts +63 -0
- package/src/core/core-ports.ts +11 -1
- package/src/core/create-core-server.ts +32 -14
- package/src/core/create-core-services.ts +129 -23
- package/src/core/lifecycle.ts +98 -13
- package/src/core-config.ts +13 -14
- package/src/index.ts +12 -1
- package/src/modules/access/__tests__/access-control.preview-relocation.test.ts +385 -0
- package/src/modules/access/__tests__/access-control.prospective.test.ts +94 -18
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +6 -7
- package/src/modules/access/access-control.interface.ts +43 -12
- package/src/modules/access/access-control.service.ts +234 -36
- package/src/modules/access/access.routes.ts +13 -15
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +3 -1
- package/src/modules/auth/__tests__/account-deactivation.test.ts +252 -0
- package/src/modules/auth/__tests__/account.routes.test.ts +81 -3
- package/src/modules/auth/__tests__/auth.middleware.test.ts +45 -22
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-admission.ts +78 -9
- package/src/modules/auth/account.routes.ts +63 -7
- package/src/modules/auth/auth.middleware.ts +19 -8
- package/src/modules/auth/auth.routes.ts +8 -0
- package/src/modules/auth/auth.service.ts +179 -6
- package/src/modules/auth/oidc-auth-provider.ts +7 -2
- package/src/modules/database/core-schema.ts +35 -27
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +10 -0
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +123 -0
- package/src/modules/kb-fs/branch-name.ts +14 -1
- package/src/modules/kb-fs/repo-path.ts +85 -0
- package/src/modules/kb-sync/__tests__/kb-sync.routes.test.ts +26 -1
- package/src/modules/kb-sync/kb-sync.routes.ts +14 -4
- package/src/modules/kb-sync/sync-auth.ts +2 -2
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +60 -3
- package/src/modules/mcp/__tests__/mcp.service.test.ts +68 -6
- package/src/modules/mcp/mcp-auth.middleware.ts +20 -6
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +3 -1
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +2 -1
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +16 -0
- package/src/modules/settings/__tests__/setup.routes.git-mode.test.ts +91 -58
- package/src/modules/settings/__tests__/setup.routes.github-app.test.ts +25 -8
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +14 -11
- package/src/modules/settings/__tests__/setup.routes.repository-change.test.ts +390 -0
- package/src/modules/settings/__tests__/setup.routes.test.ts +3 -0
- package/src/modules/settings/deployment-settings.service.ts +8 -3
- package/src/modules/settings/setup.routes.ts +263 -19
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +2 -1
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +218 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +229 -5
- package/src/modules/skills/skills.contract.ts +91 -18
- package/src/modules/skills/skills.service.ts +278 -41
- package/src/modules/skills/skills.tools.ts +80 -8
- package/src/modules/tool-auth/__tests__/manual-auth.middleware.test.ts +14 -1
- package/src/modules/tool-auth/external-api-key.service.ts +4 -2
- package/src/modules/tool-auth/internal-token.service.ts +3 -3
- package/src/modules/tool-auth/tool-auth.middleware.ts +34 -11
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +5 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +11 -1
- package/src/modules/tool-helpers/tool-handler.ts +24 -4
- package/src/modules/tool-helpers/tool.contract.ts +3 -2
- package/src/modules/tool-helpers/validate-token.ts +1 -1
- package/src/modules/workflow/__tests__/pending-commits.repository-replaced.test.ts +111 -0
- package/src/modules/workflow/__tests__/workflow.routes.history-read-gate.test.ts +25 -0
- package/src/modules/workflow/__tests__/workflow.service.repository-replaced.test.ts +249 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +264 -6
- package/src/modules/workflow/agent-tools/change-request-summary.ts +182 -0
- package/src/modules/workflow/agent-tools/workflow.tools.ts +86 -35
- package/src/modules/workflow/file-lock.service.ts +31 -0
- package/src/modules/workflow/git/__tests__/git.service.fileBytesAtCommit.test.ts +260 -0
- package/src/modules/workflow/git/git.service.ts +168 -0
- package/src/modules/workflow/pending-commits.service.ts +59 -1
- package/src/modules/workflow/workflow-hooks.ts +64 -26
- package/src/modules/workflow/workflow.service.ts +121 -4
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +208 -0
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +384 -0
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +2 -1
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +2 -1
- package/src/modules/workspace/__tests__/set-aside-clone.test.ts +52 -0
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +305 -0
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +2 -0
- package/src/modules/workspace/__tests__/workspace.service.forget-clone-races.test.ts +147 -0
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +326 -0
- package/src/modules/workspace/__tests__/workspace.service.test.ts +20 -9
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +2 -3
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +2 -3
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +685 -14
- package/src/modules/workspace/agent-access.gate.ts +164 -0
- package/src/modules/workspace/routine-write-policy.ts +5 -6
- package/src/modules/workspace/session-sink.ts +5 -5
- package/src/modules/workspace/set-aside-clone.ts +96 -0
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +86 -0
- package/src/modules/workspace/startup/kb-startup-runner.ts +115 -34
- package/src/modules/workspace/workspace.routes.ts +95 -3
- package/src/modules/workspace/workspace.service.ts +256 -24
- package/src/modules/workspace/workspace.tools.ts +338 -119
- package/src/modules/write-access/__tests__/write-access.test.ts +248 -0
- package/src/modules/write-access/write-access.ts +153 -0
- package/src/shared/domain-errors.ts +31 -0
- package/src/shared/git.contract.ts +27 -0
- package/src/tenancy/__tests__/static-tenant-source.test.ts +0 -1
- package/src/tenancy/static-tenant-source.ts +0 -3
- package/dist/modules/workflow/session-ontology.policy.d.ts +0 -52
- package/dist/modules/workflow/session-ontology.policy.d.ts.map +0 -1
- package/dist/modules/workflow/session-ontology.policy.js +0 -62
- package/dist/modules/workflow/session-ontology.policy.js.map +0 -1
- package/dist/modules/workflow/session-ontology.service.d.ts +0 -105
- package/dist/modules/workflow/session-ontology.service.d.ts.map +0 -1
- package/dist/modules/workflow/session-ontology.service.js +0 -147
- package/dist/modules/workflow/session-ontology.service.js.map +0 -1
- package/dist/modules/workspace/session-ontology.gate.d.ts +0 -114
- package/dist/modules/workspace/session-ontology.gate.d.ts.map +0 -1
- package/dist/modules/workspace/session-ontology.gate.js +0 -161
- package/dist/modules/workspace/session-ontology.gate.js.map +0 -1
- package/dist/shared/kb-layout.d.ts +0 -39
- package/dist/shared/kb-layout.d.ts.map +0 -1
- package/dist/shared/kb-layout.js +0 -103
- package/dist/shared/kb-layout.js.map +0 -1
- package/dist/shared/kb-layout.test.d.ts +0 -2
- package/dist/shared/kb-layout.test.d.ts.map +0 -1
- package/dist/shared/kb-layout.test.js +0 -75
- package/dist/shared/kb-layout.test.js.map +0 -1
- package/src/modules/workflow/__tests__/session-ontology.policy.test.ts +0 -62
- package/src/modules/workflow/__tests__/session-ontology.service.test.ts +0 -201
- package/src/modules/workflow/session-ontology.policy.ts +0 -70
- package/src/modules/workflow/session-ontology.service.ts +0 -183
- package/src/modules/workspace/__tests__/session-ontology.gate.test.ts +0 -239
- package/src/modules/workspace/session-ontology.gate.ts +0 -191
- package/src/shared/kb-layout.test.ts +0 -98
- package/src/shared/kb-layout.ts +0 -102
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { DEFAULT_KB_LAYOUT } from '@bevel-software/platform-shared';
|
|
3
|
-
import { ontologyOf } from './kb-layout.js';
|
|
4
|
-
|
|
5
|
-
/** `ontologyOf` under the default layout, which is what these cases are written against. */
|
|
6
|
-
const ont = (path: string, kbDirName?: string) => ontologyOf(path, DEFAULT_KB_LAYOUT, kbDirName);
|
|
7
|
-
|
|
8
|
-
describe('ontologyOf', () => {
|
|
9
|
-
it('classifies under the knowledge-base root the layout names, not the default one', () => {
|
|
10
|
-
const layout = { ...DEFAULT_KB_LAYOUT, knowledgeBaseDir: 'docs' };
|
|
11
|
-
expect(ontologyOf('docs/Product/Knowledge/Foo.md', layout)).toBe('docs/Product');
|
|
12
|
-
expect(ontologyOf('KnowledgeBase/Product/Knowledge/Foo.md', layout)).toBeNull();
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('resolves a named ontology under Knowledge', () => {
|
|
16
|
-
expect(ont('KnowledgeBase/Product/Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('resolves a named ontology under NodeTypes', () => {
|
|
20
|
-
expect(ont('KnowledgeBase/Product/NodeTypes/Process.md')).toBe('KnowledgeBase/Product');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('is space-safe in the ontology name', () => {
|
|
24
|
-
expect(ont('KnowledgeBase/IT Architecture/NodeTypes/ServiceCommitment.md')).toBe(
|
|
25
|
-
'KnowledgeBase/IT Architecture',
|
|
26
|
-
);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('treats a nested ontology directory as the full prefix before the marker', () => {
|
|
30
|
-
expect(ont('KnowledgeBase/Plugin/Sub/Knowledge/x.md')).toBe('KnowledgeBase/Plugin/Sub');
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('returns null when the marker sits directly under KnowledgeBase/', () => {
|
|
34
|
-
expect(ont('KnowledgeBase/Knowledge/Foo.md')).toBeNull();
|
|
35
|
-
expect(ont('KnowledgeBase/NodeTypes/T.md')).toBeNull();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('returns null for root-level Knowledge (not under KnowledgeBase/)', () => {
|
|
39
|
-
expect(ont('Knowledge/Foo.md')).toBeNull();
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('returns null for Data/ ontologies (deliberate session-ontology exemption)', () => {
|
|
43
|
-
// `Data/<X>` IS parsed into the graph (parser `ONTOLOGY_ROOTS`), but is
|
|
44
|
-
// intentionally NOT classified here so the session-ontology gate treats
|
|
45
|
-
// Data paths as neutral — pipeline agents read knowledge and write data
|
|
46
|
-
// in one session (owner decision 2026-07-27). See the `ontologyOf`
|
|
47
|
-
// docstring; this is not drift.
|
|
48
|
-
expect(ont('Data/Ops/Knowledge/x.md')).toBeNull();
|
|
49
|
-
expect(ont('Data/Ops/NodeTypes/Ticket.md')).toBeNull();
|
|
50
|
-
// KnowledgeBase paths still classify as before.
|
|
51
|
-
expect(ont('KnowledgeBase/Ops/Knowledge/x.md')).toBe('KnowledgeBase/Ops');
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('returns null for Plugins and root config (neutral)', () => {
|
|
55
|
-
expect(ont('Plugins/some-skill/SKILL.md')).toBeNull();
|
|
56
|
-
expect(ont('access.md')).toBeNull();
|
|
57
|
-
expect(ont('roles.yaml')).toBeNull();
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('returns null for an ontology path with no marker segment', () => {
|
|
61
|
-
expect(ont('KnowledgeBase/Product/Uploads/diagram.png')).toBeNull();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('does not match substring lookalikes (segment equality)', () => {
|
|
65
|
-
expect(ont('KnowledgeBase/Product/Knowledge-notes.md')).toBeNull();
|
|
66
|
-
expect(ont('KnowledgeBase/Product/KnowledgeBase/x.md')).toBeNull();
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('strips a kbDirName prefix (normalized and un-normalized)', () => {
|
|
70
|
-
expect(ont('knowledge-base/KnowledgeBase/Product/Knowledge/Foo.md', 'knowledge-base')).toBe(
|
|
71
|
-
'KnowledgeBase/Product',
|
|
72
|
-
);
|
|
73
|
-
expect(ont('./knowledge-base/KnowledgeBase/GTM/NodeTypes/T.md', 'knowledge-base/')).toBe(
|
|
74
|
-
'KnowledgeBase/GTM',
|
|
75
|
-
);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('normalizes backslashes and leading/trailing slashes', () => {
|
|
79
|
-
expect(ont('/KnowledgeBase/Product/Knowledge/Foo.md/')).toBe('KnowledgeBase/Product');
|
|
80
|
-
expect(ont('KnowledgeBase\\Product\\Knowledge\\Foo.md')).toBe('KnowledgeBase/Product');
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('canonicalizes inner . and .. segments to the same ontology', () => {
|
|
84
|
-
expect(ont('KnowledgeBase/Product/./Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
85
|
-
expect(ont('KnowledgeBase/Product/Sub/../Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
86
|
-
expect(ont('KnowledgeBase/Platform/../Product/Knowledge/Foo.md')).toBe('KnowledgeBase/Product');
|
|
87
|
-
// `..` also collapses inside the stripped kbDirName prefix.
|
|
88
|
-
expect(ont('knowledge-base/x/../KnowledgeBase/GTM/NodeTypes/T.md', 'knowledge-base')).toBe(
|
|
89
|
-
'KnowledgeBase/GTM',
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('returns null for empty or root paths', () => {
|
|
94
|
-
expect(ont('')).toBeNull();
|
|
95
|
-
expect(ont('KnowledgeBase')).toBeNull();
|
|
96
|
-
expect(ont('KnowledgeBase/Product')).toBeNull();
|
|
97
|
-
});
|
|
98
|
-
});
|
package/src/shared/kb-layout.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { ONTOLOGY_MARKERS, type KbLayout, type Ontology } from '@bevel-software/platform-shared';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Resolve which named ontology a KB path belongs to — the backend-side
|
|
5
|
-
* implementation of the layout contract whose constants/types live in
|
|
6
|
-
* `@bevel-software/platform-shared` (`kb-layout.ts`). It is backend-only and consumed by
|
|
7
|
-
* more than one domain module (the `workspace` read gate and the `workflow`
|
|
8
|
-
* session-ontology service), so it lives in `backend/src/shared` rather than in
|
|
9
|
-
* any single module — importable by both modules without crossing a module's
|
|
10
|
-
* internal boundary. Note it does NOT mirror the kb-graph parser one-to-one:
|
|
11
|
-
* see the `ontologyOf` docstring for the deliberate `Data/` exemption.
|
|
12
|
-
*
|
|
13
|
-
* Pure string handling — no IO, no DB.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Split a path into repo-root-relative POSIX segments, dropping `./`,
|
|
18
|
-
* leading/trailing slashes, and an optional `kbDirName` prefix (the on-disk
|
|
19
|
-
* clone folder, e.g. `knowledge-base/`). Pure string handling — no IO.
|
|
20
|
-
*/
|
|
21
|
-
function toSegments(path: string, kbDirName?: string): string[] {
|
|
22
|
-
// Collapse to canonical segments: backslashes → `/`, drop empty and `.`
|
|
23
|
-
// segments, resolve `..` against the accumulated prefix. Canonicalizing the
|
|
24
|
-
// inner segments (not just the ends) means equivalent paths like
|
|
25
|
-
// `KnowledgeBase/Product/../Product/Knowledge/x.md` and
|
|
26
|
-
// `KnowledgeBase/Product/Knowledge/x.md` resolve to the same ontology.
|
|
27
|
-
const collapse = (s: string): string[] => {
|
|
28
|
-
const out: string[] = [];
|
|
29
|
-
for (const seg of s.replace(/\\/g, '/').split('/')) {
|
|
30
|
-
if (seg === '' || seg === '.') continue;
|
|
31
|
-
if (seg === '..') {
|
|
32
|
-
// Pop a real segment; a leading `..` (nothing to pop) is kept so it can
|
|
33
|
-
// never alias into a sibling ontology.
|
|
34
|
-
if (out.length > 0 && out[out.length - 1] !== '..') out.pop();
|
|
35
|
-
else out.push('..');
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
out.push(seg);
|
|
39
|
-
}
|
|
40
|
-
return out;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
let segs = collapse(path);
|
|
44
|
-
const prefixSegs = kbDirName ? collapse(kbDirName) : [];
|
|
45
|
-
if (prefixSegs.length > 0 && prefixSegs.every((s, i) => segs[i] === s)) {
|
|
46
|
-
segs = segs.slice(prefixSegs.length);
|
|
47
|
-
}
|
|
48
|
-
return segs;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Resolve the named ontology a KB path belongs to, or `null` (neutral) when it
|
|
53
|
-
* belongs to none.
|
|
54
|
-
*
|
|
55
|
-
* Classification is deliberately NARROWER than the kb-graph parser: the parser
|
|
56
|
-
* discovers ontologies under every `ONTOLOGY_ROOTS` entry (`KnowledgeBase/`
|
|
57
|
-
* AND `Data/`), but this function classifies ONLY `KnowledgeBase/` paths.
|
|
58
|
-
* `Data/` ontologies are parsed into the graph yet are intentionally NOT
|
|
59
|
-
* classified here, so the session-ontology gate treats `Data/` paths as
|
|
60
|
-
* neutral — pipeline agents read knowledge and write data records in one
|
|
61
|
-
* session (owner decision 2026-07-27; the cross-ontology boundary mechanism
|
|
62
|
-
* itself may be redesigned). This divergence is on purpose, not drift.
|
|
63
|
-
*
|
|
64
|
-
* Within `KnowledgeBase/`, the shape matches the parser (`parser.ts`
|
|
65
|
-
* `walkForOntologies`): an ontology is the directory that holds both a
|
|
66
|
-
* `Knowledge/` and a `NodeTypes/` subfolder. That directory can sit at ANY
|
|
67
|
-
* depth under `KnowledgeBase/`, so the ontology id is the path PREFIX up to
|
|
68
|
-
* (but excluding) the first `Knowledge/` or `NodeTypes/` marker segment — as
|
|
69
|
-
* long as that prefix is inside `KnowledgeBase/` and is not `KnowledgeBase/`
|
|
70
|
-
* itself.
|
|
71
|
-
*
|
|
72
|
-
* KnowledgeBase/Product/Knowledge/Foo.md → "KnowledgeBase/Product"
|
|
73
|
-
* KnowledgeBase/IT Architecture/NodeTypes/T.md → "KnowledgeBase/IT Architecture"
|
|
74
|
-
* KnowledgeBase/Group/Sub/Knowledge/x.md → "KnowledgeBase/Group/Sub"
|
|
75
|
-
* KnowledgeBase/Knowledge/Foo.md → null (marker directly under KB root)
|
|
76
|
-
* Knowledge/Foo.md, Skills/x.md, access.md → null (not under KnowledgeBase/)
|
|
77
|
-
* Data/Ops/Knowledge/x.md → null (Data/ is exempt — see above)
|
|
78
|
-
* KnowledgeBase/Product/Uploads/x.png → null (no marker segment)
|
|
79
|
-
*
|
|
80
|
-
* Uses exact segment equality (never substring), so `KnowledgeBase/` and
|
|
81
|
-
* `Knowledge-notes.md` are never treated as markers; space-safe; pure (no IO).
|
|
82
|
-
*
|
|
83
|
-
* @param path repo-root-relative POSIX path (may carry a `kbDirName` prefix)
|
|
84
|
-
* @param layout the knowledge base's layout — names its `KnowledgeBase/` root
|
|
85
|
-
* @param kbDirName optional on-disk clone folder prefix to strip first
|
|
86
|
-
*/
|
|
87
|
-
export function ontologyOf(path: string, layout: KbLayout, kbDirName?: string): Ontology {
|
|
88
|
-
const segs = toSegments(path, kbDirName);
|
|
89
|
-
// Must live under the dedicated KnowledgeBase/ container, with at least one
|
|
90
|
-
// ontology-name segment and a marker after it (so length >= 3).
|
|
91
|
-
if (segs.length < 3 || segs[0] !== layout.knowledgeBaseDir) return null;
|
|
92
|
-
// The ontology id is the prefix before the first marker segment. Require at
|
|
93
|
-
// least one name segment between `KnowledgeBase/` and the marker, so a marker
|
|
94
|
-
// sitting directly under `KnowledgeBase/` (`KnowledgeBase/Knowledge/...`) is
|
|
95
|
-
// neutral, matching the parser (it only discovers ontologies one level down).
|
|
96
|
-
for (let i = 1; i < segs.length; i++) {
|
|
97
|
-
if (ONTOLOGY_MARKERS.has(segs[i])) {
|
|
98
|
-
return i >= 2 ? segs.slice(0, i).join('/') : null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return null;
|
|
102
|
-
}
|