@ytinnovation/harness-core 0.0.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/README.md +17 -0
- package/dist/assets/fetch-published-by-name.d.ts +16 -0
- package/dist/assets/fetch-published-by-name.d.ts.map +1 -0
- package/dist/assets/fetch-published-by-name.js +40 -0
- package/dist/assets/fetch-published-by-name.js.map +1 -0
- package/dist/assets/install-content.d.ts +7 -0
- package/dist/assets/install-content.d.ts.map +1 -0
- package/dist/assets/install-content.js +24 -0
- package/dist/assets/install-content.js.map +1 -0
- package/dist/assets/install-from.d.ts +6 -0
- package/dist/assets/install-from.d.ts.map +1 -0
- package/dist/assets/install-from.js +13 -0
- package/dist/assets/install-from.js.map +1 -0
- package/dist/assets/install.d.ts +36 -0
- package/dist/assets/install.d.ts.map +1 -0
- package/dist/assets/install.js +199 -0
- package/dist/assets/install.js.map +1 -0
- package/dist/assets/mcp-config-format.d.ts +11 -0
- package/dist/assets/mcp-config-format.d.ts.map +1 -0
- package/dist/assets/mcp-config-format.js +101 -0
- package/dist/assets/mcp-config-format.js.map +1 -0
- package/dist/assets/metadata.d.ts +65 -0
- package/dist/assets/metadata.d.ts.map +1 -0
- package/dist/assets/metadata.js +164 -0
- package/dist/assets/metadata.js.map +1 -0
- package/dist/assets/project-manifest.d.ts +80 -0
- package/dist/assets/project-manifest.d.ts.map +1 -0
- package/dist/assets/project-manifest.js +556 -0
- package/dist/assets/project-manifest.js.map +1 -0
- package/dist/assets/published-content.d.ts +28 -0
- package/dist/assets/published-content.d.ts.map +1 -0
- package/dist/assets/published-content.js +137 -0
- package/dist/assets/published-content.js.map +1 -0
- package/dist/assets/registry-entry.d.ts +9 -0
- package/dist/assets/registry-entry.d.ts.map +1 -0
- package/dist/assets/registry-entry.js +72 -0
- package/dist/assets/registry-entry.js.map +1 -0
- package/dist/assets/remote-list.d.ts +15 -0
- package/dist/assets/remote-list.d.ts.map +1 -0
- package/dist/assets/remote-list.js +36 -0
- package/dist/assets/remote-list.js.map +1 -0
- package/dist/cli-output/clipboard.d.ts +9 -0
- package/dist/cli-output/clipboard.d.ts.map +1 -0
- package/dist/cli-output/clipboard.js +56 -0
- package/dist/cli-output/clipboard.js.map +1 -0
- package/dist/cli-output/renderers.d.ts +99 -0
- package/dist/cli-output/renderers.d.ts.map +1 -0
- package/dist/cli-output/renderers.js +267 -0
- package/dist/cli-output/renderers.js.map +1 -0
- package/dist/cloud/enterprise-asset-client.d.ts +32 -0
- package/dist/cloud/enterprise-asset-client.d.ts.map +1 -0
- package/dist/cloud/enterprise-asset-client.js +179 -0
- package/dist/cloud/enterprise-asset-client.js.map +1 -0
- package/dist/cloud/enterprise-asset-types.d.ts +74 -0
- package/dist/cloud/enterprise-asset-types.d.ts.map +1 -0
- package/dist/cloud/enterprise-asset-types.js +2 -0
- package/dist/cloud/enterprise-asset-types.js.map +1 -0
- package/dist/cloud/harness-service-url.d.ts +3 -0
- package/dist/cloud/harness-service-url.d.ts.map +1 -0
- package/dist/cloud/harness-service-url.js +13 -0
- package/dist/cloud/harness-service-url.js.map +1 -0
- package/dist/cloud/rag-client.d.ts +18 -0
- package/dist/cloud/rag-client.d.ts.map +1 -0
- package/dist/cloud/rag-client.js +57 -0
- package/dist/cloud/rag-client.js.map +1 -0
- package/dist/cloud/redaction.d.ts +2 -0
- package/dist/cloud/redaction.d.ts.map +1 -0
- package/dist/cloud/redaction.js +53 -0
- package/dist/cloud/redaction.js.map +1 -0
- package/dist/cloud/telemetry-client.d.ts +21 -0
- package/dist/cloud/telemetry-client.d.ts.map +1 -0
- package/dist/cloud/telemetry-client.js +39 -0
- package/dist/cloud/telemetry-client.js.map +1 -0
- package/dist/contracts/config.d.ts +9 -0
- package/dist/contracts/config.d.ts.map +1 -0
- package/dist/contracts/config.defaults.d.ts +5 -0
- package/dist/contracts/config.defaults.d.ts.map +1 -0
- package/dist/contracts/config.defaults.js +5 -0
- package/dist/contracts/config.defaults.js.map +1 -0
- package/dist/contracts/config.js +5 -0
- package/dist/contracts/config.js.map +1 -0
- package/dist/contracts/config.loader.d.ts +3 -0
- package/dist/contracts/config.loader.d.ts.map +1 -0
- package/dist/contracts/config.loader.js +38 -0
- package/dist/contracts/config.loader.js.map +1 -0
- package/dist/contracts/errors.d.ts +8 -0
- package/dist/contracts/errors.d.ts.map +1 -0
- package/dist/contracts/errors.js +10 -0
- package/dist/contracts/errors.js.map +1 -0
- package/dist/cursor-acp-demo/index.d.ts +2 -0
- package/dist/cursor-acp-demo/index.d.ts.map +1 -0
- package/dist/cursor-acp-demo/index.js +63 -0
- package/dist/cursor-acp-demo/index.js.map +1 -0
- package/dist/dashboard/command.d.ts +15 -0
- package/dist/dashboard/command.d.ts.map +1 -0
- package/dist/dashboard/command.js +283 -0
- package/dist/dashboard/command.js.map +1 -0
- package/dist/dashboard/http-api.d.ts +3 -0
- package/dist/dashboard/http-api.d.ts.map +1 -0
- package/dist/dashboard/http-api.js +376 -0
- package/dist/dashboard/http-api.js.map +1 -0
- package/dist/dashboard/telemetry-snapshot.d.ts +11 -0
- package/dist/dashboard/telemetry-snapshot.d.ts.map +1 -0
- package/dist/dashboard/telemetry-snapshot.js +27 -0
- package/dist/dashboard/telemetry-snapshot.js.map +1 -0
- package/dist/dashboard-assets/assets/index-BNx5sFKx.css +1 -0
- package/dist/dashboard-assets/assets/index-ruRt5sDA.js +40 -0
- package/dist/dashboard-assets/index.html +13 -0
- package/dist/gateway/auth.d.ts +44 -0
- package/dist/gateway/auth.d.ts.map +1 -0
- package/dist/gateway/auth.js +2 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/client.d.ts +65 -0
- package/dist/gateway/client.d.ts.map +1 -0
- package/dist/gateway/client.js +133 -0
- package/dist/gateway/client.js.map +1 -0
- package/dist/gateway/command.d.ts +4 -0
- package/dist/gateway/command.d.ts.map +1 -0
- package/dist/gateway/command.js +213 -0
- package/dist/gateway/command.js.map +1 -0
- package/dist/gateway/service-http-exchange.d.ts +17 -0
- package/dist/gateway/service-http-exchange.d.ts.map +1 -0
- package/dist/gateway/service-http-exchange.js +183 -0
- package/dist/gateway/service-http-exchange.js.map +1 -0
- package/dist/gateway/token-exchange.d.ts +10 -0
- package/dist/gateway/token-exchange.d.ts.map +1 -0
- package/dist/gateway/token-exchange.js +8 -0
- package/dist/gateway/token-exchange.js.map +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/init/cloud-asset-client.d.ts +74 -0
- package/dist/init/cloud-asset-client.d.ts.map +1 -0
- package/dist/init/cloud-asset-client.js +399 -0
- package/dist/init/cloud-asset-client.js.map +1 -0
- package/dist/init/cloud-auto.d.ts +16 -0
- package/dist/init/cloud-auto.d.ts.map +1 -0
- package/dist/init/cloud-auto.js +61 -0
- package/dist/init/cloud-auto.js.map +1 -0
- package/dist/init/command.d.ts +17 -0
- package/dist/init/command.d.ts.map +1 -0
- package/dist/init/command.js +783 -0
- package/dist/init/command.js.map +1 -0
- package/dist/init/cursor-adapter.d.ts +24 -0
- package/dist/init/cursor-adapter.d.ts.map +1 -0
- package/dist/init/cursor-adapter.js +71 -0
- package/dist/init/cursor-adapter.js.map +1 -0
- package/dist/init/fingerprint.d.ts +6 -0
- package/dist/init/fingerprint.d.ts.map +1 -0
- package/dist/init/fingerprint.js +157 -0
- package/dist/init/fingerprint.js.map +1 -0
- package/dist/init/git-identity-catalog.d.ts +17 -0
- package/dist/init/git-identity-catalog.d.ts.map +1 -0
- package/dist/init/git-identity-catalog.js +48 -0
- package/dist/init/git-identity-catalog.js.map +1 -0
- package/dist/init/local-fallback-config-packs.d.ts +5 -0
- package/dist/init/local-fallback-config-packs.d.ts.map +1 -0
- package/dist/init/local-fallback-config-packs.js +6 -0
- package/dist/init/local-fallback-config-packs.js.map +1 -0
- package/dist/init/manifest-records.d.ts +34 -0
- package/dist/init/manifest-records.d.ts.map +1 -0
- package/dist/init/manifest-records.js +296 -0
- package/dist/init/manifest-records.js.map +1 -0
- package/dist/init/matched-init.d.ts +64 -0
- package/dist/init/matched-init.d.ts.map +1 -0
- package/dist/init/matched-init.js +263 -0
- package/dist/init/matched-init.js.map +1 -0
- package/dist/init/plan.d.ts +8 -0
- package/dist/init/plan.d.ts.map +1 -0
- package/dist/init/plan.js +165 -0
- package/dist/init/plan.js.map +1 -0
- package/dist/init/project-fingerprint-catalog.d.ts +17 -0
- package/dist/init/project-fingerprint-catalog.d.ts.map +1 -0
- package/dist/init/project-fingerprint-catalog.js +105 -0
- package/dist/init/project-fingerprint-catalog.js.map +1 -0
- package/dist/init/prompt.d.ts +38 -0
- package/dist/init/prompt.d.ts.map +1 -0
- package/dist/init/prompt.js +217 -0
- package/dist/init/prompt.js.map +1 -0
- package/dist/init/questions.d.ts +5 -0
- package/dist/init/questions.d.ts.map +1 -0
- package/dist/init/questions.js +71 -0
- package/dist/init/questions.js.map +1 -0
- package/dist/init/template-match.d.ts +10 -0
- package/dist/init/template-match.d.ts.map +1 -0
- package/dist/init/template-match.js +125 -0
- package/dist/init/template-match.js.map +1 -0
- package/dist/init/types.d.ts +162 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +2 -0
- package/dist/init/types.js.map +1 -0
- package/dist/init/write.d.ts +7 -0
- package/dist/init/write.d.ts.map +1 -0
- package/dist/init/write.js +155 -0
- package/dist/init/write.js.map +1 -0
- package/dist/install/command.d.ts +25 -0
- package/dist/install/command.d.ts.map +1 -0
- package/dist/install/command.js +251 -0
- package/dist/install/command.js.map +1 -0
- package/dist/install/prompt.d.ts +21 -0
- package/dist/install/prompt.d.ts.map +1 -0
- package/dist/install/prompt.js +60 -0
- package/dist/install/prompt.js.map +1 -0
- package/dist/kernel/commands/init.d.ts +11 -0
- package/dist/kernel/commands/init.d.ts.map +1 -0
- package/dist/kernel/commands/init.js +144 -0
- package/dist/kernel/commands/init.js.map +1 -0
- package/dist/kernel/create.d.ts +3 -0
- package/dist/kernel/create.d.ts.map +1 -0
- package/dist/kernel/create.js +31 -0
- package/dist/kernel/create.js.map +1 -0
- package/dist/kernel/router.d.ts +14 -0
- package/dist/kernel/router.d.ts.map +1 -0
- package/dist/kernel/router.js +73 -0
- package/dist/kernel/router.js.map +1 -0
- package/dist/kernel/types.d.ts +6 -0
- package/dist/kernel/types.d.ts.map +1 -0
- package/dist/kernel/types.js +2 -0
- package/dist/kernel/types.js.map +1 -0
- package/dist/knowledge/command.d.ts +6 -0
- package/dist/knowledge/command.d.ts.map +1 -0
- package/dist/knowledge/command.js +151 -0
- package/dist/knowledge/command.js.map +1 -0
- package/dist/knowledge/query.d.ts +23 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +133 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/rag.d.ts +74 -0
- package/dist/knowledge/rag.d.ts.map +1 -0
- package/dist/knowledge/rag.js +55 -0
- package/dist/knowledge/rag.js.map +1 -0
- package/dist/knowledge/types.d.ts +40 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +13 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/mcp/command.d.ts +19 -0
- package/dist/mcp/command.d.ts.map +1 -0
- package/dist/mcp/command.js +359 -0
- package/dist/mcp/command.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +44 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-registry.d.ts +38 -0
- package/dist/mcp/tool-registry.d.ts.map +1 -0
- package/dist/mcp/tool-registry.js +50 -0
- package/dist/mcp/tool-registry.js.map +1 -0
- package/dist/mcp/tools/add-skill.d.ts +29 -0
- package/dist/mcp/tools/add-skill.d.ts.map +1 -0
- package/dist/mcp/tools/add-skill.js +184 -0
- package/dist/mcp/tools/add-skill.js.map +1 -0
- package/dist/mcp/tools/assemble-init-assets.d.ts +26 -0
- package/dist/mcp/tools/assemble-init-assets.d.ts.map +1 -0
- package/dist/mcp/tools/assemble-init-assets.js +136 -0
- package/dist/mcp/tools/assemble-init-assets.js.map +1 -0
- package/dist/mcp/tools/query-knowledge.d.ts +28 -0
- package/dist/mcp/tools/query-knowledge.d.ts.map +1 -0
- package/dist/mcp/tools/query-knowledge.js +92 -0
- package/dist/mcp/tools/query-knowledge.js.map +1 -0
- package/dist/mcp/tools/read-instructions.d.ts +14 -0
- package/dist/mcp/tools/read-instructions.d.ts.map +1 -0
- package/dist/mcp/tools/read-instructions.js +81 -0
- package/dist/mcp/tools/read-instructions.js.map +1 -0
- package/dist/mcp/tools/sync-spec.d.ts +17 -0
- package/dist/mcp/tools/sync-spec.d.ts.map +1 -0
- package/dist/mcp/tools/sync-spec.js +80 -0
- package/dist/mcp/tools/sync-spec.js.map +1 -0
- package/dist/mcp/tools/update-rule.d.ts +49 -0
- package/dist/mcp/tools/update-rule.d.ts.map +1 -0
- package/dist/mcp/tools/update-rule.js +188 -0
- package/dist/mcp/tools/update-rule.js.map +1 -0
- package/dist/mcp/types.d.ts +21 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/prompt/command.d.ts +10 -0
- package/dist/prompt/command.d.ts.map +1 -0
- package/dist/prompt/command.js +260 -0
- package/dist/prompt/command.js.map +1 -0
- package/dist/rule/command.d.ts +10 -0
- package/dist/rule/command.d.ts.map +1 -0
- package/dist/rule/command.js +120 -0
- package/dist/rule/command.js.map +1 -0
- package/dist/skills/command.d.ts +23 -0
- package/dist/skills/command.d.ts.map +1 -0
- package/dist/skills/command.js +713 -0
- package/dist/skills/command.js.map +1 -0
- package/dist/skills/default-internal-skill-provider.d.ts +4 -0
- package/dist/skills/default-internal-skill-provider.d.ts.map +1 -0
- package/dist/skills/default-internal-skill-provider.js +23 -0
- package/dist/skills/default-internal-skill-provider.js.map +1 -0
- package/dist/skills/gitlab-skill-publish-client.d.ts +13 -0
- package/dist/skills/gitlab-skill-publish-client.d.ts.map +1 -0
- package/dist/skills/gitlab-skill-publish-client.js +255 -0
- package/dist/skills/gitlab-skill-publish-client.js.map +1 -0
- package/dist/skills/install.d.ts +23 -0
- package/dist/skills/install.d.ts.map +1 -0
- package/dist/skills/install.js +143 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/list-scan.d.ts +29 -0
- package/dist/skills/list-scan.d.ts.map +1 -0
- package/dist/skills/list-scan.js +230 -0
- package/dist/skills/list-scan.js.map +1 -0
- package/dist/skills/metadata.d.ts +5 -0
- package/dist/skills/metadata.d.ts.map +1 -0
- package/dist/skills/metadata.js +44 -0
- package/dist/skills/metadata.js.map +1 -0
- package/dist/skills/providers/harness-service.d.ts +11 -0
- package/dist/skills/providers/harness-service.d.ts.map +1 -0
- package/dist/skills/providers/harness-service.js +111 -0
- package/dist/skills/providers/harness-service.js.map +1 -0
- package/dist/skills/providers/stub.d.ts +4 -0
- package/dist/skills/providers/stub.d.ts.map +1 -0
- package/dist/skills/providers/stub.js +18 -0
- package/dist/skills/providers/stub.js.map +1 -0
- package/dist/skills/publish.d.ts +35 -0
- package/dist/skills/publish.d.ts.map +1 -0
- package/dist/skills/publish.js +115 -0
- package/dist/skills/publish.js.map +1 -0
- package/dist/skills/registry.d.ts +24 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +124 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/remove.d.ts +14 -0
- package/dist/skills/remove.d.ts.map +1 -0
- package/dist/skills/remove.js +44 -0
- package/dist/skills/remove.js.map +1 -0
- package/dist/skills/search.d.ts +9 -0
- package/dist/skills/search.d.ts.map +1 -0
- package/dist/skills/search.js +65 -0
- package/dist/skills/search.js.map +1 -0
- package/dist/skills/skill-markdown-manifest.d.ts +6 -0
- package/dist/skills/skill-markdown-manifest.d.ts.map +1 -0
- package/dist/skills/skill-markdown-manifest.js +57 -0
- package/dist/skills/skill-markdown-manifest.js.map +1 -0
- package/dist/skills/types.d.ts +138 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/update.d.ts +11 -0
- package/dist/skills/update.d.ts.map +1 -0
- package/dist/skills/update.js +55 -0
- package/dist/skills/update.js.map +1 -0
- package/dist/spec/command.d.ts +11 -0
- package/dist/spec/command.d.ts.map +1 -0
- package/dist/spec/command.js +201 -0
- package/dist/spec/command.js.map +1 -0
- package/dist/telemetry/reporter.d.ts +14 -0
- package/dist/telemetry/reporter.d.ts.map +1 -0
- package/dist/telemetry/reporter.js +31 -0
- package/dist/telemetry/reporter.js.map +1 -0
- package/dist/telemetry/sink.d.ts +7 -0
- package/dist/telemetry/sink.d.ts.map +1 -0
- package/dist/telemetry/sink.js +309 -0
- package/dist/telemetry/sink.js.map +1 -0
- package/dist/telemetry/types.d.ts +48 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +2 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/update/apply.d.ts +11 -0
- package/dist/update/apply.d.ts.map +1 -0
- package/dist/update/apply.js +94 -0
- package/dist/update/apply.js.map +1 -0
- package/dist/update/command.d.ts +43 -0
- package/dist/update/command.d.ts.map +1 -0
- package/dist/update/command.js +524 -0
- package/dist/update/command.js.map +1 -0
- package/dist/update/config-pack-sync.d.ts +11 -0
- package/dist/update/config-pack-sync.d.ts.map +1 -0
- package/dist/update/config-pack-sync.js +88 -0
- package/dist/update/config-pack-sync.js.map +1 -0
- package/dist/update/enterprise-update-provider.d.ts +8 -0
- package/dist/update/enterprise-update-provider.d.ts.map +1 -0
- package/dist/update/enterprise-update-provider.js +76 -0
- package/dist/update/enterprise-update-provider.js.map +1 -0
- package/dist/update/manifest-source.d.ts +33 -0
- package/dist/update/manifest-source.d.ts.map +1 -0
- package/dist/update/manifest-source.js +111 -0
- package/dist/update/manifest-source.js.map +1 -0
- package/dist/update/plan-utils.d.ts +5 -0
- package/dist/update/plan-utils.d.ts.map +1 -0
- package/dist/update/plan-utils.js +13 -0
- package/dist/update/plan-utils.js.map +1 -0
- package/dist/update/prompt.d.ts +19 -0
- package/dist/update/prompt.d.ts.map +1 -0
- package/dist/update/prompt.js +72 -0
- package/dist/update/prompt.js.map +1 -0
- package/dist/update/resolve-action.d.ts +7 -0
- package/dist/update/resolve-action.d.ts.map +1 -0
- package/dist/update/resolve-action.js +14 -0
- package/dist/update/resolve-action.js.map +1 -0
- package/dist/update/types.d.ts +33 -0
- package/dist/update/types.d.ts.map +1 -0
- package/dist/update/types.js +2 -0
- package/dist/update/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { HarnessError } from '../contracts/errors.js';
|
|
2
|
+
import { isMarkdownLikeAssetPath } from '../assets/install-content.js';
|
|
3
|
+
import { resolvePublishedAssetBody } from '../assets/published-content.js';
|
|
4
|
+
import { applyCloudPayloadRedaction } from '../cloud/redaction.js';
|
|
5
|
+
import { markerValuesFromFingerprintMarkers } from './project-fingerprint-catalog.js';
|
|
6
|
+
export function createCloudAssetClientUnavailableError(message) {
|
|
7
|
+
return new HarnessError('INIT_CLOUD_UNAVAILABLE', message ??
|
|
8
|
+
'Cloud asset service is unavailable. Rerun with --mode template-match or --mode local-manual.');
|
|
9
|
+
}
|
|
10
|
+
function selectedAssetTypes(answers) {
|
|
11
|
+
const types = [];
|
|
12
|
+
if (answers.useSkills) {
|
|
13
|
+
types.push('skill');
|
|
14
|
+
}
|
|
15
|
+
if (answers.includeRules) {
|
|
16
|
+
types.push('rule');
|
|
17
|
+
}
|
|
18
|
+
if (answers.syncSpec) {
|
|
19
|
+
types.push('spec');
|
|
20
|
+
}
|
|
21
|
+
// generateReadme only selects ai-coding-readme via filterCloudAssetsBySelection; not all commands.
|
|
22
|
+
if (answers.bootstrapMcp) {
|
|
23
|
+
types.push('mcp-config');
|
|
24
|
+
}
|
|
25
|
+
return types;
|
|
26
|
+
}
|
|
27
|
+
function toServiceAssetType(assetType) {
|
|
28
|
+
if (assetType === 'mcp-config') {
|
|
29
|
+
return 'mcp_config';
|
|
30
|
+
}
|
|
31
|
+
if (assetType === 'spec') {
|
|
32
|
+
return 'spec_template';
|
|
33
|
+
}
|
|
34
|
+
return assetType;
|
|
35
|
+
}
|
|
36
|
+
function normalizeTags(tags) {
|
|
37
|
+
if (!Array.isArray(tags)) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const normalized = tags.filter((tag) => typeof tag === 'string' && tag.trim() !== '');
|
|
41
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
42
|
+
}
|
|
43
|
+
async function fetchPublishedAssetBody(args) {
|
|
44
|
+
const versionUrl = new URL(`${args.normalizedBaseUrl}/assets/${encodeURIComponent(args.assetId)}/versions/${encodeURIComponent(args.versionLabel)}`);
|
|
45
|
+
const versionResponse = await fetchWithTimeout(args.fetchImpl, versionUrl.toString(), undefined, args.requestTimeoutMs);
|
|
46
|
+
if (!versionResponse.ok) {
|
|
47
|
+
return { content: undefined, contentCommitSha: null };
|
|
48
|
+
}
|
|
49
|
+
const versionBody = (await versionResponse.json());
|
|
50
|
+
return {
|
|
51
|
+
content: typeof versionBody.content === 'string' ? versionBody.content : undefined,
|
|
52
|
+
contentCommitSha: typeof versionBody.contentCommitSha === 'string' && versionBody.contentCommitSha.trim() !== ''
|
|
53
|
+
? versionBody.contentCommitSha
|
|
54
|
+
: null,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function resolvePublishedAssetIdByExactName(args) {
|
|
58
|
+
const listUrl = new URL(`${args.normalizedBaseUrl}/assets`);
|
|
59
|
+
listUrl.searchParams.set('type', toServiceAssetType(args.asset.assetType));
|
|
60
|
+
listUrl.searchParams.set('query', args.asset.name);
|
|
61
|
+
listUrl.searchParams.set('limit', '20');
|
|
62
|
+
const listResponse = await fetchWithTimeout(args.fetchImpl, listUrl.toString(), undefined, args.requestTimeoutMs);
|
|
63
|
+
if (!listResponse.ok) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const listBody = (await listResponse.json());
|
|
67
|
+
const matches = (listBody.items ?? []).filter((item) => item.name === args.asset.name && item.id);
|
|
68
|
+
if (matches.length !== 1) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return matches[0].id;
|
|
72
|
+
}
|
|
73
|
+
async function hydratePublishedCloudAsset(args) {
|
|
74
|
+
const base = {
|
|
75
|
+
assetType: args.asset.assetType,
|
|
76
|
+
name: args.asset.name,
|
|
77
|
+
targetPath: args.asset.targetPath,
|
|
78
|
+
source: args.source,
|
|
79
|
+
version: args.asset.contentCommitSha ?? args.packVersion ?? 'unknown',
|
|
80
|
+
...(args.asset.assetId ? { assetId: args.asset.assetId } : {}),
|
|
81
|
+
...(args.asset.contentCommitSha ? { contentCommitSha: args.asset.contentCommitSha } : {}),
|
|
82
|
+
...(args.asset.publishedVersionLabel ? { publishedVersionLabel: args.asset.publishedVersionLabel } : {}),
|
|
83
|
+
...(normalizeTags(args.asset.tags) ? { tags: normalizeTags(args.asset.tags) } : {}),
|
|
84
|
+
};
|
|
85
|
+
try {
|
|
86
|
+
let assetId = args.asset.assetId;
|
|
87
|
+
let enterpriseMetadata;
|
|
88
|
+
let enterpriseTags = normalizeTags(args.asset.tags);
|
|
89
|
+
if (!assetId) {
|
|
90
|
+
assetId = await resolvePublishedAssetIdByExactName({
|
|
91
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
92
|
+
fetchImpl: args.fetchImpl,
|
|
93
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
94
|
+
asset: args.asset,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (!assetId) {
|
|
98
|
+
return base;
|
|
99
|
+
}
|
|
100
|
+
let versionLabel = args.asset.publishedVersionLabel;
|
|
101
|
+
if (!versionLabel || enterpriseTags === undefined || enterpriseMetadata === undefined) {
|
|
102
|
+
const detailUrl = new URL(`${args.normalizedBaseUrl}/assets/${encodeURIComponent(assetId)}`);
|
|
103
|
+
const detailResponse = await fetchWithTimeout(args.fetchImpl, detailUrl.toString(), undefined, args.requestTimeoutMs);
|
|
104
|
+
if (!detailResponse.ok) {
|
|
105
|
+
return { ...base, assetId };
|
|
106
|
+
}
|
|
107
|
+
const detailBody = (await detailResponse.json());
|
|
108
|
+
versionLabel = versionLabel ?? detailBody.latestPublished?.version;
|
|
109
|
+
enterpriseMetadata = enterpriseMetadata ?? detailBody.metadata;
|
|
110
|
+
enterpriseTags = enterpriseTags ?? normalizeTags(detailBody.tags);
|
|
111
|
+
}
|
|
112
|
+
if (!versionLabel) {
|
|
113
|
+
return {
|
|
114
|
+
...base,
|
|
115
|
+
assetId,
|
|
116
|
+
...(enterpriseMetadata !== undefined ? { metadata: enterpriseMetadata } : {}),
|
|
117
|
+
...(enterpriseTags ? { tags: enterpriseTags } : {}),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const published = await fetchPublishedAssetBody({
|
|
121
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
122
|
+
fetchImpl: args.fetchImpl,
|
|
123
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
124
|
+
assetId,
|
|
125
|
+
versionLabel,
|
|
126
|
+
});
|
|
127
|
+
const contentCommitSha = published.contentCommitSha ?? args.asset.contentCommitSha ?? null;
|
|
128
|
+
const version = contentCommitSha ?? 'unknown';
|
|
129
|
+
let content = published.content;
|
|
130
|
+
let bundleFiles;
|
|
131
|
+
if (content !== undefined && isMarkdownLikeAssetPath(args.asset.targetPath)) {
|
|
132
|
+
const resolved = resolvePublishedAssetBody(content, { assetName: args.asset.name });
|
|
133
|
+
content = resolved.content;
|
|
134
|
+
bundleFiles = resolved.bundleFiles;
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
...base,
|
|
138
|
+
assetId,
|
|
139
|
+
version,
|
|
140
|
+
publishedVersionLabel: versionLabel,
|
|
141
|
+
...(enterpriseMetadata !== undefined ? { metadata: enterpriseMetadata } : {}),
|
|
142
|
+
...(enterpriseTags ? { tags: enterpriseTags } : {}),
|
|
143
|
+
...(contentCommitSha ? { contentCommitSha } : {}),
|
|
144
|
+
...(content !== undefined ? { content } : {}),
|
|
145
|
+
...(bundleFiles && bundleFiles.length > 0 ? { bundleFiles } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return base;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function fetchWithTimeout(fetchImpl, input, init, timeoutMs) {
|
|
153
|
+
const controller = new AbortController();
|
|
154
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
155
|
+
try {
|
|
156
|
+
return await fetchImpl(input, {
|
|
157
|
+
...init,
|
|
158
|
+
signal: controller.signal,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
clearTimeout(timeout);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function hydrateCloudAssetMatchPack(args) {
|
|
166
|
+
const assets = await Promise.all((args.pack.assetSummary ?? []).map((asset) => hydratePublishedCloudAsset({
|
|
167
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
168
|
+
fetchImpl: args.fetchImpl,
|
|
169
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
170
|
+
asset,
|
|
171
|
+
source: 'harness-cloud/config-pack',
|
|
172
|
+
packVersion: args.pack.version,
|
|
173
|
+
})));
|
|
174
|
+
const hitReasonsJoined = args.pack.hitReasons?.length ? args.pack.hitReasons.join(', ') : undefined;
|
|
175
|
+
return {
|
|
176
|
+
packId: args.pack.techStack?.id ?? args.fallbackPackId ?? 'cloud-config-pack',
|
|
177
|
+
packName: args.pack.techStack?.name ?? 'Cloud Config Pack',
|
|
178
|
+
version: args.pack.version ?? 'unknown',
|
|
179
|
+
hitReason: hitReasonsJoined ?? 'cloud-config-pack',
|
|
180
|
+
assets,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async function parseConfigPackMatchBody(args) {
|
|
184
|
+
const matchedPacks = args.body.matchedPacks && args.body.matchedPacks.length > 0
|
|
185
|
+
? await Promise.all(args.body.matchedPacks.map((pack) => hydrateCloudAssetMatchPack({
|
|
186
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
187
|
+
fetchImpl: args.fetchImpl,
|
|
188
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
189
|
+
pack,
|
|
190
|
+
})))
|
|
191
|
+
: undefined;
|
|
192
|
+
const primaryPack = matchedPacks?.[0] ??
|
|
193
|
+
(await hydrateCloudAssetMatchPack({
|
|
194
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
195
|
+
fetchImpl: args.fetchImpl,
|
|
196
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
197
|
+
pack: {
|
|
198
|
+
hitReasons: args.body.hitReasons,
|
|
199
|
+
version: args.body.version,
|
|
200
|
+
techStack: args.body.techStack,
|
|
201
|
+
assetSummary: args.body.assetSummary,
|
|
202
|
+
},
|
|
203
|
+
fallbackPackId: args.body.techStack?.id,
|
|
204
|
+
}));
|
|
205
|
+
const hitReasonsJoined = args.body.hitReasons?.length ? args.body.hitReasons.join(', ') : undefined;
|
|
206
|
+
return {
|
|
207
|
+
matched: args.body.matched,
|
|
208
|
+
hitReason: hitReasonsJoined ?? args.body.fallback?.reason ?? primaryPack.hitReason,
|
|
209
|
+
rollbackHint: args.body.rollbackHint,
|
|
210
|
+
packId: primaryPack.packId,
|
|
211
|
+
packName: primaryPack.packName,
|
|
212
|
+
version: primaryPack.version,
|
|
213
|
+
assets: primaryPack.assets,
|
|
214
|
+
matchedPacks: matchedPacks ?? [primaryPack],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async function requestConfigPackMatch(args) {
|
|
218
|
+
const workspaceRoot = args.request.workspaceRoot ?? args.request.fingerprint.cwd;
|
|
219
|
+
const redactedFingerprint = await applyCloudPayloadRedaction(args.request.fingerprint, workspaceRoot);
|
|
220
|
+
const url = new URL(`${args.normalizedBaseUrl}/config-packs/${args.endpoint}`);
|
|
221
|
+
url.searchParams.set('languages', redactedFingerprint.languages.join(','));
|
|
222
|
+
url.searchParams.set('markers', markerValuesFromFingerprintMarkers(redactedFingerprint.markers).join(','));
|
|
223
|
+
if (redactedFingerprint.packageManager !== 'unknown') {
|
|
224
|
+
url.searchParams.set('packageManager', redactedFingerprint.packageManager);
|
|
225
|
+
}
|
|
226
|
+
url.searchParams.set('hasGitIdentity', String(redactedFingerprint.gitIdentity.name !== null || redactedFingerprint.gitIdentity.email !== null));
|
|
227
|
+
if (redactedFingerprint.gitIdentity.email) {
|
|
228
|
+
url.searchParams.set('gitEmail', redactedFingerprint.gitIdentity.email);
|
|
229
|
+
}
|
|
230
|
+
let response;
|
|
231
|
+
try {
|
|
232
|
+
response = await fetchWithTimeout(args.fetchImpl, url.toString(), undefined, args.requestTimeoutMs);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
throw createCloudAssetClientUnavailableError(`Failed to reach cloud config-pack service: ${error instanceof Error && error.name === 'AbortError'
|
|
236
|
+
? `request timed out after ${args.requestTimeoutMs}ms`
|
|
237
|
+
: error instanceof Error ? error.message : String(error)}`);
|
|
238
|
+
}
|
|
239
|
+
if (!response.ok) {
|
|
240
|
+
throw createCloudAssetClientUnavailableError(`Cloud config-pack request failed with status ${response.status}.`);
|
|
241
|
+
}
|
|
242
|
+
const body = (await response.json());
|
|
243
|
+
return parseConfigPackMatchBody({
|
|
244
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
245
|
+
fetchImpl: args.fetchImpl,
|
|
246
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
247
|
+
body,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
async function requestConfigPackById(args) {
|
|
251
|
+
const url = `${args.normalizedBaseUrl}/config-packs/${encodeURIComponent(args.packId)}`;
|
|
252
|
+
let response;
|
|
253
|
+
try {
|
|
254
|
+
response = await fetchWithTimeout(args.fetchImpl, url, undefined, args.requestTimeoutMs);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
throw createCloudAssetClientUnavailableError(`Failed to reach cloud config-pack service: ${error instanceof Error && error.name === 'AbortError'
|
|
258
|
+
? `request timed out after ${args.requestTimeoutMs}ms`
|
|
259
|
+
: error instanceof Error
|
|
260
|
+
? error.message
|
|
261
|
+
: String(error)}`);
|
|
262
|
+
}
|
|
263
|
+
if (response.status === 404) {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
if (!response.ok) {
|
|
267
|
+
throw createCloudAssetClientUnavailableError(`Cloud config-pack request failed with status ${response.status}.`);
|
|
268
|
+
}
|
|
269
|
+
const body = (await response.json());
|
|
270
|
+
const assets = await Promise.all((body.assetSummary ?? []).map((asset) => hydratePublishedCloudAsset({
|
|
271
|
+
normalizedBaseUrl: args.normalizedBaseUrl,
|
|
272
|
+
fetchImpl: args.fetchImpl,
|
|
273
|
+
requestTimeoutMs: args.requestTimeoutMs,
|
|
274
|
+
asset,
|
|
275
|
+
source: 'harness-cloud/config-pack',
|
|
276
|
+
packVersion: body.version,
|
|
277
|
+
})));
|
|
278
|
+
const hitReasonsJoined = body.hitReasons?.length ? body.hitReasons.join(', ') : undefined;
|
|
279
|
+
return {
|
|
280
|
+
matched: body.matched,
|
|
281
|
+
hitReason: hitReasonsJoined ?? 'cloud-config-pack',
|
|
282
|
+
packId: body.techStack?.id ?? args.packId,
|
|
283
|
+
packName: body.techStack?.name,
|
|
284
|
+
version: body.version,
|
|
285
|
+
assets,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
export function createDefaultCloudAssetClient(options = {}) {
|
|
289
|
+
const baseUrl = options.baseUrl ?? process.env.HARNESS_CLOUD_BASE_URL ?? process.env.HARNESS_SERVICE_URL;
|
|
290
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
291
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? 2_000;
|
|
292
|
+
if (!baseUrl) {
|
|
293
|
+
return {
|
|
294
|
+
async matchConfigPack() {
|
|
295
|
+
throw createCloudAssetClientUnavailableError('HARNESS_CLOUD_BASE_URL or HARNESS_SERVICE_URL is not configured.');
|
|
296
|
+
},
|
|
297
|
+
async matchDefaultConfigPack() {
|
|
298
|
+
throw createCloudAssetClientUnavailableError('HARNESS_CLOUD_BASE_URL or HARNESS_SERVICE_URL is not configured.');
|
|
299
|
+
},
|
|
300
|
+
async fetchConfigPackById() {
|
|
301
|
+
throw createCloudAssetClientUnavailableError('HARNESS_CLOUD_BASE_URL or HARNESS_SERVICE_URL is not configured.');
|
|
302
|
+
},
|
|
303
|
+
async assembleAssets() {
|
|
304
|
+
throw createCloudAssetClientUnavailableError('HARNESS_CLOUD_BASE_URL or HARNESS_SERVICE_URL is not configured.');
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
|
|
309
|
+
return {
|
|
310
|
+
async matchConfigPack(request) {
|
|
311
|
+
return requestConfigPackMatch({
|
|
312
|
+
normalizedBaseUrl,
|
|
313
|
+
fetchImpl,
|
|
314
|
+
requestTimeoutMs,
|
|
315
|
+
request,
|
|
316
|
+
endpoint: 'match',
|
|
317
|
+
});
|
|
318
|
+
},
|
|
319
|
+
async matchDefaultConfigPack(request) {
|
|
320
|
+
return requestConfigPackMatch({
|
|
321
|
+
normalizedBaseUrl,
|
|
322
|
+
fetchImpl,
|
|
323
|
+
requestTimeoutMs,
|
|
324
|
+
request,
|
|
325
|
+
endpoint: 'default',
|
|
326
|
+
});
|
|
327
|
+
},
|
|
328
|
+
async fetchConfigPackById(packId) {
|
|
329
|
+
return requestConfigPackById({
|
|
330
|
+
normalizedBaseUrl,
|
|
331
|
+
fetchImpl,
|
|
332
|
+
requestTimeoutMs,
|
|
333
|
+
packId,
|
|
334
|
+
});
|
|
335
|
+
},
|
|
336
|
+
async assembleAssets(request) {
|
|
337
|
+
const workspaceRoot = request.workspaceRoot ?? request.fingerprint.cwd;
|
|
338
|
+
const redactedFingerprint = await applyCloudPayloadRedaction(request.fingerprint, workspaceRoot);
|
|
339
|
+
const redactedAnswers = await applyCloudPayloadRedaction(request.answers, workspaceRoot);
|
|
340
|
+
const hasGitIdentity = redactedFingerprint.gitIdentity.name !== null || redactedFingerprint.gitIdentity.email !== null;
|
|
341
|
+
const requestedAssetTypes = selectedAssetTypes(request.answers).filter((assetType) => assetType !== 'mcp-config');
|
|
342
|
+
let response;
|
|
343
|
+
try {
|
|
344
|
+
response = await fetchWithTimeout(fetchImpl, `${normalizedBaseUrl}/mastra/assemble`, {
|
|
345
|
+
method: 'POST',
|
|
346
|
+
headers: {
|
|
347
|
+
'content-type': 'application/json',
|
|
348
|
+
},
|
|
349
|
+
body: JSON.stringify({
|
|
350
|
+
userRole: '前端工程师',
|
|
351
|
+
fingerprint: {
|
|
352
|
+
languages: redactedFingerprint.languages,
|
|
353
|
+
packageManager: redactedFingerprint.packageManager === 'unknown'
|
|
354
|
+
? undefined
|
|
355
|
+
: redactedFingerprint.packageManager,
|
|
356
|
+
markers: markerValuesFromFingerprintMarkers(redactedFingerprint.markers),
|
|
357
|
+
hasGitIdentity,
|
|
358
|
+
},
|
|
359
|
+
teamPolicy: {
|
|
360
|
+
policyId: 'harness-init-cloud-auto',
|
|
361
|
+
preferredAssetTypes: requestedAssetTypes,
|
|
362
|
+
strategy: 'balanced',
|
|
363
|
+
},
|
|
364
|
+
userSelection: {
|
|
365
|
+
inputSource: 'cli',
|
|
366
|
+
requestedAssetTypes,
|
|
367
|
+
enableTutorial: false,
|
|
368
|
+
},
|
|
369
|
+
}),
|
|
370
|
+
}, requestTimeoutMs);
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
throw createCloudAssetClientUnavailableError(`Failed to reach cloud assembly service: ${error instanceof Error && error.name === 'AbortError'
|
|
374
|
+
? `request timed out after ${requestTimeoutMs}ms`
|
|
375
|
+
: error instanceof Error ? error.message : String(error)}`);
|
|
376
|
+
}
|
|
377
|
+
if (!response.ok) {
|
|
378
|
+
throw createCloudAssetClientUnavailableError(`Cloud assembly request failed with status ${response.status}.`);
|
|
379
|
+
}
|
|
380
|
+
const body = (await response.json());
|
|
381
|
+
return {
|
|
382
|
+
assembled: body.assembled,
|
|
383
|
+
explainableLog: (body.explainableLog ?? []).map((entry) => entry.message),
|
|
384
|
+
fallbackReason: body.fallback?.reason,
|
|
385
|
+
assets: await Promise.all((body.assets ?? []).map((asset) => hydratePublishedCloudAsset({
|
|
386
|
+
normalizedBaseUrl,
|
|
387
|
+
fetchImpl,
|
|
388
|
+
requestTimeoutMs,
|
|
389
|
+
asset,
|
|
390
|
+
source: 'harness-cloud/mastra',
|
|
391
|
+
}).then((resolved) => ({
|
|
392
|
+
...resolved,
|
|
393
|
+
reason: asset.reason,
|
|
394
|
+
})))),
|
|
395
|
+
};
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=cloud-asset-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-asset-client.js","sourceRoot":"","sources":["../../src/init/cloud-asset-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { HarnessError } from '../contracts/errors.js';
|
|
2
|
+
import { type CloudAssetClient } from './cloud-asset-client.js';
|
|
3
|
+
import type { CloudInitPlanPreview, CloudInitRequestPayload } from './types.js';
|
|
4
|
+
export interface CloudInitAdapterRequest {
|
|
5
|
+
cwd: string;
|
|
6
|
+
payload: CloudInitRequestPayload;
|
|
7
|
+
}
|
|
8
|
+
export interface CloudInitAdapter {
|
|
9
|
+
generatePlanPreview(request: CloudInitAdapterRequest): Promise<CloudInitPlanPreview>;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateDefaultCloudInitAdapterOptions {
|
|
12
|
+
cloudAssetClient?: CloudAssetClient;
|
|
13
|
+
}
|
|
14
|
+
export declare function createCloudInitUnavailableError(message?: string): HarnessError;
|
|
15
|
+
export declare function createDefaultCloudInitAdapter(options?: CreateDefaultCloudInitAdapterOptions): CloudInitAdapter;
|
|
16
|
+
//# sourceMappingURL=cloud-auto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-auto.d.ts","sourceRoot":"","sources":["../../src/init/cloud-auto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAe,MAAM,YAAY,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAM9E;AAoCD,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,gBAAgB,CA6BlB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { HarnessError } from '../contracts/errors.js';
|
|
4
|
+
import { createDefaultCloudAssetClient, } from './cloud-asset-client.js';
|
|
5
|
+
import { detectProjectFingerprint } from './fingerprint.js';
|
|
6
|
+
export function createCloudInitUnavailableError(message) {
|
|
7
|
+
return new HarnessError('INIT_CLOUD_UNAVAILABLE', message ??
|
|
8
|
+
'Cloud init service is unavailable. Rerun with --mode template-match or --mode local-manual.');
|
|
9
|
+
}
|
|
10
|
+
function sanitizeArtifactIdPart(value) {
|
|
11
|
+
return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
12
|
+
}
|
|
13
|
+
async function resolveArtifactAction(cwd, targetPath) {
|
|
14
|
+
try {
|
|
15
|
+
await stat(resolve(cwd, targetPath));
|
|
16
|
+
return 'update';
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return 'create';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function toInitAnswers(payload) {
|
|
23
|
+
return {
|
|
24
|
+
mode: 'cloud-auto',
|
|
25
|
+
...payload.requestedAssets,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function buildPreviewEntries(cwd, assets) {
|
|
29
|
+
return Promise.all(assets.map(async (asset) => ({
|
|
30
|
+
id: `cloud:${asset.assetType}:${sanitizeArtifactIdPart(asset.name)}`,
|
|
31
|
+
targetPath: asset.targetPath,
|
|
32
|
+
action: await resolveArtifactAction(cwd, asset.targetPath),
|
|
33
|
+
reason: asset.reason,
|
|
34
|
+
})));
|
|
35
|
+
}
|
|
36
|
+
export function createDefaultCloudInitAdapter(options = {}) {
|
|
37
|
+
const cloudAssetClient = options.cloudAssetClient ?? createDefaultCloudAssetClient();
|
|
38
|
+
return {
|
|
39
|
+
async generatePlanPreview(request) {
|
|
40
|
+
const fingerprint = await detectProjectFingerprint({ cwd: request.cwd });
|
|
41
|
+
const answers = toInitAnswers(request.payload);
|
|
42
|
+
const assembledResult = await cloudAssetClient.assembleAssets({
|
|
43
|
+
fingerprint,
|
|
44
|
+
answers,
|
|
45
|
+
});
|
|
46
|
+
const assets = assembledResult.assets;
|
|
47
|
+
if (assets.length === 0) {
|
|
48
|
+
throw createCloudInitUnavailableError('Cloud init returned no assets for the current workspace.');
|
|
49
|
+
}
|
|
50
|
+
const version = assets.find((asset) => asset.version !== 'dynamic')?.version ??
|
|
51
|
+
assembledResult.assets[0]?.version ??
|
|
52
|
+
'dynamic';
|
|
53
|
+
return {
|
|
54
|
+
source: 'harness-cloud/mastra',
|
|
55
|
+
version,
|
|
56
|
+
entries: await buildPreviewEntries(request.cwd, assets),
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=cloud-auto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-auto.js","sourceRoot":"","sources":["../../src/init/cloud-auto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,6BAA6B,GAG9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAgB5D,MAAM,UAAU,+BAA+B,CAAC,OAAgB;IAC9D,OAAO,IAAI,YAAY,CACrB,wBAAwB,EACxB,OAAO;QACL,6FAA6F,CAChG,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,UAAkB;IAClE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC;IACrD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,GAAG,OAAO,CAAC,eAAe;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAAW,EACX,MAA8B;IAE9B,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3B,EAAE,EAAE,SAAS,KAAK,CAAC,SAAS,IAAI,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACpE,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,MAAM,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC;QAC1D,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,UAAgD,EAAE;IAElD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,6BAA6B,EAAE,CAAC;IAErF,OAAO;QACL,KAAK,CAAC,mBAAmB,CAAC,OAAO;YAC/B,MAAM,WAAW,GAAG,MAAM,wBAAwB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAAC;gBAC5D,WAAW;gBACX,OAAO;aACR,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,+BAA+B,CAAC,0DAA0D,CAAC,CAAC;YACpG,CAAC;YAED,MAAM,OAAO,GACX,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,OAAO;gBAC5D,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO;gBAClC,SAAS,CAAC;YAEZ,OAAO;gBACL,MAAM,EAAE,sBAAsB;gBAC9B,OAAO;gBACP,OAAO,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;aACxD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CommandRouter } from '../kernel/router.js';
|
|
2
|
+
import type { InitPromptAdapter } from './prompt.js';
|
|
3
|
+
import type { CursorCliAdapter } from './cursor-adapter.js';
|
|
4
|
+
import type { CloudInitAdapter } from './cloud-auto.js';
|
|
5
|
+
import type { CloudAssetClient, CloudAssetDescriptor } from './cloud-asset-client.js';
|
|
6
|
+
export interface InitCommandDependencies {
|
|
7
|
+
promptAdapter?: InitPromptAdapter;
|
|
8
|
+
cursorCliAdapter?: CursorCliAdapter;
|
|
9
|
+
cloudInitAdapter?: CloudInitAdapter;
|
|
10
|
+
cloudAssetClient?: CloudAssetClient;
|
|
11
|
+
}
|
|
12
|
+
declare function renderInitHelp(programName?: string): string;
|
|
13
|
+
export declare function normalizeCursorAssetTargetPath(asset: CloudAssetDescriptor): string;
|
|
14
|
+
export declare function runInitCommand(args: string[], dependencies?: InitCommandDependencies): Promise<number>;
|
|
15
|
+
export declare function registerInitCommand(router: CommandRouter, dependencies?: InitCommandDependencies): void;
|
|
16
|
+
export { renderInitHelp };
|
|
17
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/init/command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAoBzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAUtF,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,iBAAS,cAAc,CAAC,WAAW,SAAY,GAAG,MAAM,CAkBvD;AAwID,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CA8ClF;AA4mBD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,GAAE,uBAA4B,GACzC,OAAO,CAAC,MAAM,CAAC,CA8HjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,GAAE,uBAA4B,GAAG,IAAI,CAE3G;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|