@jini-ai/cms 0.1.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/LICENSE +201 -0
- package/README.md +84 -0
- package/dist/content-types/agent-tools.d.ts +65 -0
- package/dist/content-types/agent-tools.d.ts.map +1 -0
- package/dist/content-types/agent-tools.js +172 -0
- package/dist/content-types/agent-tools.js.map +1 -0
- package/dist/content-types/cleanup.d.ts +118 -0
- package/dist/content-types/cleanup.d.ts.map +1 -0
- package/dist/content-types/cleanup.js +65 -0
- package/dist/content-types/cleanup.js.map +1 -0
- package/dist/content-types/errors.d.ts +90 -0
- package/dist/content-types/errors.d.ts.map +1 -0
- package/dist/content-types/errors.js +119 -0
- package/dist/content-types/errors.js.map +1 -0
- package/dist/content-types/field-defs.d.ts +25 -0
- package/dist/content-types/field-defs.d.ts.map +1 -0
- package/dist/content-types/field-defs.js +155 -0
- package/dist/content-types/field-defs.js.map +1 -0
- package/dist/content-types/index-provisioning.d.ts +94 -0
- package/dist/content-types/index-provisioning.d.ts.map +1 -0
- package/dist/content-types/index-provisioning.js +133 -0
- package/dist/content-types/index-provisioning.js.map +1 -0
- package/dist/content-types/index.d.ts +63 -0
- package/dist/content-types/index.d.ts.map +1 -0
- package/dist/content-types/index.js +36 -0
- package/dist/content-types/index.js.map +1 -0
- package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
- package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/content-types/lifecycle-dispatch.js +28 -0
- package/dist/content-types/lifecycle-dispatch.js.map +1 -0
- package/dist/content-types/lifecycle.d.ts +104 -0
- package/dist/content-types/lifecycle.d.ts.map +1 -0
- package/dist/content-types/lifecycle.js +143 -0
- package/dist/content-types/lifecycle.js.map +1 -0
- package/dist/content-types/list.d.ts +44 -0
- package/dist/content-types/list.d.ts.map +1 -0
- package/dist/content-types/list.js +13 -0
- package/dist/content-types/list.js.map +1 -0
- package/dist/content-types/repo.memory.d.ts +72 -0
- package/dist/content-types/repo.memory.d.ts.map +1 -0
- package/dist/content-types/repo.memory.js +71 -0
- package/dist/content-types/repo.memory.js.map +1 -0
- package/dist/content-types/tool-registrations.d.ts +65 -0
- package/dist/content-types/tool-registrations.d.ts.map +1 -0
- package/dist/content-types/tool-registrations.js +180 -0
- package/dist/content-types/tool-registrations.js.map +1 -0
- package/dist/content-types/types.d.ts +78 -0
- package/dist/content-types/types.d.ts.map +1 -0
- package/dist/content-types/types.js +32 -0
- package/dist/content-types/types.js.map +1 -0
- package/dist/content-types/write-service.d.ts +141 -0
- package/dist/content-types/write-service.d.ts.map +1 -0
- package/dist/content-types/write-service.js +180 -0
- package/dist/content-types/write-service.js.map +1 -0
- package/dist/core/commands/change-set.d.ts +98 -0
- package/dist/core/commands/change-set.d.ts.map +1 -0
- package/dist/core/commands/change-set.js +2 -0
- package/dist/core/commands/change-set.js.map +1 -0
- package/dist/core/commands/command.d.ts +168 -0
- package/dist/core/commands/command.d.ts.map +1 -0
- package/dist/core/commands/command.js +173 -0
- package/dist/core/commands/command.js.map +1 -0
- package/dist/core/index.d.ts +45 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +43 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ports.d.ts +139 -0
- package/dist/core/ports.d.ts.map +1 -0
- package/dist/core/ports.js +2 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/tools/registration-kit.d.ts +308 -0
- package/dist/core/tools/registration-kit.d.ts.map +1 -0
- package/dist/core/tools/registration-kit.js +381 -0
- package/dist/core/tools/registration-kit.js.map +1 -0
- package/dist/entries/agent-tools.d.ts +78 -0
- package/dist/entries/agent-tools.d.ts.map +1 -0
- package/dist/entries/agent-tools.js +158 -0
- package/dist/entries/agent-tools.js.map +1 -0
- package/dist/entries/errors.d.ts +43 -0
- package/dist/entries/errors.d.ts.map +1 -0
- package/dist/entries/errors.js +59 -0
- package/dist/entries/errors.js.map +1 -0
- package/dist/entries/field-validation.d.ts +70 -0
- package/dist/entries/field-validation.d.ts.map +1 -0
- package/dist/entries/field-validation.js +87 -0
- package/dist/entries/field-validation.js.map +1 -0
- package/dist/entries/index.d.ts +55 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +38 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/lifecycle-dispatch.d.ts +15 -0
- package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/entries/lifecycle-dispatch.js +16 -0
- package/dist/entries/lifecycle-dispatch.js.map +1 -0
- package/dist/entries/list.d.ts +47 -0
- package/dist/entries/list.d.ts.map +1 -0
- package/dist/entries/list.js +12 -0
- package/dist/entries/list.js.map +1 -0
- package/dist/entries/repo.memory.d.ts +64 -0
- package/dist/entries/repo.memory.d.ts.map +1 -0
- package/dist/entries/repo.memory.js +73 -0
- package/dist/entries/repo.memory.js.map +1 -0
- package/dist/entries/tool-registrations.d.ts +52 -0
- package/dist/entries/tool-registrations.d.ts.map +1 -0
- package/dist/entries/tool-registrations.js +141 -0
- package/dist/entries/tool-registrations.js.map +1 -0
- package/dist/entries/types.d.ts +55 -0
- package/dist/entries/types.d.ts.map +1 -0
- package/dist/entries/types.js +2 -0
- package/dist/entries/types.js.map +1 -0
- package/dist/entries/write-service.d.ts +202 -0
- package/dist/entries/write-service.d.ts.map +1 -0
- package/dist/entries/write-service.js +204 -0
- package/dist/entries/write-service.js.map +1 -0
- package/dist/identity/admin-crud-service.d.ts +252 -0
- package/dist/identity/admin-crud-service.d.ts.map +1 -0
- package/dist/identity/admin-crud-service.js +437 -0
- package/dist/identity/admin-crud-service.js.map +1 -0
- package/dist/identity/agent-tool-input.d.ts +58 -0
- package/dist/identity/agent-tool-input.d.ts.map +1 -0
- package/dist/identity/agent-tool-input.js +126 -0
- package/dist/identity/agent-tool-input.js.map +1 -0
- package/dist/identity/agent-tools.d.ts +101 -0
- package/dist/identity/agent-tools.d.ts.map +1 -0
- package/dist/identity/agent-tools.js +290 -0
- package/dist/identity/agent-tools.js.map +1 -0
- package/dist/identity/auth-service.d.ts +87 -0
- package/dist/identity/auth-service.d.ts.map +1 -0
- package/dist/identity/auth-service.js +141 -0
- package/dist/identity/auth-service.js.map +1 -0
- package/dist/identity/authorize.d.ts +90 -0
- package/dist/identity/authorize.d.ts.map +1 -0
- package/dist/identity/authorize.js +94 -0
- package/dist/identity/authorize.js.map +1 -0
- package/dist/identity/grant-service.d.ts +198 -0
- package/dist/identity/grant-service.d.ts.map +1 -0
- package/dist/identity/grant-service.js +361 -0
- package/dist/identity/grant-service.js.map +1 -0
- package/dist/identity/hasher.d.ts +39 -0
- package/dist/identity/hasher.d.ts.map +1 -0
- package/dist/identity/hasher.js +39 -0
- package/dist/identity/hasher.js.map +1 -0
- package/dist/identity/index.d.ts +59 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +51 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/password-policy.d.ts +58 -0
- package/dist/identity/password-policy.d.ts.map +1 -0
- package/dist/identity/password-policy.js +67 -0
- package/dist/identity/password-policy.js.map +1 -0
- package/dist/identity/permission-migrations.d.ts +86 -0
- package/dist/identity/permission-migrations.d.ts.map +1 -0
- package/dist/identity/permission-migrations.js +67 -0
- package/dist/identity/permission-migrations.js.map +1 -0
- package/dist/identity/permissions.d.ts +35 -0
- package/dist/identity/permissions.d.ts.map +1 -0
- package/dist/identity/permissions.js +603 -0
- package/dist/identity/permissions.js.map +1 -0
- package/dist/identity/ports.d.ts +201 -0
- package/dist/identity/ports.d.ts.map +1 -0
- package/dist/identity/ports.js +2 -0
- package/dist/identity/ports.js.map +1 -0
- package/dist/identity/repo.memory.d.ts +164 -0
- package/dist/identity/repo.memory.d.ts.map +1 -0
- package/dist/identity/repo.memory.js +224 -0
- package/dist/identity/repo.memory.js.map +1 -0
- package/dist/identity/seed.d.ts +42 -0
- package/dist/identity/seed.d.ts.map +1 -0
- package/dist/identity/seed.js +277 -0
- package/dist/identity/seed.js.map +1 -0
- package/dist/identity/tool-registrations.d.ts +50 -0
- package/dist/identity/tool-registrations.d.ts.map +1 -0
- package/dist/identity/tool-registrations.js +419 -0
- package/dist/identity/tool-registrations.js.map +1 -0
- package/dist/identity/types.d.ts +185 -0
- package/dist/identity/types.d.ts.map +1 -0
- package/dist/identity/types.js +64 -0
- package/dist/identity/types.js.map +1 -0
- package/dist/identity/username.d.ts +12 -0
- package/dist/identity/username.d.ts.map +1 -0
- package/dist/identity/username.js +14 -0
- package/dist/identity/username.js.map +1 -0
- package/dist/media/agent-tools.d.ts +66 -0
- package/dist/media/agent-tools.d.ts.map +1 -0
- package/dist/media/agent-tools.js +131 -0
- package/dist/media/agent-tools.js.map +1 -0
- package/dist/media/blob-gc-lock.d.ts +37 -0
- package/dist/media/blob-gc-lock.d.ts.map +1 -0
- package/dist/media/blob-gc-lock.js +55 -0
- package/dist/media/blob-gc-lock.js.map +1 -0
- package/dist/media/blob-gc.d.ts +246 -0
- package/dist/media/blob-gc.d.ts.map +1 -0
- package/dist/media/blob-gc.js +254 -0
- package/dist/media/blob-gc.js.map +1 -0
- package/dist/media/blob-key.d.ts +28 -0
- package/dist/media/blob-key.d.ts.map +1 -0
- package/dist/media/blob-key.js +11 -0
- package/dist/media/blob-key.js.map +1 -0
- package/dist/media/blob-store.fs.d.ts +23 -0
- package/dist/media/blob-store.fs.d.ts.map +1 -0
- package/dist/media/blob-store.fs.js +48 -0
- package/dist/media/blob-store.fs.js.map +1 -0
- package/dist/media/blob-store.memory.d.ts +22 -0
- package/dist/media/blob-store.memory.d.ts.map +1 -0
- package/dist/media/blob-store.memory.js +23 -0
- package/dist/media/blob-store.memory.js.map +1 -0
- package/dist/media/content-type-sniffer.d.ts +49 -0
- package/dist/media/content-type-sniffer.d.ts.map +1 -0
- package/dist/media/content-type-sniffer.js +141 -0
- package/dist/media/content-type-sniffer.js.map +1 -0
- package/dist/media/image-transformer.d.ts +45 -0
- package/dist/media/image-transformer.d.ts.map +1 -0
- package/dist/media/image-transformer.js +23 -0
- package/dist/media/image-transformer.js.map +1 -0
- package/dist/media/image-transformer.sharp.d.ts +26 -0
- package/dist/media/image-transformer.sharp.d.ts.map +1 -0
- package/dist/media/image-transformer.sharp.js +91 -0
- package/dist/media/image-transformer.sharp.js.map +1 -0
- package/dist/media/index.d.ts +43 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +31 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/media-service.d.ts +244 -0
- package/dist/media/media-service.d.ts.map +1 -0
- package/dist/media/media-service.js +345 -0
- package/dist/media/media-service.js.map +1 -0
- package/dist/media/ports.d.ts +142 -0
- package/dist/media/ports.d.ts.map +1 -0
- package/dist/media/ports.js +2 -0
- package/dist/media/ports.js.map +1 -0
- package/dist/media/rendition-service.d.ts +66 -0
- package/dist/media/rendition-service.d.ts.map +1 -0
- package/dist/media/rendition-service.js +135 -0
- package/dist/media/rendition-service.js.map +1 -0
- package/dist/media/repo.memory.d.ts +107 -0
- package/dist/media/repo.memory.d.ts.map +1 -0
- package/dist/media/repo.memory.js +131 -0
- package/dist/media/repo.memory.js.map +1 -0
- package/dist/media/tool-registrations.d.ts +42 -0
- package/dist/media/tool-registrations.d.ts.map +1 -0
- package/dist/media/tool-registrations.js +121 -0
- package/dist/media/tool-registrations.js.map +1 -0
- package/dist/media/transform-lock.d.ts +36 -0
- package/dist/media/transform-lock.d.ts.map +1 -0
- package/dist/media/transform-lock.js +50 -0
- package/dist/media/transform-lock.js.map +1 -0
- package/dist/media/transform-registry.d.ts +103 -0
- package/dist/media/transform-registry.d.ts.map +1 -0
- package/dist/media/transform-registry.js +87 -0
- package/dist/media/transform-registry.js.map +1 -0
- package/dist/media/transform-types.d.ts +82 -0
- package/dist/media/transform-types.d.ts.map +1 -0
- package/dist/media/transform-types.js +47 -0
- package/dist/media/transform-types.js.map +1 -0
- package/dist/media/types.d.ts +150 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +26 -0
- package/dist/media/types.js.map +1 -0
- package/dist/navigation/agent-tools.d.ts +90 -0
- package/dist/navigation/agent-tools.d.ts.map +1 -0
- package/dist/navigation/agent-tools.js +225 -0
- package/dist/navigation/agent-tools.js.map +1 -0
- package/dist/navigation/contracts.d.ts +98 -0
- package/dist/navigation/contracts.d.ts.map +1 -0
- package/dist/navigation/contracts.js +70 -0
- package/dist/navigation/contracts.js.map +1 -0
- package/dist/navigation/index.d.ts +39 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +30 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/menu-service.d.ts +256 -0
- package/dist/navigation/menu-service.d.ts.map +1 -0
- package/dist/navigation/menu-service.js +382 -0
- package/dist/navigation/menu-service.js.map +1 -0
- package/dist/navigation/ports.d.ts +147 -0
- package/dist/navigation/ports.d.ts.map +1 -0
- package/dist/navigation/ports.js +2 -0
- package/dist/navigation/ports.js.map +1 -0
- package/dist/navigation/read-model.d.ts +11 -0
- package/dist/navigation/read-model.d.ts.map +1 -0
- package/dist/navigation/read-model.js +27 -0
- package/dist/navigation/read-model.js.map +1 -0
- package/dist/navigation/reconcile.d.ts +57 -0
- package/dist/navigation/reconcile.d.ts.map +1 -0
- package/dist/navigation/reconcile.js +33 -0
- package/dist/navigation/reconcile.js.map +1 -0
- package/dist/navigation/repo.memory.d.ts +137 -0
- package/dist/navigation/repo.memory.d.ts.map +1 -0
- package/dist/navigation/repo.memory.js +95 -0
- package/dist/navigation/repo.memory.js.map +1 -0
- package/dist/navigation/resolver.d.ts +110 -0
- package/dist/navigation/resolver.d.ts.map +1 -0
- package/dist/navigation/resolver.js +131 -0
- package/dist/navigation/resolver.js.map +1 -0
- package/dist/navigation/tool-registrations.d.ts +43 -0
- package/dist/navigation/tool-registrations.d.ts.map +1 -0
- package/dist/navigation/tool-registrations.js +126 -0
- package/dist/navigation/tool-registrations.js.map +1 -0
- package/dist/navigation/types.d.ts +207 -0
- package/dist/navigation/types.d.ts.map +1 -0
- package/dist/navigation/types.js +14 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/presentation/index.d.ts +15 -0
- package/dist/presentation/index.d.ts.map +1 -0
- package/dist/presentation/index.js +15 -0
- package/dist/presentation/index.js.map +1 -0
- package/dist/presentation/presentation.d.ts +72 -0
- package/dist/presentation/presentation.d.ts.map +1 -0
- package/dist/presentation/presentation.js +51 -0
- package/dist/presentation/presentation.js.map +1 -0
- package/dist/presentation/repo.memory.d.ts +9 -0
- package/dist/presentation/repo.memory.d.ts.map +1 -0
- package/dist/presentation/repo.memory.js +21 -0
- package/dist/presentation/repo.memory.js.map +1 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/settings/agent-tools.d.ts +83 -0
- package/dist/settings/agent-tools.d.ts.map +1 -0
- package/dist/settings/agent-tools.js +200 -0
- package/dist/settings/agent-tools.js.map +1 -0
- package/dist/settings/agent-writable-preferences.d.ts +67 -0
- package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
- package/dist/settings/agent-writable-preferences.js +144 -0
- package/dist/settings/agent-writable-preferences.js.map +1 -0
- package/dist/settings/change-feed.d.ts +74 -0
- package/dist/settings/change-feed.d.ts.map +1 -0
- package/dist/settings/change-feed.js +61 -0
- package/dist/settings/change-feed.js.map +1 -0
- package/dist/settings/definitions-dispatch.d.ts +51 -0
- package/dist/settings/definitions-dispatch.d.ts.map +1 -0
- package/dist/settings/definitions-dispatch.js +86 -0
- package/dist/settings/definitions-dispatch.js.map +1 -0
- package/dist/settings/dictionaries/index.d.ts +45 -0
- package/dist/settings/dictionaries/index.d.ts.map +1 -0
- package/dist/settings/dictionaries/index.js +69 -0
- package/dist/settings/dictionaries/index.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
- package/dist/settings/ensure-definitions.d.ts +88 -0
- package/dist/settings/ensure-definitions.d.ts.map +1 -0
- package/dist/settings/ensure-definitions.js +91 -0
- package/dist/settings/ensure-definitions.js.map +1 -0
- package/dist/settings/errors.d.ts +36 -0
- package/dist/settings/errors.d.ts.map +1 -0
- package/dist/settings/errors.js +40 -0
- package/dist/settings/errors.js.map +1 -0
- package/dist/settings/index.d.ts +37 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +36 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/ports.d.ts +117 -0
- package/dist/settings/ports.d.ts.map +1 -0
- package/dist/settings/ports.js +2 -0
- package/dist/settings/ports.js.map +1 -0
- package/dist/settings/purge-service.d.ts +53 -0
- package/dist/settings/purge-service.d.ts.map +1 -0
- package/dist/settings/purge-service.js +105 -0
- package/dist/settings/purge-service.js.map +1 -0
- package/dist/settings/repo.memory.d.ts +119 -0
- package/dist/settings/repo.memory.d.ts.map +1 -0
- package/dist/settings/repo.memory.js +199 -0
- package/dist/settings/repo.memory.js.map +1 -0
- package/dist/settings/settings.d.ts +124 -0
- package/dist/settings/settings.d.ts.map +1 -0
- package/dist/settings/settings.js +238 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/tool-registrations.d.ts +56 -0
- package/dist/settings/tool-registrations.d.ts.map +1 -0
- package/dist/settings/tool-registrations.js +240 -0
- package/dist/settings/tool-registrations.js.map +1 -0
- package/dist/settings/types.d.ts +125 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/ui-tab-definitions.d.ts +41 -0
- package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
- package/dist/settings/ui-tab-definitions.js +148 -0
- package/dist/settings/ui-tab-definitions.js.map +1 -0
- package/dist/settings/write-service.d.ts +314 -0
- package/dist/settings/write-service.d.ts.map +1 -0
- package/dist/settings/write-service.js +677 -0
- package/dist/settings/write-service.js.map +1 -0
- package/dist/taxonomy/agent-tools.d.ts +76 -0
- package/dist/taxonomy/agent-tools.d.ts.map +1 -0
- package/dist/taxonomy/agent-tools.js +178 -0
- package/dist/taxonomy/agent-tools.js.map +1 -0
- package/dist/taxonomy/content-lookup.d.ts +45 -0
- package/dist/taxonomy/content-lookup.d.ts.map +1 -0
- package/dist/taxonomy/content-lookup.js +9 -0
- package/dist/taxonomy/content-lookup.js.map +1 -0
- package/dist/taxonomy/index.d.ts +38 -0
- package/dist/taxonomy/index.d.ts.map +1 -0
- package/dist/taxonomy/index.js +38 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/list.d.ts +39 -0
- package/dist/taxonomy/list.d.ts.map +1 -0
- package/dist/taxonomy/list.js +19 -0
- package/dist/taxonomy/list.js.map +1 -0
- package/dist/taxonomy/merge-term.d.ts +94 -0
- package/dist/taxonomy/merge-term.d.ts.map +1 -0
- package/dist/taxonomy/merge-term.js +65 -0
- package/dist/taxonomy/merge-term.js.map +1 -0
- package/dist/taxonomy/repo.memory.d.ts +160 -0
- package/dist/taxonomy/repo.memory.d.ts.map +1 -0
- package/dist/taxonomy/repo.memory.js +171 -0
- package/dist/taxonomy/repo.memory.js.map +1 -0
- package/dist/taxonomy/validation-chain.d.ts +114 -0
- package/dist/taxonomy/validation-chain.d.ts.map +1 -0
- package/dist/taxonomy/validation-chain.js +152 -0
- package/dist/taxonomy/validation-chain.js.map +1 -0
- package/dist/taxonomy/write-service.d.ts +387 -0
- package/dist/taxonomy/write-service.d.ts.map +1 -0
- package/dist/taxonomy/write-service.js +350 -0
- package/dist/taxonomy/write-service.js.map +1 -0
- package/dist/workspace/agent-tools.d.ts +67 -0
- package/dist/workspace/agent-tools.d.ts.map +1 -0
- package/dist/workspace/agent-tools.js +103 -0
- package/dist/workspace/agent-tools.js.map +1 -0
- package/dist/workspace/create.d.ts +116 -0
- package/dist/workspace/create.d.ts.map +1 -0
- package/dist/workspace/create.js +69 -0
- package/dist/workspace/create.js.map +1 -0
- package/dist/workspace/delete.d.ts +50 -0
- package/dist/workspace/delete.d.ts.map +1 -0
- package/dist/workspace/delete.js +24 -0
- package/dist/workspace/delete.js.map +1 -0
- package/dist/workspace/index.d.ts +27 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +27 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/repo.memory.d.ts +34 -0
- package/dist/workspace/repo.memory.d.ts.map +1 -0
- package/dist/workspace/repo.memory.js +50 -0
- package/dist/workspace/repo.memory.js.map +1 -0
- package/dist/workspace/tool-registrations.d.ts +38 -0
- package/dist/workspace/tool-registrations.d.ts.map +1 -0
- package/dist/workspace/tool-registrations.js +71 -0
- package/dist/workspace/tool-registrations.js.map +1 -0
- package/dist/workspace/update.d.ts +52 -0
- package/dist/workspace/update.d.ts.map +1 -0
- package/dist/workspace/update.js +41 -0
- package/dist/workspace/update.js.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/workspace/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACpD;gDAC4C;IAC5C,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACnC;iDAC6C;IAC7C,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;yFACqF;IACrF,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAUA;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,wEAAwE;AACxE,MAAM,WAAW,uBAAuB;CAAG;AAE3C,oDAAoD;AACpD,qBAAa,wBAAyB,SAAQ,KAAK;CAAG;AAEtD,uDAAuD;AACvD,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,8DAA8D;AAC9D,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;GAMG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,uBAAuB,EACjC,SAAS,GAAE,uBAA4B,GACtC,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAuBvB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared `name`/`slug` validation — used by both `createWorkspace` below
|
|
3
|
+
* and `updateWorkspace` (`update.ts`) so the two transitions can never drift on what counts as a
|
|
4
|
+
* valid name/slug. Returns the normalized (trimmed name, trimmed+lowercased slug) pair; throws
|
|
5
|
+
* `WorkspaceValidationError` on either being invalid.
|
|
6
|
+
*
|
|
7
|
+
* @complexity O(1) — two regex/trim checks.
|
|
8
|
+
* @overallScore 100
|
|
9
|
+
*/
|
|
10
|
+
export function validateWorkspaceNameAndSlug(input) {
|
|
11
|
+
const name = input.name.trim();
|
|
12
|
+
const slug = input.slug.trim().toLowerCase();
|
|
13
|
+
if (!name)
|
|
14
|
+
throw new WorkspaceValidationError("name is required");
|
|
15
|
+
if (!slug.match(/^[a-z0-9-]+$/)) {
|
|
16
|
+
throw new WorkspaceValidationError("slug must use lowercase letters, numbers, and dashes");
|
|
17
|
+
}
|
|
18
|
+
return { name, slug };
|
|
19
|
+
}
|
|
20
|
+
/** Thrown when incoming command data is invalid. */
|
|
21
|
+
export class WorkspaceValidationError extends Error {
|
|
22
|
+
}
|
|
23
|
+
/** Thrown when uniqueness constraints are violated. */
|
|
24
|
+
export class WorkspaceConflictError extends Error {
|
|
25
|
+
}
|
|
26
|
+
/** Thrown when a `:workspaceId` does not resolve to a row. */
|
|
27
|
+
export class WorkspaceNotFoundError extends Error {
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Thrown when `deleteWorkspace` (`delete.ts`) would remove the install's
|
|
31
|
+
* last remaining workspace row. Named distinctly from `WorkspaceConflictError` (a 409, same as this
|
|
32
|
+
* maps to) so a caller can tell "duplicate slug" apart from "would brick the install" without
|
|
33
|
+
* string-matching the message — mirrors this codebase's `GrantExceedsIssuerError` being kept distinct
|
|
34
|
+
* from `IdentityForbiddenError` for the identical reason (typed-reason clarity).
|
|
35
|
+
*/
|
|
36
|
+
export class WorkspaceLastRemainingError extends Error {
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Execute create-workspace command.
|
|
40
|
+
*
|
|
41
|
+
* Synchronous path:
|
|
42
|
+
* - validate input
|
|
43
|
+
* - check uniqueness
|
|
44
|
+
* - write workspace record
|
|
45
|
+
*
|
|
46
|
+
* Asynchronous path:
|
|
47
|
+
* - enqueue `workspace.created` domain event to outbox
|
|
48
|
+
*/
|
|
49
|
+
export async function createWorkspace(required, _optional = {}) {
|
|
50
|
+
const { deps, input } = required;
|
|
51
|
+
const { name, slug } = validateWorkspaceNameAndSlug(input);
|
|
52
|
+
const existing = await deps.repo.findBySlug(slug);
|
|
53
|
+
if (existing)
|
|
54
|
+
throw new WorkspaceConflictError(`slug '${slug}' already exists`);
|
|
55
|
+
const now = deps.clock.nowIso();
|
|
56
|
+
const id = deps.idGen.newId();
|
|
57
|
+
await deps.repo.insert({ id, name, slug, createdAt: now });
|
|
58
|
+
const event = {
|
|
59
|
+
id: deps.idGen.newId(),
|
|
60
|
+
name: "workspace.created",
|
|
61
|
+
occurredAt: now,
|
|
62
|
+
aggregateId: id,
|
|
63
|
+
workspaceId: id,
|
|
64
|
+
payload: { workspaceId: id, slug },
|
|
65
|
+
};
|
|
66
|
+
await deps.outbox.enqueue(event);
|
|
67
|
+
return { id };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/workspace/create.ts"],"names":[],"mappings":"AAkDA;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAqC;IAIhF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,wBAAwB,CAAC,sDAAsD,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAyBD,oDAAoD;AACpD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;CAAG;AAEtD,uDAAuD;AACvD,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD,8DAA8D;AAC9D,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;GAMG;AACH,MAAM,OAAO,2BAA4B,SAAQ,KAAK;CAAG;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAiC,EACjC,YAAqC,EAAE;IAEvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;IAEhF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAE9B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAqD;QAC9D,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QACtB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;KACnC,CAAC;IAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { UUID } from "../core/ports.js";
|
|
2
|
+
import { type WorkspaceRepoPort } from "./create.js";
|
|
3
|
+
/**
|
|
4
|
+
* @file `DELETE_WORKSPACE` — hard-delete a workspace, guarded so the
|
|
5
|
+
* install is never left with zero workspace rows.
|
|
6
|
+
*
|
|
7
|
+
* Purpose:
|
|
8
|
+
* Because a v1 install always has exactly one workspace row (a host's `workspaceId` is fixed at
|
|
9
|
+
* process composition, so no request can ever address a second, even-if-present workspace row
|
|
10
|
+
* today), `deleteWorkspace` **always refuses in v1**. That is correct,
|
|
11
|
+
* guarded behavior, not a stub: the precondition, the atomicity, and the typed refusal all exist and
|
|
12
|
+
* are exercised by tests now, so the day a second, genuinely addressable workspace exists, delete
|
|
13
|
+
* works without further design.
|
|
14
|
+
*
|
|
15
|
+
* Architectural role:
|
|
16
|
+
* Ordinary slice function — not a port. `deps.repo.list()` is the count source; the guard
|
|
17
|
+
* check and the delete happen inside one `async` function body with no `await` yielded to another
|
|
18
|
+
* caller in between the count read and the delete write, which — under a single Node.js
|
|
19
|
+
* event-loop, no-concurrent-DB-transaction execution model (the same "atomic by construction"
|
|
20
|
+
* reasoning `identity/grant-service.ts`'s own header comment documents for its transitions, and the
|
|
21
|
+
* same model `DISABLE_PRINCIPAL`'s INV-08 count-check-then-disable already relies on) — is the
|
|
22
|
+
* atomicity INV-03 requires. A future multi-process/multi-connection deployment would need a real
|
|
23
|
+
* DB-level transaction here; flagged, not silently assumed away.
|
|
24
|
+
*/
|
|
25
|
+
/** Command payload for `DELETE_WORKSPACE`. */
|
|
26
|
+
export interface DeleteWorkspaceInput {
|
|
27
|
+
id: UUID;
|
|
28
|
+
}
|
|
29
|
+
/** Dependencies required by the delete-workspace slice. */
|
|
30
|
+
export interface DeleteWorkspaceDeps {
|
|
31
|
+
repo: WorkspaceRepoPort;
|
|
32
|
+
}
|
|
33
|
+
/** Required parameters for `deleteWorkspace`. */
|
|
34
|
+
export interface DeleteWorkspaceRequired {
|
|
35
|
+
deps: DeleteWorkspaceDeps;
|
|
36
|
+
input: DeleteWorkspaceInput;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Execute `DELETE_WORKSPACE` (REQ-05). Throws `WorkspaceNotFoundError` if `input.id` does not
|
|
40
|
+
* resolve to a row, else `WorkspaceLastRemainingError` (INV-03) if it is the only workspace row —
|
|
41
|
+
* which is always true in v1, so this transition always refuses today. No row is deleted on either
|
|
42
|
+
* rejection.
|
|
43
|
+
*
|
|
44
|
+
* @complexity O(n) in the total workspace count (`repo.list()`) — bounded by the same
|
|
45
|
+
* operator-managed-roster assumption `identity`'s `PrincipalRepoPort.list()` already makes; not a
|
|
46
|
+
* caller-controlled collection.
|
|
47
|
+
* @overallScore 100
|
|
48
|
+
*/
|
|
49
|
+
export declare function deleteWorkspace(required: DeleteWorkspaceRequired): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/workspace/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAuD,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1G;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;CACV;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CActF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { WorkspaceLastRemainingError, WorkspaceNotFoundError } from "./create.js";
|
|
2
|
+
/**
|
|
3
|
+
* Execute `DELETE_WORKSPACE` (REQ-05). Throws `WorkspaceNotFoundError` if `input.id` does not
|
|
4
|
+
* resolve to a row, else `WorkspaceLastRemainingError` (INV-03) if it is the only workspace row —
|
|
5
|
+
* which is always true in v1, so this transition always refuses today. No row is deleted on either
|
|
6
|
+
* rejection.
|
|
7
|
+
*
|
|
8
|
+
* @complexity O(n) in the total workspace count (`repo.list()`) — bounded by the same
|
|
9
|
+
* operator-managed-roster assumption `identity`'s `PrincipalRepoPort.list()` already makes; not a
|
|
10
|
+
* caller-controlled collection.
|
|
11
|
+
* @overallScore 100
|
|
12
|
+
*/
|
|
13
|
+
export async function deleteWorkspace(required) {
|
|
14
|
+
const { deps, input } = required;
|
|
15
|
+
const existing = await deps.repo.findById(input.id);
|
|
16
|
+
if (!existing)
|
|
17
|
+
throw new WorkspaceNotFoundError(`workspace '${input.id}' was not found`);
|
|
18
|
+
const all = await deps.repo.list();
|
|
19
|
+
if (all.length <= 1) {
|
|
20
|
+
throw new WorkspaceLastRemainingError("the install's last remaining workspace cannot be deleted (INV-03)");
|
|
21
|
+
}
|
|
22
|
+
await deps.repo.delete(input.id);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/workspace/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAA0B,MAAM,aAAa,CAAC;AAyC1G;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiC;IACrE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,cAAc,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,2BAA2B,CACnC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Public surface (barrel) for the `workspace` library.
|
|
3
|
+
*
|
|
4
|
+
* A module's public contract is its `index.ts` (module-boundary convention) — deep imports from
|
|
5
|
+
* outside this directory should go through here.
|
|
6
|
+
*/
|
|
7
|
+
export { createWorkspace, validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceLastRemainingError, WorkspaceNotFoundError, WorkspaceValidationError, type CreateWorkspaceDeps, type CreateWorkspaceInput, type CreateWorkspaceRequired, type CreateWorkspaceOptional, type WorkspaceRecord, type WorkspaceRepoPort, } from "./create.js";
|
|
8
|
+
export { updateWorkspace, type UpdateWorkspaceDeps, type UpdateWorkspaceInput, type UpdateWorkspaceRequired, } from "./update.js";
|
|
9
|
+
export { deleteWorkspace, type DeleteWorkspaceDeps, type DeleteWorkspaceInput, type DeleteWorkspaceRequired, } from "./delete.js";
|
|
10
|
+
export { InMemoryWorkspaceRepo } from "./repo.memory.js";
|
|
11
|
+
/** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
|
|
12
|
+
export { getWorkspaceAgentToolCatalog, type AgentToolDefinition as WorkspaceAgentToolDefinition, type AgentToolSideEffect as WorkspaceAgentToolSideEffect, type AgentToolActorClassRule as WorkspaceAgentToolActorClassRule, } from "./agent-tools.js";
|
|
13
|
+
/**
|
|
14
|
+
* The agent-tool wiring for this domain.
|
|
15
|
+
*
|
|
16
|
+
* `WorkspaceToolDeps` is declared structurally rather than derived from any host's request-scoped
|
|
17
|
+
* dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
|
|
18
|
+
* the shape is the contract, so no host type needs to be named here.
|
|
19
|
+
*/
|
|
20
|
+
export { buildWorkspaceRegistrations, workspaceDerivedRisk, type WorkspaceToolDeps, } from "./tool-registrations.js";
|
|
21
|
+
/**
|
|
22
|
+
* There is no SQLite adapter export here, deliberately. A concrete `WorkspaceRepoPort` over a
|
|
23
|
+
* specific database handle names that host's schema, which would put one host's persistence choice
|
|
24
|
+
* on this library's public contract and drag its schema into every consumer's dependency closure.
|
|
25
|
+
* Hosts compose their own; this entry point exports the port they compose against.
|
|
26
|
+
*/
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,sGAAsG;AACtG,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,mBAAmB,IAAI,4BAA4B,EACxD,KAAK,uBAAuB,IAAI,gCAAgC,GACjE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Public surface (barrel) for the `workspace` library.
|
|
3
|
+
*
|
|
4
|
+
* A module's public contract is its `index.ts` (module-boundary convention) — deep imports from
|
|
5
|
+
* outside this directory should go through here.
|
|
6
|
+
*/
|
|
7
|
+
export { createWorkspace, validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceLastRemainingError, WorkspaceNotFoundError, WorkspaceValidationError, } from "./create.js";
|
|
8
|
+
export { updateWorkspace, } from "./update.js";
|
|
9
|
+
export { deleteWorkspace, } from "./delete.js";
|
|
10
|
+
export { InMemoryWorkspaceRepo } from "./repo.memory.js";
|
|
11
|
+
/** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
|
|
12
|
+
export { getWorkspaceAgentToolCatalog, } from "./agent-tools.js";
|
|
13
|
+
/**
|
|
14
|
+
* The agent-tool wiring for this domain.
|
|
15
|
+
*
|
|
16
|
+
* `WorkspaceToolDeps` is declared structurally rather than derived from any host's request-scoped
|
|
17
|
+
* dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
|
|
18
|
+
* the shape is the contract, so no host type needs to be named here.
|
|
19
|
+
*/
|
|
20
|
+
export { buildWorkspaceRegistrations, workspaceDerivedRisk, } from "./tool-registrations.js";
|
|
21
|
+
/**
|
|
22
|
+
* There is no SQLite adapter export here, deliberately. A concrete `WorkspaceRepoPort` over a
|
|
23
|
+
* specific database handle names that host's schema, which would put one host's persistence choice
|
|
24
|
+
* on this library's public contract and drag its schema into every consumer's dependency closure.
|
|
25
|
+
* Hosts compose their own; this entry point exports the port they compose against.
|
|
26
|
+
*/
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,GAOzB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,sGAAsG;AACtG,OAAO,EACL,4BAA4B,GAI7B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { WorkspaceRecord, WorkspaceRepoPort } from "./create.js";
|
|
2
|
+
/**
|
|
3
|
+
* @file In-memory workspace repository adapter.
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* Provides a local `WorkspaceRepoPort` implementation for development/tests.
|
|
7
|
+
*
|
|
8
|
+
* How it relates to the package:
|
|
9
|
+
* - Satisfies the repository contract defined in `./create.ts`.
|
|
10
|
+
* - Injected by a host during runtime composition.
|
|
11
|
+
* - Used by slice tests for database-free verification.
|
|
12
|
+
*
|
|
13
|
+
* Architectural role:
|
|
14
|
+
* Temporary/local adapter. A database-backed adapter (which a host owns, since it names that
|
|
15
|
+
* host's schema) implements the same interface so slice logic remains unchanged.
|
|
16
|
+
*/
|
|
17
|
+
export declare class InMemoryWorkspaceRepo implements WorkspaceRepoPort {
|
|
18
|
+
/** Internal record storage. */
|
|
19
|
+
private rows;
|
|
20
|
+
constructor(initialRows?: WorkspaceRecord[]);
|
|
21
|
+
/** Insert one workspace record. */
|
|
22
|
+
insert(record: WorkspaceRecord): Promise<void>;
|
|
23
|
+
/** Find workspace by unique slug. */
|
|
24
|
+
findBySlug(slug: string): Promise<WorkspaceRecord | null>;
|
|
25
|
+
/** Find workspace by id. */
|
|
26
|
+
findById(id: string): Promise<WorkspaceRecord | null>;
|
|
27
|
+
/** All workspace rows (v1 always has exactly one — see `delete.ts`'s header). */
|
|
28
|
+
list(): Promise<WorkspaceRecord[]>;
|
|
29
|
+
/** Replace the row matching `record.id` in place. */
|
|
30
|
+
update(record: WorkspaceRecord): Promise<void>;
|
|
31
|
+
/** Remove the row matching `id`, if present (idempotent). */
|
|
32
|
+
delete(id: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=repo.memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/workspace/repo.memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,+BAA+B;IAC/B,OAAO,CAAC,IAAI,CAAoB;gBAEpB,WAAW,GAAE,eAAe,EAAO;IAI/C,mCAAmC;IAC7B,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,qCAAqC;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI/D,4BAA4B;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI3D,iFAAiF;IAC3E,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,qDAAqD;IAC/C,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,6DAA6D;IACvD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file In-memory workspace repository adapter.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* Provides a local `WorkspaceRepoPort` implementation for development/tests.
|
|
6
|
+
*
|
|
7
|
+
* How it relates to the package:
|
|
8
|
+
* - Satisfies the repository contract defined in `./create.ts`.
|
|
9
|
+
* - Injected by a host during runtime composition.
|
|
10
|
+
* - Used by slice tests for database-free verification.
|
|
11
|
+
*
|
|
12
|
+
* Architectural role:
|
|
13
|
+
* Temporary/local adapter. A database-backed adapter (which a host owns, since it names that
|
|
14
|
+
* host's schema) implements the same interface so slice logic remains unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export class InMemoryWorkspaceRepo {
|
|
17
|
+
/** Internal record storage. */
|
|
18
|
+
rows;
|
|
19
|
+
constructor(initialRows = []) {
|
|
20
|
+
this.rows = [...initialRows];
|
|
21
|
+
}
|
|
22
|
+
/** Insert one workspace record. */
|
|
23
|
+
async insert(record) {
|
|
24
|
+
this.rows.push(record);
|
|
25
|
+
}
|
|
26
|
+
/** Find workspace by unique slug. */
|
|
27
|
+
async findBySlug(slug) {
|
|
28
|
+
return this.rows.find((row) => row.slug === slug) ?? null;
|
|
29
|
+
}
|
|
30
|
+
/** Find workspace by id. */
|
|
31
|
+
async findById(id) {
|
|
32
|
+
return this.rows.find((row) => row.id === id) ?? null;
|
|
33
|
+
}
|
|
34
|
+
/** All workspace rows (v1 always has exactly one — see `delete.ts`'s header). */
|
|
35
|
+
async list() {
|
|
36
|
+
return [...this.rows];
|
|
37
|
+
}
|
|
38
|
+
/** Replace the row matching `record.id` in place. */
|
|
39
|
+
async update(record) {
|
|
40
|
+
const index = this.rows.findIndex((row) => row.id === record.id);
|
|
41
|
+
if (index === -1)
|
|
42
|
+
return;
|
|
43
|
+
this.rows[index] = record;
|
|
44
|
+
}
|
|
45
|
+
/** Remove the row matching `id`, if present (idempotent). */
|
|
46
|
+
async delete(id) {
|
|
47
|
+
this.rows = this.rows.filter((row) => row.id !== id);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=repo.memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/workspace/repo.memory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IAChC,+BAA+B;IACvB,IAAI,CAAoB;IAEhC,YAAY,cAAiC,EAAE;QAC7C,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,MAAM,CAAC,MAAuB;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAC5D,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,MAAM,CAAC,MAAuB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Workspace's half of the cross-domain agent-tool wiring split: maps the wireable subset of
|
|
3
|
+
* `agent-tools.ts`'s four catalog entries onto the current-workspace read and the narrow rename
|
|
4
|
+
* write, as `ToolRegistration`s.
|
|
5
|
+
*
|
|
6
|
+
* Risk framing: this is the highest-stakes domain wired so far — `create` and `delete` are
|
|
7
|
+
* deliberately excluded, each with its reason recorded on {@link UNWIRED_WORKSPACE_TOOL_IDS}; see
|
|
8
|
+
* `./agent-tools.ts`'s own file header for the full reasoning. Only a plain rename (`update`) is
|
|
9
|
+
* wired, alongside a read.
|
|
10
|
+
*
|
|
11
|
+
* Authorization shape: neither `updateWorkspace` (`update.ts`) nor a direct `workspaceRepo.findById`
|
|
12
|
+
* read calls `authorize()` internally — a host's admin routes gate inline — so both handlers here
|
|
13
|
+
* call the kit's `requireToolPermission` themselves, mirroring those routes' identical
|
|
14
|
+
* `workspace.manage` check.
|
|
15
|
+
*/
|
|
16
|
+
import type { AuthorizeFn } from "../core/commands/command.js";
|
|
17
|
+
import { type DerivedRiskByToolId, type ToolRegistration } from "../core/tools/registration-kit.js";
|
|
18
|
+
import type { WorkspaceRepoPort } from "./create.js";
|
|
19
|
+
/**
|
|
20
|
+
* The exact slice of a host's route-deps bag Workspace's tool handlers read. Declared structurally
|
|
21
|
+
* (rather than importing any host's `RouteDeps`) so this module carries no back-edge into a
|
|
22
|
+
* composition root. A host satisfies this structurally by passing its existing deps object;
|
|
23
|
+
* nothing there changes.
|
|
24
|
+
*/
|
|
25
|
+
export interface WorkspaceToolDeps {
|
|
26
|
+
authorize: AuthorizeFn;
|
|
27
|
+
workspaceId: string;
|
|
28
|
+
workspaceRepo: WorkspaceRepoPort;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* This wiring layer's OWN risk classification, authored from what each handler below actually
|
|
32
|
+
* calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
|
|
33
|
+
* `sideEffects` declaration — and note that the two excluded tools appear NOWHERE here, which is
|
|
34
|
+
* itself the strongest of the guards: an unclassified id cannot be wired at all.
|
|
35
|
+
*/
|
|
36
|
+
export declare const workspaceDerivedRisk: DerivedRiskByToolId;
|
|
37
|
+
export declare function buildWorkspaceRegistrations(routeDeps: WorkspaceToolDeps): ToolRegistration[];
|
|
38
|
+
//# sourceMappingURL=tool-registrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/workspace/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,mBAQjC,CAAC;AAcH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CA2C5F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { buildDomainRegistrations, indexCatalogById, optionalString, requireInputRecord, requireNoInput, requireToolPermission, } from "../core/tools/registration-kit.js";
|
|
2
|
+
import { getWorkspaceAgentToolCatalog } from "./agent-tools.js";
|
|
3
|
+
import { updateWorkspace } from "./update.js";
|
|
4
|
+
const CATALOG_BY_ID = indexCatalogById(getWorkspaceAgentToolCatalog());
|
|
5
|
+
/**
|
|
6
|
+
* This wiring layer's OWN risk classification, authored from what each handler below actually
|
|
7
|
+
* calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
|
|
8
|
+
* `sideEffects` declaration — and note that the two excluded tools appear NOWHERE here, which is
|
|
9
|
+
* itself the strongest of the guards: an unclassified id cannot be wired at all.
|
|
10
|
+
*/
|
|
11
|
+
export const workspaceDerivedRisk = new Map([
|
|
12
|
+
// -> routeDeps.workspaceRepo.findById(): one read, no domain function of its own (mirrors a
|
|
13
|
+
// host's own admin workspace-get route making the same direct repo call).
|
|
14
|
+
["workspace_get", "none"],
|
|
15
|
+
// -> updateWorkspace (update.ts) -> repo.findById + repo.findBySlug + repo.update: validates,
|
|
16
|
+
// checks slug uniqueness excluding the row itself, writes. No domain event enqueued (matches
|
|
17
|
+
// update.ts's own header: REQ-04 doesn't ask for one).
|
|
18
|
+
["workspace_update", "mutates-durable-state"],
|
|
19
|
+
]);
|
|
20
|
+
/** Workspace catalog entries this pass does not wire, and why — see `./agent-tools.ts`'s own per-entry comments for the full reasoning. */
|
|
21
|
+
const UNWIRED_WORKSPACE_TOOL_IDS = new Set([
|
|
22
|
+
// EXCLUDED BY DESIGN: inserts a row no other route can ever address (every workspace route
|
|
23
|
+
// resolves strictly against the boot-wired `workspaceId`) — zero utility, non-zero
|
|
24
|
+
// orphaned-row/clutter surface.
|
|
25
|
+
"workspace_create",
|
|
26
|
+
// EXCLUDED BY DESIGN: INV-03-guarded to always refuse today, but the lever removes the only
|
|
27
|
+
// addressable workspace scope the moment that guard's precondition ever changes — whole-scope,
|
|
28
|
+
// no per-domain undo, same exclusion class as a forward database migration or a backup restore.
|
|
29
|
+
"workspace_delete",
|
|
30
|
+
]);
|
|
31
|
+
export function buildWorkspaceRegistrations(routeDeps) {
|
|
32
|
+
const handlers = {
|
|
33
|
+
workspace_get: async (ctx) => {
|
|
34
|
+
requireNoInput(ctx.input);
|
|
35
|
+
await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "workspace.manage", entityType: "workspace" });
|
|
36
|
+
const workspace = await routeDeps.workspaceRepo.findById(routeDeps.workspaceId);
|
|
37
|
+
if (!workspace) {
|
|
38
|
+
// Defensive: the boot-wired workspaceId always resolves to a real row by construction.
|
|
39
|
+
// Not an expected runtime path.
|
|
40
|
+
throw new Error(`workspace '${routeDeps.workspaceId}' was not found`);
|
|
41
|
+
}
|
|
42
|
+
return { workspace };
|
|
43
|
+
},
|
|
44
|
+
workspace_update: async (ctx) => {
|
|
45
|
+
const input = requireInputRecord(ctx.input);
|
|
46
|
+
await requireToolPermission(routeDeps, { principalId: ctx.principal.id, permission: "workspace.manage", entityType: "workspace" });
|
|
47
|
+
// WorkspaceValidationError/WorkspaceConflictError/WorkspaceNotFoundError (all real `Error`
|
|
48
|
+
// subclasses, see `create.ts`) propagate as-is — a `ToolExecutor` treats any thrown error as
|
|
49
|
+
// a failed execution, matching every other domain's handler convention of not rewrapping
|
|
50
|
+
// typed domain errors before letting them surface.
|
|
51
|
+
const { workspace } = await updateWorkspace({
|
|
52
|
+
deps: { repo: routeDeps.workspaceRepo },
|
|
53
|
+
input: {
|
|
54
|
+
id: routeDeps.workspaceId,
|
|
55
|
+
name: optionalString(input, "name"),
|
|
56
|
+
slug: optionalString(input, "slug"),
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
return { workspace };
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
return buildDomainRegistrations({
|
|
63
|
+
domain: "workspace",
|
|
64
|
+
catalogModule: "workspace/agent-tools.ts",
|
|
65
|
+
catalog: CATALOG_BY_ID,
|
|
66
|
+
handlers,
|
|
67
|
+
derivedRisk: workspaceDerivedRisk,
|
|
68
|
+
unwiredToolIds: UNWIRED_WORKSPACE_TOOL_IDS,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=tool-registrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/workspace/tool-registrations.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GAKtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,CAAC;AAcvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAA8B;IAC5F,4FAA4F;IAC5F,6EAA6E;IAC7E,CAAC,eAAe,EAAE,MAAM,CAAC;IACzB,8FAA8F;IAC9F,gGAAgG;IAChG,0DAA0D;IAC1D,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;CAC9C,CAAC,CAAC;AAEH,2IAA2I;AAC3I,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,2FAA2F;IAC3F,mFAAmF;IACnF,gCAAgC;IAChC,kBAAkB;IAClB,4FAA4F;IAC5F,+FAA+F;IAC/F,gGAAgG;IAChG,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,UAAU,2BAA2B,CAAC,SAA4B;IACtE,MAAM,QAAQ,GAAgC;QAC5C,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC3B,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,qBAAqB,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAEnI,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAChF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,uFAAuF;gBACvF,gCAAgC;gBAChC,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,WAAW,iBAAiB,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,qBAAqB,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAEnI,2FAA2F;YAC3F,6FAA6F;YAC7F,yFAAyF;YACzF,mDAAmD;YACnD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,CAAC;gBAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,aAAa,EAAE;gBACvC,KAAK,EAAE;oBACL,EAAE,EAAE,SAAS,CAAC,WAAW;oBACzB,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;oBACnC,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;iBACpC;aACF,CAAC,CAAC;YACH,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,wBAAwB,CAAC;QAC9B,MAAM,EAAE,WAAW;QACnB,aAAa,EAAE,0BAA0B;QACzC,OAAO,EAAE,aAAa;QACtB,QAAQ;QACR,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,0BAA0B;KAC3C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { UUID } from "../core/ports.js";
|
|
2
|
+
import { type WorkspaceRecord, type WorkspaceRepoPort } from "./create.js";
|
|
3
|
+
/**
|
|
4
|
+
* @file `UPDATE_WORKSPACE` — rename a workspace's `name` and/or `slug`.
|
|
5
|
+
*
|
|
6
|
+
* Purpose:
|
|
7
|
+
* The one mutating transition this feature adds beyond create/delete. Mirrors `create.ts`'s
|
|
8
|
+
* validate -> check-constraints -> persist shape (no domain event is enqueued here — the
|
|
9
|
+
* requirement doesn't ask for one, and no consumer subscribes to a workspace-renamed topic yet; add
|
|
10
|
+
* one the same way `createWorkspace` does if a real consumer appears, rather than emitting a
|
|
11
|
+
* speculative event now).
|
|
12
|
+
*
|
|
13
|
+
* Architectural role:
|
|
14
|
+
* Ordinary slice function, not a port — one implementation, the rule-of-two doesn't
|
|
15
|
+
* apply to business logic, only to the repo/outbox seams it calls through `WorkspaceRepoPort`.
|
|
16
|
+
*/
|
|
17
|
+
/** Command payload for `UPDATE_WORKSPACE`. At least one of `name`/`slug` must be present (EC-01). */
|
|
18
|
+
export interface UpdateWorkspaceInput {
|
|
19
|
+
id: UUID;
|
|
20
|
+
name?: string | undefined;
|
|
21
|
+
slug?: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
/** Dependencies required by the update-workspace slice. */
|
|
24
|
+
export interface UpdateWorkspaceDeps {
|
|
25
|
+
repo: WorkspaceRepoPort;
|
|
26
|
+
}
|
|
27
|
+
/** Required parameters for `updateWorkspace`. */
|
|
28
|
+
export interface UpdateWorkspaceRequired {
|
|
29
|
+
deps: UpdateWorkspaceDeps;
|
|
30
|
+
input: UpdateWorkspaceInput;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Execute `UPDATE_WORKSPACE` (REQ-04). At least one of `name`/`slug` must be present in the input
|
|
34
|
+
* (EC-01 — an empty-object update is rejected, not a silent no-op, so a client-side bug that drops
|
|
35
|
+
* both fields fails loudly instead of masquerading as a successful save). When only one field is
|
|
36
|
+
* given, the other keeps its current stored value; both are re-validated together through
|
|
37
|
+
* `validateWorkspaceNameAndSlug` either way, so a `slug`-only update still catches a blank stored
|
|
38
|
+
* `name` (defensive; `name` can never actually be blank in practice since `createWorkspace` already
|
|
39
|
+
* rejects that, but re-validating both together — rather than only the changed field — keeps this
|
|
40
|
+
* function's invariant identical to `createWorkspace`'s with no special-cased partial path).
|
|
41
|
+
*
|
|
42
|
+
* The slug-uniqueness check excludes the row being updated (EC-02 — a workspace is never "in
|
|
43
|
+
* conflict with itself"): `findBySlug` naturally excludes it whenever the row's own `id` matches,
|
|
44
|
+
* since that's a no-op rename, not a collision with a *different* row.
|
|
45
|
+
*
|
|
46
|
+
* @complexity O(1) — one lookup by id, one lookup by slug, one write.
|
|
47
|
+
* @overallScore 100
|
|
48
|
+
*/
|
|
49
|
+
export declare function updateWorkspace(required: UpdateWorkspaceRequired): Promise<{
|
|
50
|
+
workspace: WorkspaceRecord;
|
|
51
|
+
}>;
|
|
52
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/workspace/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;GAaG;AAEH,qGAAqG;AACrG,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,eAAe,CAAA;CAAE,CAAC,CAyBhH"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { validateWorkspaceNameAndSlug, WorkspaceConflictError, WorkspaceNotFoundError, WorkspaceValidationError, } from "./create.js";
|
|
2
|
+
/**
|
|
3
|
+
* Execute `UPDATE_WORKSPACE` (REQ-04). At least one of `name`/`slug` must be present in the input
|
|
4
|
+
* (EC-01 — an empty-object update is rejected, not a silent no-op, so a client-side bug that drops
|
|
5
|
+
* both fields fails loudly instead of masquerading as a successful save). When only one field is
|
|
6
|
+
* given, the other keeps its current stored value; both are re-validated together through
|
|
7
|
+
* `validateWorkspaceNameAndSlug` either way, so a `slug`-only update still catches a blank stored
|
|
8
|
+
* `name` (defensive; `name` can never actually be blank in practice since `createWorkspace` already
|
|
9
|
+
* rejects that, but re-validating both together — rather than only the changed field — keeps this
|
|
10
|
+
* function's invariant identical to `createWorkspace`'s with no special-cased partial path).
|
|
11
|
+
*
|
|
12
|
+
* The slug-uniqueness check excludes the row being updated (EC-02 — a workspace is never "in
|
|
13
|
+
* conflict with itself"): `findBySlug` naturally excludes it whenever the row's own `id` matches,
|
|
14
|
+
* since that's a no-op rename, not a collision with a *different* row.
|
|
15
|
+
*
|
|
16
|
+
* @complexity O(1) — one lookup by id, one lookup by slug, one write.
|
|
17
|
+
* @overallScore 100
|
|
18
|
+
*/
|
|
19
|
+
export async function updateWorkspace(required) {
|
|
20
|
+
const { deps, input } = required;
|
|
21
|
+
if (input.name === undefined && input.slug === undefined) {
|
|
22
|
+
throw new WorkspaceValidationError("at least one of name or slug is required");
|
|
23
|
+
}
|
|
24
|
+
const existing = await deps.repo.findById(input.id);
|
|
25
|
+
if (!existing)
|
|
26
|
+
throw new WorkspaceNotFoundError(`workspace '${input.id}' was not found`);
|
|
27
|
+
const { name, slug } = validateWorkspaceNameAndSlug({
|
|
28
|
+
name: input.name ?? existing.name,
|
|
29
|
+
slug: input.slug ?? existing.slug,
|
|
30
|
+
});
|
|
31
|
+
if (slug !== existing.slug) {
|
|
32
|
+
const collision = await deps.repo.findBySlug(slug);
|
|
33
|
+
if (collision && collision.id !== existing.id) {
|
|
34
|
+
throw new WorkspaceConflictError(`slug '${slug}' already exists`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const updated = { ...existing, name, slug };
|
|
38
|
+
await deps.repo.update(updated);
|
|
39
|
+
return { workspace: updated };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/workspace/update.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GAGzB,MAAM,aAAa,CAAC;AAmCrB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiC;IACrE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzD,MAAM,IAAI,wBAAwB,CAAC,0CAA0C,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,cAAc,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,4BAA4B,CAAC;QAClD,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,sBAAsB,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|