@shepai/cli 1.174.0 → 1.175.0-pr527.9ada632
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/apis/json-schema/ActionDispositionEntry.yaml +14 -0
- package/apis/json-schema/DependencyFinding.yaml +28 -0
- package/apis/json-schema/DependencyRiskType.yaml +11 -0
- package/apis/json-schema/DependencyRules.yaml +38 -0
- package/apis/json-schema/EffectivePolicySnapshot.yaml +24 -0
- package/apis/json-schema/ReleaseIntegrityCheck.yaml +22 -0
- package/apis/json-schema/ReleaseIntegrityCheckType.yaml +9 -0
- package/apis/json-schema/ReleaseIntegrityResult.yaml +16 -0
- package/apis/json-schema/ReleaseRules.yaml +21 -0
- package/apis/json-schema/Repository.yaml +6 -0
- package/apis/json-schema/SecurityActionCategory.yaml +10 -0
- package/apis/json-schema/SecurityActionDisposition.yaml +8 -0
- package/apis/json-schema/SecurityConfig.yaml +17 -0
- package/apis/json-schema/SecurityEvent.yaml +36 -0
- package/apis/json-schema/SecurityMode.yaml +8 -0
- package/apis/json-schema/SecurityPolicy.yaml +24 -0
- package/apis/json-schema/SecuritySeverity.yaml +9 -0
- package/apis/json-schema/Settings.yaml +3 -0
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +15 -1
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +3 -1
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +3 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts +76 -0
- package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/repositories/security-event.repository.interface.js +11 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +28 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.js +2 -0
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +85 -0
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +21 -0
- package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts +77 -0
- package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.d.ts.map +1 -0
- package/dist/packages/core/src/application/ports/output/services/security-policy-service.interface.js +13 -0
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +11 -0
- package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +2 -0
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +2 -0
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/check-and-unblock-features.use-case.js +2 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts +67 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js +128 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +1 -0
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -0
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +2 -0
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +16 -5
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +76 -14
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts +30 -0
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js +51 -0
- package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts +71 -0
- package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/security/enforce-security.use-case.js +215 -0
- package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts +24 -0
- package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/security/evaluate-security-policy.use-case.js +56 -0
- package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts +36 -0
- package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/security/get-security-state.use-case.js +76 -0
- package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts +14 -0
- package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/security/record-security-event.use-case.js +46 -0
- package/dist/packages/core/src/domain/errors/security-violation.error.d.ts +15 -0
- package/dist/packages/core/src/domain/errors/security-violation.error.d.ts.map +1 -0
- package/dist/packages/core/src/domain/errors/security-violation.error.js +20 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +5 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +267 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +43 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +67 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts +44 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/security-event.mapper.js +55 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +14 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts +18 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/053-add-security-settings-columns.js +31 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts +29 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/054-create-security-events-table.js +53 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.js +26 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +2 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +14 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts +24 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-security-event.repository.js +96 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +12 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +12 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts +22 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/security-constraint-validator.js +30 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +10 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +34 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +7 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +32 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +19 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts +45 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/security-pre-check.js +70 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +4 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +10 -0
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +13 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +155 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +15 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +62 -0
- package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts +53 -0
- package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/security/dependency-risk-evaluator.js +241 -0
- package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts +44 -0
- package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/security/release-integrity-evaluator.js +194 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts +28 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-file-reader.js +50 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts +26 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy-validator.js +147 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts +44 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/security/security-policy.service.js +174 -0
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +61 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +32 -6
- package/dist/src/presentation/cli/commands/repo/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/repo/index.js +3 -1
- package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts +15 -0
- package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/repo/init-remote.command.js +44 -0
- package/dist/src/presentation/cli/commands/security.command.d.ts +16 -0
- package/dist/src/presentation/cli/commands/security.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/security.command.js +118 -0
- package/dist/src/presentation/cli/index.js +2 -0
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +2 -1
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts +31 -0
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.js +69 -0
- package/dist/src/presentation/web/app/actions/import-github-repository.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/import-github-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/import-github-repository.js +1 -1
- package/dist/src/presentation/web/app/actions/security.d.ts +28 -0
- package/dist/src/presentation/web/app/actions/security.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/security.js +59 -0
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts +3 -1
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.js +22 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +2 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts +3 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +3 -2
- package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts +6 -0
- package/dist/src/presentation/web/components/common/repository-node/security-panel.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/repository-node/security-panel.js +29 -0
- package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts +10 -0
- package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/repository-node/security-panel.stories.js +53 -0
- package/dist/src/presentation/web/components/common/security-badge.d.ts +7 -0
- package/dist/src/presentation/web/components/common/security-badge.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/security-badge.js +30 -0
- package/dist/src/presentation/web/components/common/security-badge.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/security-badge.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/security-badge.stories.js +20 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +16 -3
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts +6 -0
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.js +60 -0
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/settings/supply-chain-security-settings-section.stories.js +116 -0
- package/dist/src/presentation/web/lib/feature-flags.js +1 -1
- package/dist/translations/ar/cli.json +32 -0
- package/dist/translations/ar/web.json +43 -1
- package/dist/translations/de/cli.json +32 -0
- package/dist/translations/de/web.json +43 -1
- package/dist/translations/en/cli.json +32 -0
- package/dist/translations/en/web.json +43 -1
- package/dist/translations/es/cli.json +32 -0
- package/dist/translations/es/web.json +43 -1
- package/dist/translations/fr/cli.json +32 -0
- package/dist/translations/fr/web.json +43 -1
- package/dist/translations/he/cli.json +32 -0
- package/dist/translations/he/web.json +43 -1
- package/dist/translations/pt/cli.json +32 -0
- package/dist/translations/pt/web.json +43 -1
- package/dist/translations/ru/cli.json +32 -0
- package/dist/translations/ru/web.json +43 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js +2 -1
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +2 -1
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +33 -18
- package/web/.next/server/app/settings/page.js +1 -1
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/skills/page.js +2 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +2 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a2d6c0ac._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a2d6c0ac._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_08eaf4b1._.js +3 -0
- package/web/.next/server/chunks/ssr/_08eaf4b1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_295fffde._.js +1 -1
- package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_3686b70d._.js +3 -0
- package/web/.next/server/chunks/ssr/_3686b70d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_3a71f39b._.js → _45286124._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_3a71f39b._.js.map → _45286124._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js +1 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_783debcb._.js +9 -0
- package/web/.next/server/chunks/ssr/_783debcb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_7953be4d._.js → _d943aad7._.js} +2 -2
- package/web/.next/server/chunks/ssr/_d943aad7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js +4 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ff04802c._.js +3 -0
- package/web/.next/server/chunks/ssr/_ff04802c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_db9fa0c2._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -0
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +74 -59
- package/web/.next/static/chunks/{ad47bc6ddec7508e.js → 128f165077681f87.js} +2 -2
- package/web/.next/static/chunks/20ec94c610d07a10.css +1 -0
- package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
- package/web/.next/static/chunks/{6bc240cd4ae43267.js → 34e82d5f47b938e3.js} +1 -1
- package/web/.next/static/chunks/38c5a2cc4ce5d4d2.js +1 -0
- package/web/.next/static/chunks/3aba9d2242420cb5.js +1 -0
- package/web/.next/static/chunks/4981e52ed9b5dea3.js +1 -0
- package/web/.next/static/chunks/{a060ad1bb509687f.js → 4a909223df60de49.js} +1 -1
- package/web/.next/static/chunks/5858b85217fd0ead.js +1 -0
- package/web/.next/static/chunks/{a2a03ecb10000974.js → 68a0d1e04c636c09.js} +1 -1
- package/web/.next/static/chunks/{393b27ab5de6c454.js → 85473115de724a77.js} +1 -1
- package/web/.next/static/chunks/{d9c9db1823b4dffd.js → 8a5c7d80045a8f49.js} +2 -2
- package/web/.next/static/chunks/{5a2e1c8699897c26.js → 90c687976b254681.js} +3 -3
- package/web/.next/static/chunks/aab749e78b4c10bc.js +1 -0
- package/web/.next/static/chunks/{534194b584a151ed.js → ac18577f94d63177.js} +1 -1
- package/web/.next/static/chunks/ae81796726a9bba3.js +1 -0
- package/web/.next/static/chunks/{6dc0a23d333274ae.js → af9ee4accaa11f83.js} +2 -2
- package/web/.next/static/chunks/{c164b157638b2a8b.js → b082a6bb7e17b701.js} +1 -1
- package/web/.next/static/chunks/{b49ab0b290e9342d.js → b46545caae3b4930.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +0 -4
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +0 -4
- package/web/.next/server/chunks/ssr/_18886033._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +0 -4
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +0 -3
- package/web/.next/server/chunks/ssr/_43ba79e7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7953be4d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_7cb0396e._.js +0 -3
- package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +0 -4
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js +0 -4
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +0 -4
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e680c57c._.js +0 -9
- package/web/.next/server/chunks/ssr/_e680c57c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +0 -4
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +0 -6
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +0 -6
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +0 -4
- package/web/.next/server/chunks/ssr/_f8b45233._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_fd595af2._.js +0 -3
- package/web/.next/server/chunks/ssr/_fd595af2._.js.map +0 -1
- package/web/.next/static/chunks/0baf5a2e56d191cf.js +0 -1
- package/web/.next/static/chunks/32c46154c31c58fc.js +0 -1
- package/web/.next/static/chunks/84b480808bd74fa9.css +0 -1
- package/web/.next/static/chunks/8b0a9cb5109fe899.js +0 -1
- package/web/.next/static/chunks/b65e555419a0c664.js +0 -1
- package/web/.next/static/chunks/e30aa6d2cf824fa1.js +0 -1
- package/web/.next/static/chunks/f5abbc495d496f5b.js +0 -1
- /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → PEEwFezIwaFMSsCXbx5zQ}/_buildManifest.js +0 -0
- /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → PEEwFezIwaFMSsCXbx5zQ}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{nLYXtW5TIrvQiMl1yyD4O → PEEwFezIwaFMSsCXbx5zQ}/_ssgManifest.js +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import type { ISpecInitializerService, SpecInitializerResult } from '../../../application/ports/output/services/spec-initializer.interface.js';
|
|
9
9
|
export declare class SpecInitializerService implements ISpecInitializerService {
|
|
10
10
|
initialize(basePath: string, slug: string, featureNumber: number, description: string, mode?: 'fast'): Promise<SpecInitializerResult>;
|
|
11
|
+
scaffoldSecurityPolicy(repositoryPath: string): Promise<string>;
|
|
11
12
|
/**
|
|
12
13
|
* Scan specs/ for existing NNN-* directories and return the next available number.
|
|
13
14
|
* Uses the DB-derived hint as a minimum, but always respects filesystem state.
|
package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,mEAAmE,CAAC;
|
|
1
|
+
{"version":3,"file":"spec-initializer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/spec/spec-initializer.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,mEAAmE,CAAC;AAwT3E,qBAAa,sBAAuB,YAAW,uBAAuB;IAC9D,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAqC3B,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMrE;;;OAGG;YACW,iBAAiB;CAoBhC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { mkdir, readdir, writeFile } from 'node:fs/promises';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
+
import { SECURITY_POLICY_FILENAME } from '../../services/security/security-policy-file-reader.js';
|
|
10
11
|
/**
|
|
11
12
|
* Pad a number to 3 digits with leading zeros.
|
|
12
13
|
*/
|
|
@@ -239,6 +240,61 @@ const TEMPLATES = [
|
|
|
239
240
|
{ filename: 'tasks.yaml', content: TASKS_YAML },
|
|
240
241
|
{ filename: 'feature.yaml', content: FEATURE_YAML },
|
|
241
242
|
];
|
|
243
|
+
// ─── Security Policy Template ─────────────────────────────────────
|
|
244
|
+
// Baseline shep.security.yaml for new repositories.
|
|
245
|
+
const SECURITY_POLICY_YAML = `# Shep Supply Chain Security Policy
|
|
246
|
+
# This file defines the security posture for this repository.
|
|
247
|
+
# Shep evaluates this policy during agent execution and CI enforcement.
|
|
248
|
+
#
|
|
249
|
+
# Docs: https://shep.bot/docs/security/policy
|
|
250
|
+
|
|
251
|
+
# Security mode controls enforcement behavior:
|
|
252
|
+
# Disabled - Security checks are skipped entirely
|
|
253
|
+
# Advisory - Checks run and findings are reported, but nothing is blocked
|
|
254
|
+
# Enforce - Checks run and violations block agent actions and CI jobs
|
|
255
|
+
mode: Advisory
|
|
256
|
+
|
|
257
|
+
# Action dispositions control how the agent handles each action category.
|
|
258
|
+
# Each entry maps a category to a disposition:
|
|
259
|
+
# Allowed - Action proceeds without interruption
|
|
260
|
+
# Denied - Action is blocked before execution
|
|
261
|
+
# ApprovalRequired - Action pauses for human approval via HITL gate
|
|
262
|
+
actionDispositions:
|
|
263
|
+
- category: DependencyInstall
|
|
264
|
+
disposition: ApprovalRequired
|
|
265
|
+
- category: PackageScriptExec
|
|
266
|
+
disposition: ApprovalRequired
|
|
267
|
+
- category: CiWorkflowModify
|
|
268
|
+
disposition: ApprovalRequired
|
|
269
|
+
- category: PublishRelease
|
|
270
|
+
disposition: Denied
|
|
271
|
+
- category: SandboxEscalation
|
|
272
|
+
disposition: Denied
|
|
273
|
+
|
|
274
|
+
# Dependency risk rules evaluated by "shep security enforce"
|
|
275
|
+
dependencyRules:
|
|
276
|
+
# Verify lockfile matches package.json (detects phantom dependencies)
|
|
277
|
+
checkLockfileConsistency: true
|
|
278
|
+
# Flag packages with risky lifecycle scripts (preinstall, postinstall)
|
|
279
|
+
checkLifecycleScripts: true
|
|
280
|
+
# Flag dependencies sourced from git, file, or HTTP instead of registry
|
|
281
|
+
checkNonRegistrySource: true
|
|
282
|
+
# Require exact versions (no ^, ~, *, >= ranges)
|
|
283
|
+
enforceStrictVersionRanges: false
|
|
284
|
+
# Packages explicitly allowed (empty = allow all registry packages)
|
|
285
|
+
allowlist: []
|
|
286
|
+
# Packages explicitly blocked (takes precedence over allowlist)
|
|
287
|
+
denylist: []
|
|
288
|
+
|
|
289
|
+
# Release integrity rules for publish-path enforcement
|
|
290
|
+
releaseRules:
|
|
291
|
+
# Require publishing only from CI (not local machines)
|
|
292
|
+
requireCiOnlyPublishing: true
|
|
293
|
+
# Require npm provenance attestation on published packages
|
|
294
|
+
requireProvenance: true
|
|
295
|
+
# Check that release workflow has not been tampered with
|
|
296
|
+
checkWorkflowIntegrity: true
|
|
297
|
+
`;
|
|
242
298
|
export class SpecInitializerService {
|
|
243
299
|
async initialize(basePath, slug, featureNumber, description, mode) {
|
|
244
300
|
// Scan existing specs/ directory for highest NNN prefix to avoid collisions
|
|
@@ -262,6 +318,11 @@ export class SpecInitializerService {
|
|
|
262
318
|
await Promise.all(templates.map(({ filename, content }) => writeFile(join(specDir, filename), applyTemplate(content, vars), 'utf-8')));
|
|
263
319
|
return { specDir, featureNumber: nnn };
|
|
264
320
|
}
|
|
321
|
+
async scaffoldSecurityPolicy(repositoryPath) {
|
|
322
|
+
const filePath = join(repositoryPath, SECURITY_POLICY_FILENAME);
|
|
323
|
+
await writeFile(filePath, SECURITY_POLICY_YAML, 'utf-8');
|
|
324
|
+
return filePath;
|
|
325
|
+
}
|
|
265
326
|
/**
|
|
266
327
|
* Scan specs/ for existing NNN-* directories and return the next available number.
|
|
267
328
|
* Uses the DB-derived hint as a minimum, but always respects filesystem state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"new.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/new.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2EpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAmM1C"}
|
|
@@ -15,6 +15,7 @@ import { existsSync } from 'node:fs';
|
|
|
15
15
|
import { join, resolve } from 'node:path';
|
|
16
16
|
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
17
17
|
import { CreateFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/create/create-feature.use-case.js';
|
|
18
|
+
import { CreateFeatureFromRemoteUseCase } from '../../../../../packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js';
|
|
18
19
|
import { SdlcLifecycle } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
19
20
|
import { colors, messages, spinner } from '../../ui/index.js';
|
|
20
21
|
import { getCliI18n } from '../../i18n.js';
|
|
@@ -57,6 +58,7 @@ export function createNewCommand() {
|
|
|
57
58
|
.description(t('cli:commands.feat.new.description'))
|
|
58
59
|
.argument('<description>', t('cli:commands.feat.new.descriptionArgument'))
|
|
59
60
|
.option('-r, --repo <path>', t('cli:commands.feat.new.repoOption'))
|
|
61
|
+
.option('--remote <url>', t('cli:commands.feat.new.remoteOption'))
|
|
60
62
|
.option('--push', t('cli:commands.feat.new.pushOption'))
|
|
61
63
|
.option('--pr', t('cli:commands.feat.new.prOption'))
|
|
62
64
|
.option('--no-pr', t('cli:commands.feat.new.noPrOption'))
|
|
@@ -75,6 +77,12 @@ export function createNewCommand() {
|
|
|
75
77
|
.option('--attach <path>', t('cli:commands.feat.new.attachOption'), collect, [])
|
|
76
78
|
.action(async (description, options) => {
|
|
77
79
|
try {
|
|
80
|
+
// Conflict check: --remote and --repo are mutually exclusive
|
|
81
|
+
if (options.remote && options.repo) {
|
|
82
|
+
messages.error(t('cli:commands.feat.new.remoteConflict'));
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
78
86
|
// First-run onboarding gate — only for interactive terminals
|
|
79
87
|
if (process.stdin.isTTY) {
|
|
80
88
|
const { isComplete } = await new CheckOnboardingStatusUseCase().execute();
|
|
@@ -82,7 +90,6 @@ export function createNewCommand() {
|
|
|
82
90
|
await onboardingWizard();
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
|
-
const useCase = container.resolve(CreateFeatureUseCase);
|
|
86
93
|
const repoPath = options.repo ?? process.cwd();
|
|
87
94
|
// Resolve openPr from CLI flags or settings defaults
|
|
88
95
|
const defaults = getWorkflowDefaults();
|
|
@@ -122,9 +129,8 @@ export function createNewCommand() {
|
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
131
|
const fast = options.fast ?? defaults.fast;
|
|
125
|
-
const
|
|
132
|
+
const commonInput = {
|
|
126
133
|
userInput: description,
|
|
127
|
-
repositoryPath: repoPath,
|
|
128
134
|
approvalGates,
|
|
129
135
|
push,
|
|
130
136
|
openPr,
|
|
@@ -133,9 +139,29 @@ export function createNewCommand() {
|
|
|
133
139
|
...(fast && { fast: true }),
|
|
134
140
|
...(options.model !== undefined && { model: options.model }),
|
|
135
141
|
...(attachmentPaths.length > 0 && { attachmentPaths }),
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
};
|
|
143
|
+
let result;
|
|
144
|
+
if (options.remote) {
|
|
145
|
+
// Remote path: clone (or fork) then create feature
|
|
146
|
+
const settings = getSettings();
|
|
147
|
+
const defaultCloneDir = settings.environment?.defaultCloneDirectory;
|
|
148
|
+
const remoteUseCase = container.resolve(CreateFeatureFromRemoteUseCase);
|
|
149
|
+
result = await spinner(t('cli:commands.feat.new.spinnerText'), () => remoteUseCase.execute({
|
|
150
|
+
...commonInput,
|
|
151
|
+
remoteUrl: options.remote,
|
|
152
|
+
defaultCloneDir,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Local path: create feature on existing repo
|
|
157
|
+
const useCase = container.resolve(CreateFeatureUseCase);
|
|
158
|
+
result = await spinner(t('cli:commands.feat.new.spinnerText'), () => useCase.execute({
|
|
159
|
+
...commonInput,
|
|
160
|
+
repositoryPath: repoPath,
|
|
161
|
+
...(options.injectSkills !== undefined && { injectSkills: options.injectSkills }),
|
|
162
|
+
rebaseBeforeBranch: options.rebase,
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
139
165
|
const { feature, warning } = result;
|
|
140
166
|
const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
|
|
141
167
|
const wtSlug = feature.branch.replace(/\//g, '-');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAU3C"}
|
|
@@ -15,6 +15,7 @@ import { Command } from 'commander';
|
|
|
15
15
|
import { createShowCommand } from './show.command.js';
|
|
16
16
|
import { createLsCommand } from './ls.command.js';
|
|
17
17
|
import { createAddCommand } from './add.command.js';
|
|
18
|
+
import { createInitRemoteCommand } from './init-remote.command.js';
|
|
18
19
|
import { getCliI18n } from '../../i18n.js';
|
|
19
20
|
/**
|
|
20
21
|
* Create the repo command with all subcommands
|
|
@@ -25,6 +26,7 @@ export function createRepoCommand() {
|
|
|
25
26
|
.description(t('cli:commands.repo.description'))
|
|
26
27
|
.addCommand(createLsCommand())
|
|
27
28
|
.addCommand(createShowCommand())
|
|
28
|
-
.addCommand(createAddCommand())
|
|
29
|
+
.addCommand(createAddCommand())
|
|
30
|
+
.addCommand(createInitRemoteCommand());
|
|
29
31
|
return repo;
|
|
30
32
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo Init-Remote Command
|
|
3
|
+
*
|
|
4
|
+
* Creates a GitHub repository from a local repo that has no remote,
|
|
5
|
+
* configures the origin remote, and pushes the current branch.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* shep repo init-remote # Private repo, name from cwd basename
|
|
9
|
+
* shep repo init-remote my-project # Explicit repo name
|
|
10
|
+
* shep repo init-remote --public # Public repo
|
|
11
|
+
* shep repo init-remote --org myorg # Create under an organization
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
export declare function createInitRemoteCommand(): Command;
|
|
15
|
+
//# sourceMappingURL=init-remote.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-remote.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/repo/init-remote.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,IAAI,OAAO,CA6BjD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repo Init-Remote Command
|
|
3
|
+
*
|
|
4
|
+
* Creates a GitHub repository from a local repo that has no remote,
|
|
5
|
+
* configures the origin remote, and pushes the current branch.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* shep repo init-remote # Private repo, name from cwd basename
|
|
9
|
+
* shep repo init-remote my-project # Explicit repo name
|
|
10
|
+
* shep repo init-remote --public # Public repo
|
|
11
|
+
* shep repo init-remote --org myorg # Create under an organization
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
15
|
+
import { InitRemoteRepositoryUseCase } from '../../../../../packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js';
|
|
16
|
+
import { messages, colors } from '../../ui/index.js';
|
|
17
|
+
import { getCliI18n } from '../../i18n.js';
|
|
18
|
+
export function createInitRemoteCommand() {
|
|
19
|
+
const t = getCliI18n().t;
|
|
20
|
+
return new Command('init-remote')
|
|
21
|
+
.description(t('cli:commands.repo.initRemote.description'))
|
|
22
|
+
.argument('[name]', t('cli:commands.repo.initRemote.nameArgument'))
|
|
23
|
+
.option('--public', t('cli:commands.repo.initRemote.publicOption'))
|
|
24
|
+
.option('--org <name>', t('cli:commands.repo.initRemote.orgOption'))
|
|
25
|
+
.action(async (name, options) => {
|
|
26
|
+
try {
|
|
27
|
+
const useCase = container.resolve(InitRemoteRepositoryUseCase);
|
|
28
|
+
const cwd = process.cwd();
|
|
29
|
+
const result = await useCase.execute({
|
|
30
|
+
cwd,
|
|
31
|
+
name,
|
|
32
|
+
isPrivate: !options.public,
|
|
33
|
+
org: options.org,
|
|
34
|
+
});
|
|
35
|
+
messages.success(t('cli:commands.repo.initRemote.created', { name: result.name }));
|
|
36
|
+
console.log(` ${colors.muted(t('cli:commands.repo.initRemote.urlLabel'))} ${colors.accent(result.url)}`);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
40
|
+
messages.error(t('cli:commands.repo.initRemote.failed'), err);
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Command Group
|
|
3
|
+
*
|
|
4
|
+
* Top-level security command with subcommands for supply-chain security
|
|
5
|
+
* policy management and enforcement.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* shep security enforce Evaluate and enforce security posture
|
|
9
|
+
* shep security enforce --output json Machine-readable output for CI
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
/**
|
|
13
|
+
* Create the security command group with all subcommands.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createSecurityCommand(): Command;
|
|
16
|
+
//# sourceMappingURL=security.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.command.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/cli/commands/security.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAqH/C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Command Group
|
|
3
|
+
*
|
|
4
|
+
* Top-level security command with subcommands for supply-chain security
|
|
5
|
+
* policy management and enforcement.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* shep security enforce Evaluate and enforce security posture
|
|
9
|
+
* shep security enforce --output json Machine-readable output for CI
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { container } from '../../../../packages/core/src/infrastructure/di/container.js';
|
|
13
|
+
import { EnforceSecurityUseCase } from '../../../../packages/core/src/application/use-cases/security/enforce-security.use-case.js';
|
|
14
|
+
import { SecurityMode } from '../../../../packages/core/src/domain/generated/output.js';
|
|
15
|
+
import { colors, fmt, messages } from '../ui/index.js';
|
|
16
|
+
import { OutputFormatter } from '../ui/output.js';
|
|
17
|
+
import { getCliI18n } from '../i18n.js';
|
|
18
|
+
/**
|
|
19
|
+
* Create the security command group with all subcommands.
|
|
20
|
+
*/
|
|
21
|
+
export function createSecurityCommand() {
|
|
22
|
+
const t = getCliI18n().t;
|
|
23
|
+
const security = new Command('security').description(t('cli:commands.security.description'));
|
|
24
|
+
security
|
|
25
|
+
.command('enforce')
|
|
26
|
+
.description(t('cli:commands.security.enforce.description'))
|
|
27
|
+
.option('-r, --repo <path>', t('cli:commands.security.enforce.repoOption'), process.cwd())
|
|
28
|
+
.option('-o, --output <format>', t('cli:commands.security.enforce.outputOption'), 'table')
|
|
29
|
+
.action(async (options) => {
|
|
30
|
+
try {
|
|
31
|
+
const useCase = container.resolve(EnforceSecurityUseCase);
|
|
32
|
+
const result = await useCase.execute({ repositoryPath: options.repo });
|
|
33
|
+
const outputFormat = options.output;
|
|
34
|
+
if (outputFormat === 'json' || outputFormat === 'yaml') {
|
|
35
|
+
// Machine-readable output
|
|
36
|
+
console.log(OutputFormatter.format(result, outputFormat));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Human-readable table output
|
|
40
|
+
messages.newline();
|
|
41
|
+
if (result.mode === SecurityMode.Disabled) {
|
|
42
|
+
messages.info(t('cli:commands.security.enforce.disabledNote'));
|
|
43
|
+
messages.newline();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Summary header
|
|
47
|
+
console.log(`${fmt.label(t('cli:commands.security.enforce.modeLabel'))}: ${result.mode}`);
|
|
48
|
+
console.log(`${fmt.label(t('cli:commands.security.enforce.sourceLabel'))}: ${result.policy.source}`);
|
|
49
|
+
console.log(`${fmt.label(t('cli:commands.security.enforce.totalFindingsLabel'))}: ${result.totalFindings}`);
|
|
50
|
+
messages.newline();
|
|
51
|
+
// Dependency findings
|
|
52
|
+
if (result.dependencyFindings.length > 0) {
|
|
53
|
+
console.log(fmt.heading(t('cli:commands.security.enforce.dependencyFindingsLabel')));
|
|
54
|
+
for (const finding of result.dependencyFindings) {
|
|
55
|
+
const severityColor = finding.severity === 'Critical' || finding.severity === 'High'
|
|
56
|
+
? colors.error
|
|
57
|
+
: colors.warning;
|
|
58
|
+
console.log(` ${severityColor(`[${finding.severity}]`)} ${finding.packageName}: ${finding.message}`);
|
|
59
|
+
if (finding.remediation) {
|
|
60
|
+
console.log(` ${colors.muted(finding.remediation)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
messages.newline();
|
|
64
|
+
}
|
|
65
|
+
// Release integrity
|
|
66
|
+
const failedChecks = result.releaseIntegrity.checks.filter((c) => !c.passed);
|
|
67
|
+
if (failedChecks.length > 0) {
|
|
68
|
+
console.log(fmt.heading(t('cli:commands.security.enforce.releaseIntegrityLabel')));
|
|
69
|
+
for (const check of failedChecks) {
|
|
70
|
+
const severityColor = check.severity === 'Critical' || check.severity === 'High'
|
|
71
|
+
? colors.error
|
|
72
|
+
: colors.warning;
|
|
73
|
+
console.log(` ${severityColor(`[${check.severity}]`)} ${check.message}`);
|
|
74
|
+
}
|
|
75
|
+
messages.newline();
|
|
76
|
+
}
|
|
77
|
+
// Governance findings (audit-only)
|
|
78
|
+
if (result.governanceFindings.length > 0) {
|
|
79
|
+
console.log(fmt.heading(t('cli:commands.security.enforce.governanceFindingsLabel')));
|
|
80
|
+
for (const finding of result.governanceFindings) {
|
|
81
|
+
const severityColor = finding.severity === 'Critical' || finding.severity === 'High'
|
|
82
|
+
? colors.error
|
|
83
|
+
: colors.warning;
|
|
84
|
+
console.log(` ${severityColor(`[${finding.severity}]`)} ${finding.message}`);
|
|
85
|
+
if (finding.remediation) {
|
|
86
|
+
console.log(` ${colors.muted(finding.remediation)}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
messages.newline();
|
|
90
|
+
}
|
|
91
|
+
// Result
|
|
92
|
+
if (result.totalFindings === 0) {
|
|
93
|
+
messages.info(t('cli:commands.security.enforce.noFindings'));
|
|
94
|
+
}
|
|
95
|
+
if (result.passed) {
|
|
96
|
+
messages.success(t('cli:commands.security.enforce.passed'));
|
|
97
|
+
if (result.mode === SecurityMode.Advisory && result.totalFindings > 0) {
|
|
98
|
+
messages.info(t('cli:commands.security.enforce.advisoryNote'));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
messages.error(t('cli:commands.security.enforce.failed'));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
messages.newline();
|
|
106
|
+
}
|
|
107
|
+
if (!result.passed) {
|
|
108
|
+
process.exitCode = 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
113
|
+
messages.error(t('cli:commands.security.enforce.failedToEnforce'), err);
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return security;
|
|
118
|
+
}
|
|
@@ -42,6 +42,7 @@ import { createIdeOpenCommand } from './commands/ide-open.command.js';
|
|
|
42
42
|
import { createInstallCommand } from './commands/install.command.js';
|
|
43
43
|
import { createUpgradeCommand } from './commands/upgrade.command.js';
|
|
44
44
|
import { createToolsCommand } from './commands/tools.command.js';
|
|
45
|
+
import { createSecurityCommand } from './commands/security.command.js';
|
|
45
46
|
import { messages } from './ui/index.js';
|
|
46
47
|
// Daemon lifecycle commands
|
|
47
48
|
import { createStartCommand } from './commands/start.command.js';
|
|
@@ -121,6 +122,7 @@ async function bootstrap() {
|
|
|
121
122
|
program.addCommand(createIdeOpenCommand());
|
|
122
123
|
program.addCommand(createInstallCommand());
|
|
123
124
|
program.addCommand(createToolsCommand());
|
|
125
|
+
program.addCommand(createSecurityCommand());
|
|
124
126
|
program.addCommand(createUpgradeCommand());
|
|
125
127
|
// Daemon lifecycle commands (task-9)
|
|
126
128
|
program.addCommand(createStartCommand());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAiFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAgFxF"}
|
|
@@ -135,13 +135,14 @@ export async function getGraphData() {
|
|
|
135
135
|
const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;
|
|
136
136
|
return { feature, run };
|
|
137
137
|
}));
|
|
138
|
-
const { workflow } = getSettings();
|
|
138
|
+
const { workflow, security } = getSettings();
|
|
139
139
|
const { nodes, edges } = buildGraphNodes(repositories, featuresWithRuns, {
|
|
140
140
|
enableEvidence: workflow.enableEvidence,
|
|
141
141
|
commitEvidence: workflow.commitEvidence,
|
|
142
142
|
ciWatchEnabled: workflow.ciWatchEnabled,
|
|
143
143
|
repoGitInfo: repoGitInfoMap,
|
|
144
144
|
repoGitStatus: repoGitStatusMap,
|
|
145
|
+
securityMode: security?.mode,
|
|
145
146
|
});
|
|
146
147
|
// Enrich feature nodes with deployment status
|
|
147
148
|
let deploymentService = null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
+
interface Attachment {
|
|
3
|
+
path: string;
|
|
4
|
+
name: string;
|
|
5
|
+
notes?: string;
|
|
6
|
+
}
|
|
7
|
+
interface CreateFeatureFromRemoteInput {
|
|
8
|
+
/** GitHub URL or owner/repo shorthand */
|
|
9
|
+
remoteUrl: string;
|
|
10
|
+
description: string;
|
|
11
|
+
attachments?: Attachment[];
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
approvalGates?: {
|
|
14
|
+
allowPrd: boolean;
|
|
15
|
+
allowPlan: boolean;
|
|
16
|
+
allowMerge?: boolean;
|
|
17
|
+
};
|
|
18
|
+
push?: boolean;
|
|
19
|
+
openPr?: boolean;
|
|
20
|
+
parentId?: string;
|
|
21
|
+
fast?: boolean;
|
|
22
|
+
pending?: boolean;
|
|
23
|
+
agentType?: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createFeatureFromRemote(input: CreateFeatureFromRemoteInput): Promise<{
|
|
27
|
+
feature?: Feature;
|
|
28
|
+
error?: string;
|
|
29
|
+
}>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=create-feature-from-remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-feature-from-remote.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/create-feature-from-remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAQpE,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,UAAU,4BAA4B;IACpC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuFhD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { resolve } from '../../lib/server-container.js';
|
|
3
|
+
import { GitHubAuthError, GitHubUrlParseError, GitHubCloneError, } from '../../../../../packages/core/src/application/ports/output/services/github-repository-service.interface.js';
|
|
4
|
+
import { composeUserInput } from './compose-user-input.js';
|
|
5
|
+
export async function createFeatureFromRemote(input) {
|
|
6
|
+
const { remoteUrl, description, attachments, sessionId, approvalGates, push, openPr, parentId, fast, pending, agentType, model, } = input;
|
|
7
|
+
if (!remoteUrl?.trim()) {
|
|
8
|
+
return { error: 'GitHub URL is required' };
|
|
9
|
+
}
|
|
10
|
+
if (!description?.trim()) {
|
|
11
|
+
return { error: 'Description is required' };
|
|
12
|
+
}
|
|
13
|
+
const userInput = composeUserInput(description, attachments);
|
|
14
|
+
const gates = {
|
|
15
|
+
allowPrd: approvalGates?.allowPrd ?? false,
|
|
16
|
+
allowPlan: approvalGates?.allowPlan ?? false,
|
|
17
|
+
allowMerge: approvalGates?.allowMerge ?? false,
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
const useCase = resolve('CreateFeatureFromRemoteUseCase');
|
|
21
|
+
// Phase 1 (fast): import repo + create DB record — returns immediately
|
|
22
|
+
const { feature, shouldSpawn } = await useCase.createRecord({
|
|
23
|
+
remoteUrl,
|
|
24
|
+
userInput,
|
|
25
|
+
approvalGates: gates,
|
|
26
|
+
push: push ?? false,
|
|
27
|
+
openPr: openPr ?? false,
|
|
28
|
+
...(parentId ? { parentId } : {}),
|
|
29
|
+
description,
|
|
30
|
+
...(fast ? { fast } : {}),
|
|
31
|
+
...(pending ? { pending } : {}),
|
|
32
|
+
...(agentType ? { agentType } : {}),
|
|
33
|
+
...(model ? { model } : {}),
|
|
34
|
+
});
|
|
35
|
+
// Phase 2 (background): metadata generation, worktree, spec, agent spawn
|
|
36
|
+
useCase
|
|
37
|
+
.initializeAndSpawn(feature, {
|
|
38
|
+
remoteUrl,
|
|
39
|
+
userInput,
|
|
40
|
+
approvalGates: gates,
|
|
41
|
+
push: push ?? false,
|
|
42
|
+
openPr: openPr ?? false,
|
|
43
|
+
...(parentId ? { parentId } : {}),
|
|
44
|
+
...(fast ? { fast } : {}),
|
|
45
|
+
...(pending ? { pending } : {}),
|
|
46
|
+
...(agentType ? { agentType } : {}),
|
|
47
|
+
...(model ? { model } : {}),
|
|
48
|
+
...(sessionId ? { sessionId } : {}),
|
|
49
|
+
}, shouldSpawn)
|
|
50
|
+
.catch((err) => {
|
|
51
|
+
// eslint-disable-next-line no-console
|
|
52
|
+
console.error('[createFeatureFromRemote] initializeAndSpawn failed:', err);
|
|
53
|
+
});
|
|
54
|
+
return { feature };
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (error instanceof GitHubAuthError) {
|
|
58
|
+
return { error: 'GitHub CLI is not authenticated. Run `gh auth login` to sign in.' };
|
|
59
|
+
}
|
|
60
|
+
if (error instanceof GitHubUrlParseError) {
|
|
61
|
+
return { error: `Invalid GitHub URL: ${error.message}` };
|
|
62
|
+
}
|
|
63
|
+
if (error instanceof GitHubCloneError) {
|
|
64
|
+
return { error: `Clone failed: ${error.message}` };
|
|
65
|
+
}
|
|
66
|
+
const message = error instanceof Error ? error.message : 'Failed to create feature from remote';
|
|
67
|
+
return { error: message };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-github-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/import-github-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAOvE,UAAU,2BAA2B;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"import-github-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/import-github-repository.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAOvE,UAAU,2BAA2B;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,UAAU,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBxE"}
|
|
@@ -9,7 +9,7 @@ export async function importGitHubRepository(input) {
|
|
|
9
9
|
try {
|
|
10
10
|
const useCase = resolve('ImportGitHubRepositoryUseCase');
|
|
11
11
|
const repository = await useCase.execute({ url, dest });
|
|
12
|
-
return { repository };
|
|
12
|
+
return { repository, forked: repository.isFork === true };
|
|
13
13
|
}
|
|
14
14
|
catch (error) {
|
|
15
15
|
if (error instanceof GitHubAuthError) {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SecurityState } from '../../../../../packages/core/src/application/use-cases/security/get-security-state.use-case.js';
|
|
2
|
+
import type { EnforceSecurityResult } from '../../../../../packages/core/src/application/use-cases/security/enforce-security.use-case.js';
|
|
3
|
+
import type { SecurityMode } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
export interface GetSecurityStateResult {
|
|
5
|
+
state?: SecurityState;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface EnforceSecurityActionResult {
|
|
9
|
+
result?: EnforceSecurityResult;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface UpdateSecurityModeResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fetches the current security state for a repository.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getSecurityStateAction(repositoryPath: string): Promise<GetSecurityStateResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Runs the full security enforcement flow for a repository.
|
|
22
|
+
*/
|
|
23
|
+
export declare function enforceSecurityAction(repositoryPath: string): Promise<EnforceSecurityActionResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Updates the security mode in settings.
|
|
26
|
+
*/
|
|
27
|
+
export declare function updateSecurityModeAction(mode: SecurityMode): Promise<UpdateSecurityModeResult>;
|
|
28
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/security.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,yEAAyE,CAAC;AACjF,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,uEAAuE,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,sBAAsB,CAAC,CASjC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,2BAA2B,CAAC,CAUtC;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,wBAAwB,CAAC,CAyBnC"}
|