@bevel-software/platform-core-backend 0.4.1 → 0.5.1
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/THIRD-PARTY-NOTICES.md +6118 -0
- package/dist/core/core-ports.d.ts +15 -0
- 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.map +1 -1
- package/dist/core/create-core-server.js +40 -6
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +17 -1
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +153 -29
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core-config.d.ts +70 -21
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +134 -58
- package/dist/core-config.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +6 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +74 -5
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +116 -15
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +93 -0
- package/dist/modules/access/access-declarations.d.ts.map +1 -0
- package/dist/modules/access/access-declarations.js +168 -0
- package/dist/modules/access/access-declarations.js.map +1 -0
- package/dist/modules/access/access-mutation.service.js +4 -4
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-splice.d.ts +16 -1
- package/dist/modules/access/access-splice.d.ts.map +1 -1
- package/dist/modules/access/access-splice.js +40 -21
- package/dist/modules/access/access-splice.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +51 -0
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/creator-access.d.ts +8 -0
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +21 -2
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts +1 -1
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.service.js +3 -2
- package/dist/modules/admin/admin-access.service.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +50 -1
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +39 -10
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +38 -16
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +124 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +45 -0
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/groups/group-provision.service.d.ts +130 -0
- package/dist/modules/groups/group-provision.service.d.ts.map +1 -0
- package/dist/modules/groups/group-provision.service.js +288 -0
- package/dist/modules/groups/group-provision.service.js.map +1 -0
- package/dist/modules/groups/groups.contract.d.ts +106 -0
- package/dist/modules/groups/groups.contract.d.ts.map +1 -0
- package/dist/modules/groups/groups.contract.js +36 -0
- package/dist/modules/groups/groups.contract.js.map +1 -0
- package/dist/modules/groups/groups.routes.d.ts +42 -0
- package/dist/modules/groups/groups.routes.d.ts.map +1 -0
- package/dist/modules/groups/groups.routes.js +379 -0
- package/dist/modules/groups/groups.routes.js.map +1 -0
- package/dist/modules/groups/groups.service.d.ts +60 -0
- package/dist/modules/groups/groups.service.d.ts.map +1 -0
- package/dist/modules/groups/groups.service.js +172 -0
- package/dist/modules/groups/groups.service.js.map +1 -0
- package/dist/modules/groups/index.d.ts +7 -0
- package/dist/modules/groups/index.d.ts.map +1 -0
- package/dist/modules/groups/index.js +6 -0
- package/dist/modules/groups/index.js.map +1 -0
- package/dist/modules/groups/join-proposals.d.ts +53 -0
- package/dist/modules/groups/join-proposals.d.ts.map +1 -0
- package/dist/modules/groups/join-proposals.js +67 -0
- package/dist/modules/groups/join-proposals.js.map +1 -0
- package/dist/modules/groups/join-requests.service.d.ts +81 -0
- package/dist/modules/groups/join-requests.service.d.ts.map +1 -0
- package/dist/modules/groups/join-requests.service.js +135 -0
- package/dist/modules/groups/join-requests.service.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +20 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +59 -11
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts +129 -0
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -0
- package/dist/modules/settings/deployment-settings.service.js +368 -0
- package/dist/modules/settings/deployment-settings.service.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +49 -0
- package/dist/modules/settings/setup.routes.d.ts.map +1 -0
- package/dist/modules/settings/setup.routes.js +292 -0
- package/dist/modules/settings/setup.routes.js.map +1 -0
- package/dist/modules/skills/index.d.ts +2 -1
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +1 -0
- package/dist/modules/skills/index.js.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +40 -0
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -0
- package/dist/modules/skills/pending-skills.service.js +147 -0
- package/dist/modules/skills/pending-skills.service.js.map +1 -0
- package/dist/modules/skills/skills.contract.d.ts +32 -3
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.contract.js +1 -1
- package/dist/modules/skills/skills.routes.d.ts +3 -2
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +18 -1
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +22 -0
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +24 -12
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +1 -1
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +47 -2
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.js +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +4 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +23 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +3 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +84 -17
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +6 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +4 -2
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/event-bus.d.ts +11 -0
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +22 -0
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +9 -0
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +16 -0
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/branch-name.d.ts +1 -1
- package/dist/modules/workflow/git/branch-name.d.ts.map +1 -1
- package/dist/modules/workflow/git/branch-name.js +1 -1
- package/dist/modules/workflow/git/branch-name.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +31 -2
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +144 -52
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +12 -6
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +19 -9
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +12 -3
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +95 -14
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +92 -3
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +381 -108
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/bevel-ignore.d.ts +5 -0
- package/dist/modules/workspace/bevel-ignore.d.ts.map +1 -1
- package/dist/modules/workspace/bevel-ignore.js +5 -1
- package/dist/modules/workspace/bevel-ignore.js.map +1 -1
- package/dist/modules/workspace/kb-seed.interface.d.ts +1 -1
- package/dist/modules/workspace/kb-seed.service.d.ts +60 -5
- package/dist/modules/workspace/kb-seed.service.d.ts.map +1 -1
- package/dist/modules/workspace/kb-seed.service.js +228 -51
- package/dist/modules/workspace/kb-seed.service.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +2 -1
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +51 -18
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +16 -4
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +36 -9
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +8 -3
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/kb-layout.test.js +2 -2
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +18 -0
- package/dist/test-setup.js.map +1 -0
- package/kb-template/.bevelignore +6 -2
- package/kb-template/AGENTS.md +272 -0
- package/kb-template/KnowledgeBase/How to get started.md +65 -0
- package/kb-template/access.md +36 -36
- package/migrations/0002_user_onboarding_done.sql +1 -0
- package/migrations/0003_deployment_settings.sql +9 -0
- package/migrations/meta/0001_snapshot.json +1486 -0
- package/migrations/meta/0002_snapshot.json +1493 -0
- package/migrations/meta/0003_snapshot.json +1552 -0
- package/migrations/meta/_journal.json +15 -1
- package/package.json +5 -4
- package/src/__tests__/branch-model.test.ts +79 -0
- package/src/__tests__/core-config.admin.test.ts +114 -0
- package/src/__tests__/database-url.test.ts +70 -0
- package/src/core/core-ports.ts +15 -0
- package/src/core/create-core-server.ts +55 -6
- package/src/core/create-core-services.ts +201 -36
- package/src/core-config.ts +139 -59
- package/src/modules/access/__tests__/access-declarations.test.ts +195 -0
- package/src/modules/access/__tests__/access-md-format.test.ts +191 -0
- package/src/modules/access/__tests__/access-splice.test.ts +21 -0
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +214 -0
- package/src/modules/access/access-control.interface.ts +11 -0
- package/src/modules/access/access-control.service.ts +113 -15
- package/src/modules/access/access-declarations.ts +251 -0
- package/src/modules/access/access-mutation.service.ts +4 -4
- package/src/modules/access/access-splice.ts +64 -21
- package/src/modules/access/access.routes.ts +61 -0
- package/src/modules/access/creator-access.ts +22 -2
- package/src/modules/admin/admin-access.service.ts +4 -3
- package/src/modules/auth/__tests__/auth.service.test.ts +57 -0
- package/src/modules/auth/__tests__/onboarding-done.route.test.ts +147 -0
- package/src/modules/auth/auth.routes.ts +50 -1
- package/src/modules/auth/auth.service.ts +55 -17
- package/src/modules/database/core-schema.ts +46 -0
- package/src/modules/groups/__tests__/group-index.service.test.ts +225 -0
- package/src/modules/groups/__tests__/group-provision.service.test.ts +247 -0
- package/src/modules/groups/__tests__/groups.routes.test.ts +493 -0
- package/src/modules/groups/__tests__/join-proposals.test.ts +101 -0
- package/src/modules/groups/__tests__/join-requests.service.test.ts +175 -0
- package/src/modules/groups/group-provision.service.ts +328 -0
- package/src/modules/groups/groups.contract.ts +107 -0
- package/src/modules/groups/groups.routes.ts +433 -0
- package/src/modules/groups/groups.service.ts +193 -0
- package/src/modules/groups/index.ts +17 -0
- package/src/modules/groups/join-proposals.ts +114 -0
- package/src/modules/groups/join-requests.service.ts +185 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +283 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +68 -12
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +256 -0
- package/src/modules/settings/__tests__/setup.routes.test.ts +201 -0
- package/src/modules/settings/deployment-settings.service.ts +419 -0
- package/src/modules/settings/setup.routes.ts +317 -0
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +240 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +13 -13
- package/src/modules/skills/index.ts +3 -0
- package/src/modules/skills/pending-skills.service.ts +168 -0
- package/src/modules/skills/skills.contract.ts +34 -3
- package/src/modules/skills/skills.routes.ts +23 -2
- package/src/modules/skills/skills.service.ts +24 -16
- package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +262 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +2 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +61 -23
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +156 -156
- package/src/modules/tool-manuals/index.ts +2 -0
- package/src/modules/tool-manuals/tool-manuals.contract.ts +50 -2
- package/src/modules/tool-manuals/tool-manuals.routes.ts +21 -0
- package/src/modules/tool-manuals/tool-manuals.service.ts +86 -17
- package/src/modules/tool-manuals/tool-manuals.tools.ts +206 -202
- package/src/modules/workflow/__tests__/event-bus.test.ts +35 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +251 -5
- package/src/modules/workflow/agent-tools/workflow.tools.ts +4 -2
- package/src/modules/workflow/event-bus.ts +25 -0
- package/src/modules/workflow/file-lock.service.ts +17 -0
- package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +9 -49
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +101 -0
- package/src/modules/workflow/git/__tests__/git.service.commitFile.test.ts +219 -211
- package/src/modules/workflow/git/__tests__/git.service.fileContentsAtCommit.test.ts +132 -0
- package/src/modules/workflow/git/__tests__/git.service.logForFile.test.ts +4 -2
- package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +275 -272
- package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +5 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +44 -0
- package/src/modules/workflow/git/branch-name.ts +5 -1
- package/src/modules/workflow/git/git.service.ts +159 -62
- package/src/modules/workflow/git/pull-request.service.ts +22 -11
- package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +4 -1
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +12 -3
- package/src/modules/workflow/workflow.routes.ts +91 -13
- package/src/modules/workflow/workflow.service.ts +353 -13
- package/src/modules/workspace/__tests__/kb-seed.service.test.ts +255 -24
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +236 -233
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +179 -176
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +320 -303
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +337 -276
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +14 -6
- package/src/modules/workspace/bevel-ignore.ts +66 -62
- package/src/modules/workspace/kb-seed.interface.ts +1 -1
- package/src/modules/workspace/kb-seed.service.ts +247 -53
- package/src/modules/workspace/workspace.routes.ts +54 -18
- package/src/modules/workspace/workspace.service.ts +45 -7
- package/src/modules/workspace/workspace.tools.ts +922 -917
- package/src/shared/__tests__/frontmatter-id.test.ts +53 -0
- package/src/shared/__tests__/join-request.test.ts +96 -0
- package/src/shared/__tests__/kb-layout.group.test.ts +45 -0
- package/src/shared/kb-layout.test.ts +2 -2
- package/src/test-setup.ts +18 -0
- package/kb-template/Agents/README.md +0 -38
- package/kb-template/CLAUDE.md +0 -419
- package/kb-template/Data/.gitkeep +0 -0
- package/kb-template/Data/README.md +0 -39
- package/kb-template/KnowledgeBase/README.md +0 -37
- package/kb-template/Pipelines/.gitkeep +0 -0
- package/kb-template/Pipelines/README.md +0 -38
- package/kb-template/Skills/.gitkeep +0 -0
- package/kb-template/Skills/README.md +0 -32
- package/kb-template/Tools/.gitkeep +0 -0
- package/kb-template/Tools/README.md +0 -42
- /package/kb-template/{Agents → Groups}/.gitkeep +0 -0
|
@@ -3,7 +3,8 @@ import os from 'node:os';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { execFile } from 'node:child_process';
|
|
5
5
|
import { promisify } from 'node:util';
|
|
6
|
-
import {
|
|
6
|
+
import { KNOWLEDGE_BASE_DIR, GROUPS_DIR } from '@bevel-software/platform-shared';
|
|
7
|
+
import { IGNORE_FILENAME } from './bevel-ignore.js';
|
|
7
8
|
const execFileAsync = promisify(execFile);
|
|
8
9
|
/**
|
|
9
10
|
* Fallback committer identity for seed commits. Mirrors the workspace clone's
|
|
@@ -18,24 +19,51 @@ const BOT_EMAIL = 'bevel-workflow@bevel.software';
|
|
|
18
19
|
*
|
|
19
20
|
* Two kinds:
|
|
20
21
|
* - {@link REQUIRED_FILES}: repo-root files added when the file is missing.
|
|
21
|
-
* - {@link
|
|
22
|
-
* dir is entirely absent it's created by adding
|
|
23
|
-
* the *directory's* existence, not the
|
|
24
|
-
*
|
|
22
|
+
* - {@link CORE_REQUIRED_DIRS} (plus any `extraDirs`): well-known root dirs the
|
|
23
|
+
* app expects to exist; when a dir is entirely absent it's created by adding
|
|
24
|
+
* its `<dir>/.gitkeep`. Keyed on the *directory's* existence, not the
|
|
25
|
+
* `.gitkeep` file — so a branch that already has content under
|
|
26
|
+
* `KnowledgeBase/` never gets a pointless placeholder.
|
|
25
27
|
*
|
|
26
28
|
* `roles.yaml` is in neither, and is not part of the template at all: it is
|
|
27
|
-
* generated from `
|
|
29
|
+
* generated from `ADMIN_EMAIL` (see {@link renderRolesYaml}) and written
|
|
28
30
|
* directly, so a repo can't be seeded with a stale hard-coded Admin list.
|
|
29
31
|
*/
|
|
30
|
-
const REQUIRED_FILES = ['access.md', '
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
const REQUIRED_FILES = ['access.md', 'AGENTS.md', '.bevelignore', '.gitignore'];
|
|
33
|
+
/**
|
|
34
|
+
* The two roots CORE gives a knowledge base: the ontologies, and the groups
|
|
35
|
+
* that hold skills and tools.
|
|
36
|
+
*
|
|
37
|
+
* `Data/`, `Agents/` and `Pipelines/` are deliberately absent. They scaffold
|
|
38
|
+
* the agentic execution layer, which is not part of this platform — a core
|
|
39
|
+
* deployment that created them would be handing every operator three empty
|
|
40
|
+
* folders it has no feature to fill. A distribution that DOES own that layer
|
|
41
|
+
* passes them as `extraDirs` (and ships a template carrying their READMEs);
|
|
42
|
+
* the names stay reserved in `kb-layout.ts` either way, so a KB that has them
|
|
43
|
+
* still renders them as roots rather than folding them into Knowledge.
|
|
44
|
+
*/
|
|
45
|
+
export const CORE_REQUIRED_DIRS = [KNOWLEDGE_BASE_DIR, GROUPS_DIR];
|
|
46
|
+
/**
|
|
47
|
+
* A reserved root must be ONE path segment — `Data`, not `Data/x`, `../x` or
|
|
48
|
+
* `/x`. The name is joined onto the repo root, so anything else writes outside
|
|
49
|
+
* the repo being seeded.
|
|
50
|
+
*
|
|
51
|
+
* Deliberately NOT a check against the reserved-root set in `kb-layout.ts`:
|
|
52
|
+
* `Data`, `Agents` and `Pipelines` are all in that set, and they are precisely
|
|
53
|
+
* what a distribution passes here. Being reserved is what makes a name worth
|
|
54
|
+
* claiming — the file tree renders it as its own root instead of folding it
|
|
55
|
+
* into Knowledge — so rejecting reserved names would reject the only real use.
|
|
56
|
+
*/
|
|
57
|
+
function assertRootSegment(dir) {
|
|
58
|
+
if (!dir ||
|
|
59
|
+
dir === '.' ||
|
|
60
|
+
dir === '..' ||
|
|
61
|
+
dir.includes('/') ||
|
|
62
|
+
dir.includes('\\') ||
|
|
63
|
+
path.isAbsolute(dir)) {
|
|
64
|
+
throw new Error(`Reserved KB root must be a single path segment (no separators, no ".."); got "${dir}"`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
39
67
|
/** Redact the token from any string that might surface in a log or error. */
|
|
40
68
|
function redact(s) {
|
|
41
69
|
const token = process.env.GITHUB_TOKEN;
|
|
@@ -48,7 +76,7 @@ function renderRolesYaml(adminEmails) {
|
|
|
48
76
|
'# Role names are case- and whitespace-insensitive. The `Admin` role is special:\n' +
|
|
49
77
|
'# only Admins may edit this file, and at least one Admin must always exist.\n' +
|
|
50
78
|
'#\n' +
|
|
51
|
-
'# Generated by the Bevel platform at KB-seed time from
|
|
79
|
+
'# Generated by the Bevel platform at KB-seed time from ADMIN_EMAIL.\n' +
|
|
52
80
|
'roles:\n' +
|
|
53
81
|
' Admin:\n' +
|
|
54
82
|
`${lines}\n`);
|
|
@@ -68,12 +96,8 @@ function renderRolesYaml(adminEmails) {
|
|
|
68
96
|
* branch a user loads: it fills in any missing base files on that branch.
|
|
69
97
|
*/
|
|
70
98
|
export class KbSeedService {
|
|
71
|
-
kbRepoUrl;
|
|
72
99
|
kbTemplateDir;
|
|
73
|
-
protectedBranches;
|
|
74
|
-
defaultBranch;
|
|
75
100
|
seedAdminEmails;
|
|
76
|
-
gitUsername;
|
|
77
101
|
/** Single-flight: the first caller runs the remote pass; the rest await its result. */
|
|
78
102
|
inFlight = null;
|
|
79
103
|
/**
|
|
@@ -85,15 +109,49 @@ export class KbSeedService {
|
|
|
85
109
|
* base when creating a missing protected branch.
|
|
86
110
|
* @param seedAdminEmails Admins written into the generated `roles.yaml`.
|
|
87
111
|
* @param gitUsername Basic-auth username for git-over-HTTPS (provider-specific).
|
|
112
|
+
* @param extraDirs Additional root folders this distribution reserves,
|
|
113
|
+
* on top of {@link CORE_REQUIRED_DIRS}. Their
|
|
114
|
+
* `.gitkeep` is written directly rather than copied,
|
|
115
|
+
* so a distribution can claim a root without also
|
|
116
|
+
* shipping a template entry for it.
|
|
88
117
|
*/
|
|
89
|
-
constructor(kbRepoUrl, kbTemplateDir, protectedBranches, defaultBranch, seedAdminEmails, gitUsername = 'x-access-token') {
|
|
90
|
-
this.kbRepoUrl = kbRepoUrl;
|
|
118
|
+
constructor(kbRepoUrl, kbTemplateDir, protectedBranches, defaultBranch, seedAdminEmails, gitUsername = 'x-access-token', extraDirs = []) {
|
|
91
119
|
this.kbTemplateDir = kbTemplateDir;
|
|
92
|
-
this.protectedBranches = protectedBranches;
|
|
93
|
-
this.defaultBranch = defaultBranch;
|
|
94
120
|
this.seedAdminEmails = seedAdminEmails;
|
|
95
|
-
|
|
121
|
+
// A getter is read per-operation, so a remote supplied through the setup
|
|
122
|
+
// screen is seeded against without restarting; a string is still accepted.
|
|
123
|
+
this.kbRepoUrl = typeof kbRepoUrl === 'function' ? kbRepoUrl : () => kbRepoUrl;
|
|
124
|
+
// Read when seeding, not at construction: the branch model can be supplied
|
|
125
|
+
// through the setup screen, which happens after this object exists.
|
|
126
|
+
this.protectedBranches =
|
|
127
|
+
typeof protectedBranches === 'function' ? protectedBranches : () => protectedBranches;
|
|
128
|
+
this.defaultBranch = typeof defaultBranch === 'function' ? defaultBranch : () => defaultBranch;
|
|
129
|
+
this.gitUsername = typeof gitUsername === 'function' ? gitUsername : () => gitUsername;
|
|
130
|
+
// NOT a getter, unlike its neighbours above: the reserved roots are named
|
|
131
|
+
// by the composition root in code, not collected on the setup screen, so
|
|
132
|
+
// there is nothing to re-read. Validated once, here — every entry is joined
|
|
133
|
+
// onto the repo root and onto `<dir>/.gitkeep`, so a separator or a `..`
|
|
134
|
+
// would write outside the repo being seeded, and a bad value should fail at
|
|
135
|
+
// boot beside the rest of the wiring rather than part-way through seeding
|
|
136
|
+
// somebody's knowledge base. Same contract as `KB_DIR_NAME` in `CoreConfig`.
|
|
137
|
+
for (const dir of extraDirs) {
|
|
138
|
+
assertRootSegment(dir);
|
|
139
|
+
// A root named after a required FILE is a typo with a silent outcome:
|
|
140
|
+
// the file is laid down first in both seed paths, so `ensureRequiredDirs`
|
|
141
|
+
// finds the path taken and skips it, and the directory the caller asked
|
|
142
|
+
// for never appears with nothing said about why.
|
|
143
|
+
if (REQUIRED_FILES.includes(dir)) {
|
|
144
|
+
throw new Error(`Reserved KB root "${dir}" collides with a required file of the same name`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
this.requiredDirs = [...CORE_REQUIRED_DIRS, ...extraDirs];
|
|
96
148
|
}
|
|
149
|
+
kbRepoUrl;
|
|
150
|
+
protectedBranches;
|
|
151
|
+
defaultBranch;
|
|
152
|
+
gitUsername;
|
|
153
|
+
/** Root folders this deployment guarantees — core's two plus any extras. */
|
|
154
|
+
requiredDirs;
|
|
97
155
|
ensureRemoteSeeded() {
|
|
98
156
|
// Cache the promise, not just a boolean, so concurrent first-callers share
|
|
99
157
|
// one run. On failure we clear it so a later call can retry (a transient
|
|
@@ -110,9 +168,11 @@ export class KbSeedService {
|
|
|
110
168
|
const heads = await this.lsRemoteHeads();
|
|
111
169
|
if (heads.size === 0) {
|
|
112
170
|
if (this.seedAdminEmails.length === 0) {
|
|
113
|
-
throw new Error(`KB remote ${redact(this.kbRepoUrl)} is empty and cannot be seeded: ` +
|
|
114
|
-
'
|
|
115
|
-
'
|
|
171
|
+
throw new Error(`KB remote ${redact(this.kbRepoUrl())} is empty and cannot be seeded: ` +
|
|
172
|
+
'no initial Admin was supplied. A seeded KB with no Admin is unusable ' +
|
|
173
|
+
'(access resolution requires at least one Admin). Unreachable in ' +
|
|
174
|
+
'normal operation — ADMIN_EMAIL is required at boot — so this guards ' +
|
|
175
|
+
'a caller that constructed the seeder with an empty list.');
|
|
116
176
|
}
|
|
117
177
|
await this.seedEmptyRemote();
|
|
118
178
|
return;
|
|
@@ -121,7 +181,7 @@ export class KbSeedService {
|
|
|
121
181
|
// later `clone -b <branch>` succeeds. This creates the branch pointer only;
|
|
122
182
|
// per-branch file top-up happens in `topUpWorkspace` when the branch loads.
|
|
123
183
|
const base = this.pickBase(heads);
|
|
124
|
-
for (const branch of this.protectedBranches) {
|
|
184
|
+
for (const branch of this.protectedBranches()) {
|
|
125
185
|
if (!heads.has(branch)) {
|
|
126
186
|
await this.createBranchOnRemote(branch, base);
|
|
127
187
|
}
|
|
@@ -137,30 +197,51 @@ export class KbSeedService {
|
|
|
137
197
|
* stays consistent with origin, and the top-up is retried on a future clone.
|
|
138
198
|
*/
|
|
139
199
|
async topUpWorkspace(repoDir, branch) {
|
|
200
|
+
// Scaffolding lands on PROTECTED branches only. A draft or suggestions
|
|
201
|
+
// branch is somebody's change-in-waiting, and a seeder commit there
|
|
202
|
+
// surfaces as noise in their change request's diff against the default
|
|
203
|
+
// branch (a stray scaffolding file riding along in a skill proposal was
|
|
204
|
+
// exactly this). Whatever the protected branches are missing, they get
|
|
205
|
+
// when THEY load — and drafts fork from them.
|
|
206
|
+
if (!this.protectedBranches().includes(branch))
|
|
207
|
+
return;
|
|
140
208
|
try {
|
|
141
209
|
const added = [];
|
|
142
210
|
for (const rel of REQUIRED_FILES) {
|
|
143
211
|
if (!(await this.exists(path.join(repoDir, rel)))) {
|
|
144
212
|
await this.copyTemplateFile(rel, repoDir);
|
|
145
213
|
added.push(rel);
|
|
214
|
+
// Adding AGENTS.md to a knowledge base seeded before the rename
|
|
215
|
+
// leaves it VISIBLE: that repo's `.bevelignore` lists CLAUDE.md and
|
|
216
|
+
// knows nothing of the new name, so the conventions doc starts
|
|
217
|
+
// showing up in the file tree and the agent view. We created the
|
|
218
|
+
// mismatch by adding the file, so we close it here.
|
|
219
|
+
if (rel === 'AGENTS.md')
|
|
220
|
+
added.push(...(await this.mergeIgnorePattern(repoDir, rel)));
|
|
146
221
|
}
|
|
147
222
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
223
|
+
// AGENTS.md is MANAGED, not merely seeded: the platform owns its
|
|
224
|
+
// content, and a stale copy is replaced with the packaged template's on
|
|
225
|
+
// every top-up (each fresh clone of a protected branch — in practice,
|
|
226
|
+
// every server restart). The file's own header says so, which is what
|
|
227
|
+
// makes overwriting edits a stated contract instead of a surprise.
|
|
228
|
+
let agentsRefreshed = false;
|
|
229
|
+
if (!added.includes('AGENTS.md') &&
|
|
230
|
+
(await this.templateDiffers(repoDir, 'AGENTS.md'))) {
|
|
231
|
+
await this.copyTemplateFile('AGENTS.md', repoDir);
|
|
232
|
+
added.push('AGENTS.md');
|
|
233
|
+
agentsRefreshed = true;
|
|
154
234
|
}
|
|
235
|
+
added.push(...(await this.ensureRequiredDirs(repoDir)));
|
|
155
236
|
if (!(await this.exists(path.join(repoDir, 'roles.yaml')))) {
|
|
156
237
|
if (this.seedAdminEmails.length > 0) {
|
|
157
238
|
await fs.writeFile(path.join(repoDir, 'roles.yaml'), renderRolesYaml(this.seedAdminEmails), 'utf8');
|
|
158
239
|
added.push('roles.yaml');
|
|
159
240
|
}
|
|
160
241
|
else {
|
|
161
|
-
console.warn(`[kb-seed] Branch "${branch}" is missing roles.yaml
|
|
162
|
-
'
|
|
163
|
-
'Admin roles.yaml exists; set
|
|
242
|
+
console.warn(`[kb-seed] Branch "${branch}" is missing roles.yaml and ADMIN_EMAIL is ` +
|
|
243
|
+
'unset — leaving it absent. Access resolution will fail until an ' +
|
|
244
|
+
'Admin roles.yaml exists; set ADMIN_EMAIL or add roles.yaml manually.');
|
|
164
245
|
}
|
|
165
246
|
}
|
|
166
247
|
if (added.length === 0)
|
|
@@ -170,7 +251,10 @@ export class KbSeedService {
|
|
|
170
251
|
// values, so this is a harmless no-op there).
|
|
171
252
|
await this.stampIdentity(repoDir);
|
|
172
253
|
await this.git(repoDir, ['add', '--', ...added]);
|
|
173
|
-
|
|
254
|
+
const message = agentsRefreshed && added.length === 1
|
|
255
|
+
? 'Update AGENTS.md to the current platform template'
|
|
256
|
+
: `Add missing KB scaffolding: ${added.join(', ')}`;
|
|
257
|
+
await this.git(repoDir, ['commit', '-m', message]);
|
|
174
258
|
try {
|
|
175
259
|
await this.git(repoDir, ['push', 'origin', `HEAD:refs/heads/${branch}`]);
|
|
176
260
|
console.log(`[kb-seed] Topped up "${branch}" with: ${added.join(', ')}`);
|
|
@@ -191,9 +275,9 @@ export class KbSeedService {
|
|
|
191
275
|
}
|
|
192
276
|
/** Prefer the default branch as a base, else the first protected branch present, else any head. */
|
|
193
277
|
pickBase(heads) {
|
|
194
|
-
if (heads.has(this.defaultBranch))
|
|
195
|
-
return this.defaultBranch;
|
|
196
|
-
const protectedPresent = this.protectedBranches.find((b) => heads.has(b));
|
|
278
|
+
if (heads.has(this.defaultBranch()))
|
|
279
|
+
return this.defaultBranch();
|
|
280
|
+
const protectedPresent = this.protectedBranches().find((b) => heads.has(b));
|
|
197
281
|
if (protectedPresent)
|
|
198
282
|
return protectedPresent;
|
|
199
283
|
// Deterministic pick so repeated runs behave identically.
|
|
@@ -206,7 +290,7 @@ export class KbSeedService {
|
|
|
206
290
|
if (token) {
|
|
207
291
|
// The helper reads GITHUB_TOKEN at runtime, so the value never appears in argv.
|
|
208
292
|
// Username is provider-specific; the token is always the Basic-auth password.
|
|
209
|
-
args.push('-c', `credential.helper=!f() { echo "username=${this.gitUsername}"; echo "password=$GITHUB_TOKEN"; }; f`);
|
|
293
|
+
args.push('-c', `credential.helper=!f() { echo "username=${this.gitUsername()}"; echo "password=$GITHUB_TOKEN"; }; f`);
|
|
210
294
|
}
|
|
211
295
|
return args;
|
|
212
296
|
}
|
|
@@ -229,7 +313,7 @@ export class KbSeedService {
|
|
|
229
313
|
}
|
|
230
314
|
/** Set of branch names on the remote (empty ⇒ uninitialised repo). */
|
|
231
315
|
async lsRemoteHeads() {
|
|
232
|
-
const out = await this.git(null, [...this.credArgs(), 'ls-remote', '--heads', this.kbRepoUrl]);
|
|
316
|
+
const out = await this.git(null, [...this.credArgs(), 'ls-remote', '--heads', this.kbRepoUrl()]);
|
|
233
317
|
const heads = new Set();
|
|
234
318
|
for (const line of out.split('\n')) {
|
|
235
319
|
const m = line.match(/\srefs\/heads\/(.+)$/);
|
|
@@ -270,17 +354,110 @@ export class KbSeedService {
|
|
|
270
354
|
await walk('');
|
|
271
355
|
}
|
|
272
356
|
/** Copy one template file (by repo-relative path) into `dest`, creating parents. */
|
|
357
|
+
/**
|
|
358
|
+
* Whether the repo's copy of `relPath` differs from the template's, modulo
|
|
359
|
+
* line endings — a CRLF checkout of identical content must read as "same",
|
|
360
|
+
* or the managed-file refresh would commit churn on every boot forever.
|
|
361
|
+
*/
|
|
362
|
+
async templateDiffers(repoDir, relPath) {
|
|
363
|
+
const norm = (text) => text.replace(/\r\n?/g, '\n');
|
|
364
|
+
const [current, template] = await Promise.all([
|
|
365
|
+
fs.readFile(path.join(repoDir, relPath), 'utf8'),
|
|
366
|
+
fs.readFile(path.join(this.kbTemplateDir, relPath), 'utf8'),
|
|
367
|
+
]);
|
|
368
|
+
return norm(current) !== norm(template);
|
|
369
|
+
}
|
|
273
370
|
async copyTemplateFile(relPath, dest) {
|
|
274
371
|
const from = path.join(this.kbTemplateDir, relPath);
|
|
275
372
|
const to = path.join(dest, relPath);
|
|
276
373
|
await fs.mkdir(path.dirname(to), { recursive: true });
|
|
277
374
|
await fs.copyFile(from, to);
|
|
278
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Ensure `.bevelignore` carries `pattern`, appending it when absent. Returns
|
|
378
|
+
* the paths changed, for the commit.
|
|
379
|
+
*
|
|
380
|
+
* APPENDS — never rewrites. The file is the operator's, and every rule
|
|
381
|
+
* already in it is theirs to keep; this adds one line under a comment saying
|
|
382
|
+
* where it came from. Absent file, or a file that already lists the pattern,
|
|
383
|
+
* is a no-op, so running it on every clone changes nothing after the first.
|
|
384
|
+
*
|
|
385
|
+
* Matched line-wise rather than by substring: a rule for `Groups/AGENTS.md`
|
|
386
|
+
* is not a rule for the root `AGENTS.md`, and treating it as one would leave
|
|
387
|
+
* the mismatch this exists to close.
|
|
388
|
+
*/
|
|
389
|
+
async mergeIgnorePattern(repoDir, pattern) {
|
|
390
|
+
const ignorePath = path.join(repoDir, IGNORE_FILENAME);
|
|
391
|
+
let current;
|
|
392
|
+
try {
|
|
393
|
+
current = await fs.readFile(ignorePath, 'utf8');
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
return []; // No ignore file — the template's copy arrives with the pattern in it.
|
|
397
|
+
}
|
|
398
|
+
const lines = current.split('\n').map((l) => l.trim());
|
|
399
|
+
if (lines.includes(pattern))
|
|
400
|
+
return [];
|
|
401
|
+
const separator = current.endsWith('\n') ? '' : '\n';
|
|
402
|
+
await fs.appendFile(ignorePath, `${separator}\n# Added by the platform: the conventions doc is not node content.\n${pattern}\n`, 'utf8');
|
|
403
|
+
return [IGNORE_FILENAME];
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Create any reserved root folder this repo is missing, as an empty
|
|
407
|
+
* `<dir>/.gitkeep`. Returns the paths added, for the commit message.
|
|
408
|
+
*
|
|
409
|
+
* WRITTEN, not copied from the template. A `.gitkeep` is empty by definition,
|
|
410
|
+
* and requiring a template entry per root would mean a distribution could not
|
|
411
|
+
* reserve one without forking the packaged template.
|
|
412
|
+
*
|
|
413
|
+
* Keyed on the DIRECTORY's existence, not the `.gitkeep` file — a branch that
|
|
414
|
+
* already has content under `KnowledgeBase/` never gets a pointless
|
|
415
|
+
* placeholder alongside it.
|
|
416
|
+
*/
|
|
417
|
+
async ensureRequiredDirs(repoDir) {
|
|
418
|
+
const added = [];
|
|
419
|
+
for (const rootDir of this.requiredDirs) {
|
|
420
|
+
const abs = path.join(repoDir, rootDir);
|
|
421
|
+
// `lstat`, not `exists`: `fs.access` answers "is there something here?",
|
|
422
|
+
// which is true of a FILE named `Groups` — and the old skip-if-present
|
|
423
|
+
// check then did nothing and reported success, leaving a knowledge base
|
|
424
|
+
// permanently missing a root it claims to guarantee. `lstat` rather than
|
|
425
|
+
// `stat` so a SYMLINK is rejected too: a link named `Groups` is not a KB
|
|
426
|
+
// layout, and one pointing outside the repo would make every later write
|
|
427
|
+
// into it land somewhere nobody asked for.
|
|
428
|
+
const found = await this.lstatOrNull(abs);
|
|
429
|
+
if (found) {
|
|
430
|
+
if (found.isDirectory())
|
|
431
|
+
continue;
|
|
432
|
+
throw new Error(`KB root "${rootDir}" exists but is not a directory ` +
|
|
433
|
+
`(${found.isSymbolicLink() ? 'symlink' : 'file'}). Remove or rename it — ` +
|
|
434
|
+
'the platform requires this name to be a folder.');
|
|
435
|
+
}
|
|
436
|
+
await fs.mkdir(abs, { recursive: true });
|
|
437
|
+
await fs.writeFile(path.join(abs, '.gitkeep'), '', 'utf8');
|
|
438
|
+
added.push(`${rootDir}/.gitkeep`);
|
|
439
|
+
}
|
|
440
|
+
return added;
|
|
441
|
+
}
|
|
442
|
+
/** `lstat` without the throw — null when nothing is at `p`. */
|
|
443
|
+
async lstatOrNull(p) {
|
|
444
|
+
try {
|
|
445
|
+
return await fs.lstat(p);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return null;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
279
451
|
/** `git init` a temp repo, lay down the full template + generated roles.yaml, commit. */
|
|
280
452
|
async buildSeedCommit(dir) {
|
|
281
|
-
await this.git(dir, ['init', '-b', this.defaultBranch]);
|
|
453
|
+
await this.git(dir, ['init', '-b', this.defaultBranch()]);
|
|
282
454
|
await this.stampIdentity(dir);
|
|
283
455
|
await this.copyTemplateTree(dir);
|
|
456
|
+
// Reserved roots the template does not carry. Without this the seed commit
|
|
457
|
+
// would hold only what the template has, and a distribution's own roots
|
|
458
|
+
// would appear a step later, when the first clone gets topped up — the same
|
|
459
|
+
// folders, arriving in a second commit for no reason.
|
|
460
|
+
await this.ensureRequiredDirs(dir);
|
|
284
461
|
await fs.writeFile(path.join(dir, 'roles.yaml'), renderRolesYaml(this.seedAdminEmails), 'utf8');
|
|
285
462
|
await this.git(dir, ['add', '-A']);
|
|
286
463
|
await this.git(dir, ['commit', '-m', 'Seed knowledge base from Bevel template']);
|
|
@@ -291,22 +468,22 @@ export class KbSeedService {
|
|
|
291
468
|
await this.buildSeedCommit(dir);
|
|
292
469
|
// Point every protected branch at the seed commit. The init branch is
|
|
293
470
|
// already `defaultBranch`; create the rest as refs to HEAD.
|
|
294
|
-
for (const branch of this.protectedBranches) {
|
|
295
|
-
if (branch !== this.defaultBranch) {
|
|
471
|
+
for (const branch of this.protectedBranches()) {
|
|
472
|
+
if (branch !== this.defaultBranch()) {
|
|
296
473
|
await this.git(dir, ['branch', branch]);
|
|
297
474
|
}
|
|
298
475
|
}
|
|
299
|
-
await this.git(dir, ['remote', 'add', 'origin', this.kbRepoUrl]);
|
|
476
|
+
await this.git(dir, ['remote', 'add', 'origin', this.kbRepoUrl()]);
|
|
300
477
|
// Push only the protected branches — never the stray init branch if it
|
|
301
478
|
// isn't itself protected.
|
|
302
|
-
await this.git(dir, [...this.credArgs(), 'push', '-u', 'origin', ...this.protectedBranches]);
|
|
303
|
-
console.log(`[kb-seed] Seeded empty KB remote with branches: ${this.protectedBranches.join(', ')}`);
|
|
479
|
+
await this.git(dir, [...this.credArgs(), 'push', '-u', 'origin', ...this.protectedBranches()]);
|
|
480
|
+
console.log(`[kb-seed] Seeded empty KB remote with branches: ${this.protectedBranches().join(', ')}`);
|
|
304
481
|
});
|
|
305
482
|
}
|
|
306
483
|
/** Create a missing protected branch on the remote, pointed at `base`'s tip. */
|
|
307
484
|
async createBranchOnRemote(branch, base) {
|
|
308
485
|
await this.withTempDir(async (dir) => {
|
|
309
|
-
await this.git(dir, [...this.credArgs(), 'clone', '--depth', '1', '-b', base, this.kbRepoUrl, dir]);
|
|
486
|
+
await this.git(dir, [...this.credArgs(), 'clone', '--depth', '1', '-b', base, this.kbRepoUrl(), dir]);
|
|
310
487
|
// Push base's fetched tip up under the new branch name.
|
|
311
488
|
await this.git(dir, [...this.credArgs(), 'push', 'origin', `HEAD:refs/heads/${branch}`]);
|
|
312
489
|
console.log(`[kb-seed] Created missing protected branch "${branch}" from "${base}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kb-seed.service.js","sourceRoot":"","sources":["../../../src/modules/workspace/kb-seed.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kb-seed.service.js","sourceRoot":"","sources":["../../../src/modules/workspace/kb-seed.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IAdminAccessService } from '../admin/admin.interface.js';
|
|
1
2
|
import express from 'express';
|
|
2
3
|
import type { IWorkflowService } from '@bevel-software/platform-shared';
|
|
3
4
|
import type { WorkspaceService } from './workspace.service.js';
|
|
@@ -21,5 +22,5 @@ import '../auth/auth.middleware.js';
|
|
|
21
22
|
* exactly like the lock-aware filesystem the agent writes through. There
|
|
22
23
|
* is no separate "share" step; save and share are fused.
|
|
23
24
|
*/
|
|
24
|
-
export declare function createWorkspaceRoutes(workspaceService: WorkspaceService, authService: AuthService, workflowService: IWorkflowService, eventBus: WorkflowEventBus, accessControl: IAccessControl, kbDirName: string, creatorAccess: ICreatorAccess): express.Router;
|
|
25
|
+
export declare function createWorkspaceRoutes(workspaceService: WorkspaceService, authService: AuthService, workflowService: IWorkflowService, eventBus: WorkflowEventBus, accessControl: IAccessControl, kbDirName: string, creatorAccess: ICreatorAccess, adminAccess: IAdminAccessService): express.Router;
|
|
25
26
|
//# sourceMappingURL=workspace.routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.routes.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/workspace.routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace.routes.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/workspace.routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAY,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAWlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,4BAA4B,CAAC;AAIpC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,gBAAgB,EACjC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,cAAc,EAC7B,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC,MAAM,CAugChB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { IGNORE_FILENAME } from './bevel-ignore.js';
|
|
3
4
|
import express from 'express';
|
|
4
|
-
import { AGENTS_DIR, DATA_DIR, DEFAULT_BRANCH, KNOWLEDGE_BASE_DIR, KNOWLEDGE_DIR, PIPELINES_DIR,
|
|
5
|
+
import { AGENTS_DIR, DATA_DIR, DEFAULT_BRANCH, KNOWLEDGE_BASE_DIR, KNOWLEDGE_DIR, PIPELINES_DIR, GROUPS_DIR, } from '@bevel-software/platform-shared';
|
|
5
6
|
import { branchForWorkspaceId, FolderTooLargeError } from './workspace.service.js';
|
|
6
7
|
import { resolveReadableMap, toKbRelative } from '../access/kb-read-filter.js';
|
|
7
8
|
import { isRolesYamlPath, assertRolesYamlParsable } from '../access/roles-yaml-guard.js';
|
|
@@ -23,7 +24,7 @@ const MAX_UPLOAD_BYTES = 50 * 1024 * 1024; // 50 MB
|
|
|
23
24
|
* exactly like the lock-aware filesystem the agent writes through. There
|
|
24
25
|
* is no separate "share" step; save and share are fused.
|
|
25
26
|
*/
|
|
26
|
-
export function createWorkspaceRoutes(workspaceService, authService, workflowService, eventBus, accessControl, kbDirName, creatorAccess) {
|
|
27
|
+
export function createWorkspaceRoutes(workspaceService, authService, workflowService, eventBus, accessControl, kbDirName, creatorAccess, adminAccess) {
|
|
27
28
|
const router = express.Router();
|
|
28
29
|
function authenticated(req, res) {
|
|
29
30
|
if (!req.userId) {
|
|
@@ -406,20 +407,18 @@ export function createWorkspaceRoutes(workspaceService, authService, workflowSer
|
|
|
406
407
|
// The structural top-level folders are always shown as folders, even to
|
|
407
408
|
// a user who can't read into them. Their existence isn't sensitive
|
|
408
409
|
// (every KB has them), and keeping them visible lets the explorer render
|
|
409
|
-
// its Knowledge/
|
|
410
|
-
// flat tree.
|
|
411
|
-
//
|
|
412
|
-
//
|
|
413
|
-
//
|
|
414
|
-
//
|
|
415
|
-
// contents stay gated by the verdict above.
|
|
410
|
+
// its Knowledge/Groups section view instead of collapsing to an empty
|
|
411
|
+
// flat tree. A ROOT-LEVEL `Knowledge/` is the legacy pre-split layout's
|
|
412
|
+
// knowledge root (kb-layout.ts calls it the neutral bucket) and gets the
|
|
413
|
+
// same treatment so legacy clones don't collapse. Only the folders
|
|
414
|
+
// themselves are forced visible — their contents stay gated by the
|
|
415
|
+
// verdict above.
|
|
416
416
|
const structuralRoots = new Set([
|
|
417
417
|
KNOWLEDGE_BASE_DIR,
|
|
418
418
|
DATA_DIR,
|
|
419
419
|
AGENTS_DIR,
|
|
420
420
|
PIPELINES_DIR,
|
|
421
|
-
|
|
422
|
-
TOOLS_DIR,
|
|
421
|
+
GROUPS_DIR,
|
|
423
422
|
KNOWLEDGE_DIR,
|
|
424
423
|
]);
|
|
425
424
|
for (const wp of wsRelPaths) {
|
|
@@ -427,6 +426,27 @@ export function createWorkspaceRoutes(workspaceService, authService, workflowSer
|
|
|
427
426
|
if (rel !== null && structuralRoots.has(rel))
|
|
428
427
|
verdict.set(wp, true);
|
|
429
428
|
}
|
|
429
|
+
// `.bevelignore` is ADMIN-ONLY. It is the file that decides what the file
|
|
430
|
+
// tree and the agent view show at all, so it is deployment configuration
|
|
431
|
+
// rather than knowledge — and it sits alone in being visible: its
|
|
432
|
+
// siblings (`.gitignore`, `roles.yaml`, `access.md`, `AGENTS.md`) are
|
|
433
|
+
// already hidden from every reader by the shipped ignore rules. Somebody
|
|
434
|
+
// who cannot act on it gains a puzzle; somebody who can needs to reach it.
|
|
435
|
+
//
|
|
436
|
+
// Read permission is deliberately NOT the lever. Everyone can read it —
|
|
437
|
+
// it has to be readable to be applied — so hiding it is a listing
|
|
438
|
+
// decision, made here, rather than an ACL fiction maintained in a file.
|
|
439
|
+
//
|
|
440
|
+
// Resolved through `AdminAccessService` rather than by asking whether
|
|
441
|
+
// this caller can write `roles.yaml` in THIS workspace: admin is settled
|
|
442
|
+
// on the default branch precisely so that editing `roles.yaml` on your
|
|
443
|
+
// own branch cannot promote you, and the same reasoning applies to
|
|
444
|
+
// anything gated on being an admin.
|
|
445
|
+
const ignoreFiles = wsRelPaths.filter((wp) => path.basename(wp) === IGNORE_FILENAME);
|
|
446
|
+
if (ignoreFiles.length > 0 && !(await adminAccess.isAdmin(userEmail))) {
|
|
447
|
+
for (const wp of ignoreFiles)
|
|
448
|
+
verdict.set(wp, false);
|
|
449
|
+
}
|
|
430
450
|
return verdict;
|
|
431
451
|
};
|
|
432
452
|
}
|
|
@@ -503,16 +523,25 @@ export function createWorkspaceRoutes(workspaceService, authService, workflowSer
|
|
|
503
523
|
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
504
524
|
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
505
525
|
};
|
|
506
|
-
// SVG is active web content (it can carry <script>)
|
|
507
|
-
//
|
|
508
|
-
//
|
|
509
|
-
// execute its scripts under the file:// origin — so when the user
|
|
510
|
-
// explicitly downloads, force octet-stream to defang it.
|
|
526
|
+
// SVG is active web content (it can carry <script>), and it is active in
|
|
527
|
+
// BOTH directions: a saved-to-disk SVG re-opened later runs its scripts
|
|
528
|
+
// under the file:// origin, so a download is forced to octet-stream.
|
|
511
529
|
const downloadMime = ext === '.svg' ? 'application/octet-stream' : (mimeTypes[ext] || 'application/octet-stream');
|
|
512
530
|
res.setHeader('Content-Type', wantsDownload ? downloadMime : (mimeTypes[ext] || 'application/octet-stream'));
|
|
513
531
|
// Block MIME-sniffing so a misdeclared file can't be promoted to
|
|
514
532
|
// active content by the browser.
|
|
515
533
|
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
534
|
+
// …and inline is a DOCUMENT the moment somebody opens this URL in a tab
|
|
535
|
+
// directly, where those scripts would run under THIS
|
|
536
|
+
// origin with this user's session — stored XSS for anyone who can write
|
|
537
|
+
// a file into the workspace. `sandbox` drops the document into a unique
|
|
538
|
+
// origin with scripting off. It applies to documents only, so the
|
|
539
|
+
// renderers' fetch → blob → <img> path is untouched, and that path is
|
|
540
|
+
// why the type stays `image/svg+xml`: browsers do not sniff SVG, and an
|
|
541
|
+
// octet-stream blob would simply not render.
|
|
542
|
+
if (!wantsDownload && ext === '.svg') {
|
|
543
|
+
res.setHeader('Content-Security-Policy', 'sandbox');
|
|
544
|
+
}
|
|
516
545
|
if (wantsDownload) {
|
|
517
546
|
// RFC 5987 UTF-8 filename encoding so unicode + spaces round-trip;
|
|
518
547
|
// CR/LF stripped to block header injection via a crafted path.
|
|
@@ -770,7 +799,7 @@ export function createWorkspaceRoutes(workspaceService, authService, workflowSer
|
|
|
770
799
|
res.status(400).json({ error: 'path query parameter is required' });
|
|
771
800
|
return;
|
|
772
801
|
}
|
|
773
|
-
const { content } = req.body;
|
|
802
|
+
const { content, ifAbsent } = req.body;
|
|
774
803
|
if (content === undefined) {
|
|
775
804
|
res.status(400).json({ error: 'content is required in body' });
|
|
776
805
|
return;
|
|
@@ -794,7 +823,11 @@ export function createWorkspaceRoutes(workspaceService, authService, workflowSer
|
|
|
794
823
|
if (plan?.kind === 'seed-access-md')
|
|
795
824
|
await seedCreatorAccessMd(id, user, plan);
|
|
796
825
|
const toWrite = plan?.kind === 'frontmatter' ? plan.apply(content) : content;
|
|
797
|
-
|
|
826
|
+
// `ifAbsent` = exclusive create: the service's `wx` write turns a
|
|
827
|
+
// concurrent or stale create against an existing file into a 409
|
|
828
|
+
// instead of a silent replace. `withLock`'s failure arm releases
|
|
829
|
+
// without committing, so the refusal leaves no trace.
|
|
830
|
+
await withLock(id, user, filePath, () => workspaceService.writeFile(id, filePath, toWrite, { failIfExists: ifAbsent === true }));
|
|
798
831
|
res.json({ status: 'written' });
|
|
799
832
|
}
|
|
800
833
|
catch (err) {
|