@cmflow/source-pack 3.21.0 → 3.22.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 CHANGED
@@ -51,7 +51,7 @@ import { defineConfig } from "@cmflow/source-pack";
51
51
 
52
52
  export default defineConfig({
53
53
  outputDir: "./tmp/source-pack",
54
- repository: { provider: "github", owner: "ClubMediterranee", name: "digital-api" },
54
+ repository: { provider: "github", owner: "acme", name: "example-api" },
55
55
  // GitLab: { provider: "gitlab", projectId: "group/project" (or 1234), apiUrl: "https://gitlab.example.com/api/v4" }
56
56
  sources: {
57
57
  include: ["**/*.{ts,tsx,js,json,yaml,yml,md,feature}"],
@@ -60,9 +60,9 @@ export default defineConfig({
60
60
  },
61
61
  chunking: { lines: 100, overlap: 15 },
62
62
  embedding: {
63
- baseUrl: "https://apim-prdaiplatform-frc.azure-api.net/litellm-api",
64
- model: "text-embedding-3-small-gmdt",
65
- fallbackModels: ["text-embedding-3-small-swc-gmdt", "text-embedding-3-small-eus2-gmdt"],
63
+ baseUrl: "https://litellm.example.com",
64
+ model: "text-embedding-3-small",
65
+ fallbackModels: ["text-embedding-3-small-fallback-1", "text-embedding-3-small-fallback-2"],
66
66
  referenceModel: "text-embedding-3-small",
67
67
  dimensions: 1536,
68
68
  batchSize: 64,
@@ -2988,7 +2988,7 @@ function run(action) {
2988
2988
  function registerCommands(program) {
2989
2989
  const configPath = () => path.resolve(process.cwd(), program.opts().config);
2990
2990
  program.command("init").description("Create a default source-pack.config.ts (repository deduced from the Git remote)").option("--force", "Overwrite an existing config", false).action((options) => run(async () => {
2991
- const { initConfig } = await import("../initConfig-DawW5Lht.mjs");
2991
+ const { initConfig } = await import("../initConfig-Cy7oMMxo.mjs");
2992
2992
  const result = await initConfig({
2993
2993
  configPath: configPath(),
2994
2994
  force: options.force
package/dist/index.d.mts CHANGED
@@ -88,7 +88,7 @@ interface SourceChunk {
88
88
  //#region src/interfaces/SourcePackManifest.d.ts
89
89
  interface SourcePackProject {
90
90
  provider: RepositoryProvider;
91
- /** Stable project identifier, e.g. `github:ClubMediterranee/digital-api` or `gitlab:1234`. */
91
+ /** Stable project identifier, e.g. `github:acme/example-api` or `gitlab:1234`. */
92
92
  id: string;
93
93
  owner?: string;
94
94
  name?: string;
@@ -140,9 +140,9 @@ export default defineConfig({
140
140
  },
141
141
  chunking: { lines: ${100}, overlap: ${15} },
142
142
  embedding: {
143
- baseUrl: "https://apim-prdaiplatform-frc.azure-api.net/litellm-api",
144
- model: "text-embedding-3-small-gmdt",
145
- fallbackModels: ["text-embedding-3-small-swc-gmdt", "text-embedding-3-small-eus2-gmdt"],
143
+ baseUrl: "https://litellm.example.com",
144
+ model: "text-embedding-3-small",
145
+ fallbackModels: ["text-embedding-3-small-fallback-1", "text-embedding-3-small-fallback-2"],
146
146
  referenceModel: "text-embedding-3-small",
147
147
  dimensions: ${DEFAULT_DIMENSIONS},
148
148
  batchSize: ${64}
@@ -181,4 +181,4 @@ async function initConfig({ configPath, force = false }) {
181
181
 
182
182
  //#endregion
183
183
  export { initConfig };
184
- //# sourceMappingURL=initConfig-DawW5Lht.mjs.map
184
+ //# sourceMappingURL=initConfig-Cy7oMMxo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"initConfig-DawW5Lht.mjs","names":[],"sources":["../src/git/parseRemoteUrl.ts","../src/init/detectProjectType.ts","../src/init/projectPresets.ts","../src/init/generateConfigSource.ts","../src/commands/initConfig.ts"],"sourcesContent":["import type { RepositoryProvider } from \"../config/interfaces/UserConfig\";\n\nexport interface ParsedRemote {\n provider: RepositoryProvider;\n host: string;\n owner: string;\n name: string;\n}\n\n/**\n * Parses an SSH (`git@host:owner/name.git`, `ssh://git@host:22/owner/name.git`) or HTTPS remote URL.\n * GitLab owners may contain subgroups (`group/sub`). Returns undefined for unknown hosts.\n */\nexport function parseRemoteUrl(remote: string): ParsedRemote | undefined {\n const trimmed = remote.trim();\n const scp = /^(?:[\\w.-]+@)?([\\w.-]+):(?!\\/\\/)(.+)$/.exec(trimmed);\n let host: string;\n let pathname: string;\n\n if (scp && !/^[a-z]+:\\/\\//i.test(trimmed)) {\n host = scp[1]!;\n pathname = scp[2]!;\n } else {\n try {\n const url = new URL(trimmed);\n host = url.hostname;\n pathname = url.pathname;\n } catch {\n return undefined;\n }\n }\n\n const segments = pathname\n .replace(/\\.git\\/?$/, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n if (segments.length < 2) {\n return undefined;\n }\n\n const provider: RepositoryProvider | undefined = /(^|\\.)github\\./i.test(host) ? \"github\" : /gitlab/i.test(host) ? \"gitlab\" : undefined;\n\n if (!provider) {\n return undefined;\n }\n\n return { provider, host, owner: segments.slice(0, -1).join(\"/\"), name: segments.at(-1)! };\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport type ProjectType = \"node\" | \"python\" | \"jvm\" | \"go\" | \"generic\";\n\nconst MARKERS: Array<[ProjectType, string[]]> = [\n [\"node\", [\"package.json\"]],\n [\"python\", [\"pyproject.toml\", \"requirements.txt\", \"setup.py\"]],\n [\"jvm\", [\"pom.xml\", \"build.gradle\", \"build.gradle.kts\"]],\n [\"go\", [\"go.mod\"]]\n];\n\nexport function detectProjectType(directory: string): ProjectType {\n return MARKERS.find(([, files]) => files.some((file) => existsSync(path.join(directory, file))))?.[0] ?? \"generic\";\n}\n","import {\n BUILD_OUTPUT_DIRS,\n DEFAULT_EXCLUDE,\n DEFAULT_INCLUDE,\n LOCKFILES_BY_ECOSYSTEM,\n NODE_DEPENDENCY_DIRS,\n TEST_FILES_BY_ECOSYSTEM\n} from \"../config/defaults\";\nimport type { ProjectType } from \"./detectProjectType\";\n\nexport interface ProjectPreset {\n include: string[];\n exclude: string[];\n}\n\nexport const PROJECT_PRESETS: Record<ProjectType, ProjectPreset> = {\n node: {\n include: [\"**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs,json,yaml,yml,md,feature,graphql}\"],\n exclude: [...NODE_DEPENDENCY_DIRS, ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.node, ...TEST_FILES_BY_ECOSYSTEM.node]\n },\n python: {\n include: [\"**/*.{py,pyi,toml,cfg,ini,json,yaml,yml,md}\"],\n exclude: [\n \"**/.venv/**\",\n \"**/venv/**\",\n \"**/__pycache__/**\",\n ...BUILD_OUTPUT_DIRS,\n ...LOCKFILES_BY_ECOSYSTEM.python,\n ...TEST_FILES_BY_ECOSYSTEM.python\n ]\n },\n jvm: {\n include: [\"**/*.{java,kt,kts,groovy,gradle,xml,properties,json,yaml,yml,md}\"],\n exclude: [\"**/target/**\", \"**/.gradle/**\", ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.jvm, ...TEST_FILES_BY_ECOSYSTEM.jvm]\n },\n go: {\n include: [\"**/*.{go,mod,json,yaml,yml,md,sql}\"],\n exclude: [\"**/vendor/**\", \"**/bin/**\", ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.go, ...TEST_FILES_BY_ECOSYSTEM.go]\n },\n generic: { include: DEFAULT_INCLUDE, exclude: DEFAULT_EXCLUDE }\n};\n","import {\n DEFAULT_API_KEY_ENV,\n DEFAULT_BATCH_SIZE,\n DEFAULT_CHUNK_LINES,\n DEFAULT_CHUNK_OVERLAP,\n DEFAULT_DIMENSIONS\n} from \"../config/defaults\";\nimport {\n DEFAULT_ASSET_NAME_TEMPLATE,\n DEFAULT_GITHUB_API_URL,\n DEFAULT_GITLAB_API_URL,\n DEFAULT_OUTPUT_DIR,\n DEFAULT_TAG_TEMPLATE,\n GITHUB_TOKEN_ENV,\n GITLAB_TOKEN_ENV\n} from \"../constants\";\nimport type { ParsedRemote } from \"../git/parseRemoteUrl\";\nimport type { ProjectType } from \"./detectProjectType\";\nimport { PROJECT_PRESETS } from \"./projectPresets\";\n\nexport interface GenerateConfigSourceOptions {\n remote?: ParsedRemote;\n projectType: ProjectType;\n}\n\nfunction list(values: string[], indent: string): string {\n return `[\\n${values.map((value) => `${indent} ${JSON.stringify(value)}`).join(\",\\n\")}\\n${indent}]`;\n}\n\nfunction apiUrlLine(remote: ParsedRemote | undefined): string {\n if (remote?.provider === \"gitlab\") {\n return remote.host === \"gitlab.com\"\n ? `// apiUrl: ${JSON.stringify(DEFAULT_GITLAB_API_URL)}`\n : `apiUrl: ${JSON.stringify(`https://${remote.host}/api/v4`)}`;\n }\n\n return remote && remote.host !== \"github.com\"\n ? `apiUrl: ${JSON.stringify(`https://${remote.host}/api/v3`)}`\n : `// apiUrl: ${JSON.stringify(DEFAULT_GITHUB_API_URL)}`;\n}\n\nfunction repositoryBlock(remote: ParsedRemote | undefined): string {\n const fields = [\n `provider: ${JSON.stringify(remote?.provider ?? \"github\")}`,\n `owner: ${JSON.stringify(remote?.owner ?? \"TODO-owner\")}`,\n `name: ${JSON.stringify(remote?.name ?? \"TODO-repository\")}`\n ];\n const apiUrl = apiUrlLine(remote);\n const lines = apiUrl.startsWith(\"//\") ? [fields.join(\",\\n \"), apiUrl] : [[...fields, apiUrl].join(\",\\n \")];\n\n return `{\\n ${lines.join(\"\\n \")}\\n }`;\n}\n\n/** Source of a default `source-pack.config.ts`, deduced from the Git remote and the project type. */\nexport function generateConfigSource({ remote, projectType }: GenerateConfigSourceOptions): string {\n const preset = PROJECT_PRESETS[projectType];\n\n return `import { defineConfig } from \"@cmflow/source-pack\";\n\n// Secrets are read from the environment only: ${DEFAULT_API_KEY_ENV} (embeddings), ${remote?.provider === \"gitlab\" ? GITLAB_TOKEN_ENV : GITHUB_TOKEN_ENV} (publish).\nexport default defineConfig({\n outputDir: ${JSON.stringify(DEFAULT_OUTPUT_DIR)},\n repository: ${repositoryBlock(remote)},\n sources: {\n include: ${list(preset.include, \" \")},\n // Adjust to the project: generated data, fixtures, mocks, vendored code...\n exclude: ${list(preset.exclude, \" \")}\n },\n chunking: { lines: ${DEFAULT_CHUNK_LINES}, overlap: ${DEFAULT_CHUNK_OVERLAP} },\n embedding: {\n baseUrl: \"https://apim-prdaiplatform-frc.azure-api.net/litellm-api\",\n model: \"text-embedding-3-small-gmdt\",\n fallbackModels: [\"text-embedding-3-small-swc-gmdt\", \"text-embedding-3-small-eus2-gmdt\"],\n referenceModel: \"text-embedding-3-small\",\n dimensions: ${DEFAULT_DIMENSIONS},\n batchSize: ${DEFAULT_BATCH_SIZE}\n },\n publish: {\n tag: ${JSON.stringify(DEFAULT_TAG_TEMPLATE)},\n assetName: ${JSON.stringify(DEFAULT_ASSET_NAME_TEMPLATE)}\n }\n});\n`;\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { GitRepository } from \"../git/GitRepository\";\nimport { type ParsedRemote, parseRemoteUrl } from \"../git/parseRemoteUrl\";\nimport { detectProjectType, type ProjectType } from \"../init/detectProjectType\";\nimport { generateConfigSource } from \"../init/generateConfigSource\";\n\nexport interface InitConfigOptions {\n configPath: string;\n force?: boolean;\n}\n\nexport interface InitConfigResult {\n configPath: string;\n remote?: ParsedRemote;\n projectType: ProjectType;\n}\n\n/** Writes a default `source-pack.config.ts` next to `configPath`, deduced from the Git remote `origin`. */\nexport async function initConfig({ configPath, force = false }: InitConfigOptions): Promise<InitConfigResult> {\n const directory = path.dirname(configPath);\n\n if (!force) {\n const exists = await access(configPath).then(\n () => true,\n () => false\n );\n\n if (exists) {\n throw new Error(`${configPath} already exists. Use --force to overwrite it.`);\n }\n }\n\n const repository = await GitRepository.open(directory).catch(() => undefined);\n const remoteUrl = await repository?.remoteUrl();\n const remote = remoteUrl ? parseRemoteUrl(remoteUrl) : undefined;\n const projectType = detectProjectType(repository?.root ?? directory);\n\n await mkdir(directory, { recursive: true });\n await writeFile(configPath, generateConfigSource({ remote, projectType }), \"utf8\");\n\n return { configPath, remote, projectType };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"initConfig-Cy7oMMxo.mjs","names":[],"sources":["../src/git/parseRemoteUrl.ts","../src/init/detectProjectType.ts","../src/init/projectPresets.ts","../src/init/generateConfigSource.ts","../src/commands/initConfig.ts"],"sourcesContent":["import type { RepositoryProvider } from \"../config/interfaces/UserConfig\";\n\nexport interface ParsedRemote {\n provider: RepositoryProvider;\n host: string;\n owner: string;\n name: string;\n}\n\n/**\n * Parses an SSH (`git@host:owner/name.git`, `ssh://git@host:22/owner/name.git`) or HTTPS remote URL.\n * GitLab owners may contain subgroups (`group/sub`). Returns undefined for unknown hosts.\n */\nexport function parseRemoteUrl(remote: string): ParsedRemote | undefined {\n const trimmed = remote.trim();\n const scp = /^(?:[\\w.-]+@)?([\\w.-]+):(?!\\/\\/)(.+)$/.exec(trimmed);\n let host: string;\n let pathname: string;\n\n if (scp && !/^[a-z]+:\\/\\//i.test(trimmed)) {\n host = scp[1]!;\n pathname = scp[2]!;\n } else {\n try {\n const url = new URL(trimmed);\n host = url.hostname;\n pathname = url.pathname;\n } catch {\n return undefined;\n }\n }\n\n const segments = pathname\n .replace(/\\.git\\/?$/, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n if (segments.length < 2) {\n return undefined;\n }\n\n const provider: RepositoryProvider | undefined = /(^|\\.)github\\./i.test(host) ? \"github\" : /gitlab/i.test(host) ? \"gitlab\" : undefined;\n\n if (!provider) {\n return undefined;\n }\n\n return { provider, host, owner: segments.slice(0, -1).join(\"/\"), name: segments.at(-1)! };\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport type ProjectType = \"node\" | \"python\" | \"jvm\" | \"go\" | \"generic\";\n\nconst MARKERS: Array<[ProjectType, string[]]> = [\n [\"node\", [\"package.json\"]],\n [\"python\", [\"pyproject.toml\", \"requirements.txt\", \"setup.py\"]],\n [\"jvm\", [\"pom.xml\", \"build.gradle\", \"build.gradle.kts\"]],\n [\"go\", [\"go.mod\"]]\n];\n\nexport function detectProjectType(directory: string): ProjectType {\n return MARKERS.find(([, files]) => files.some((file) => existsSync(path.join(directory, file))))?.[0] ?? \"generic\";\n}\n","import {\n BUILD_OUTPUT_DIRS,\n DEFAULT_EXCLUDE,\n DEFAULT_INCLUDE,\n LOCKFILES_BY_ECOSYSTEM,\n NODE_DEPENDENCY_DIRS,\n TEST_FILES_BY_ECOSYSTEM\n} from \"../config/defaults\";\nimport type { ProjectType } from \"./detectProjectType\";\n\nexport interface ProjectPreset {\n include: string[];\n exclude: string[];\n}\n\nexport const PROJECT_PRESETS: Record<ProjectType, ProjectPreset> = {\n node: {\n include: [\"**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs,json,yaml,yml,md,feature,graphql}\"],\n exclude: [...NODE_DEPENDENCY_DIRS, ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.node, ...TEST_FILES_BY_ECOSYSTEM.node]\n },\n python: {\n include: [\"**/*.{py,pyi,toml,cfg,ini,json,yaml,yml,md}\"],\n exclude: [\n \"**/.venv/**\",\n \"**/venv/**\",\n \"**/__pycache__/**\",\n ...BUILD_OUTPUT_DIRS,\n ...LOCKFILES_BY_ECOSYSTEM.python,\n ...TEST_FILES_BY_ECOSYSTEM.python\n ]\n },\n jvm: {\n include: [\"**/*.{java,kt,kts,groovy,gradle,xml,properties,json,yaml,yml,md}\"],\n exclude: [\"**/target/**\", \"**/.gradle/**\", ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.jvm, ...TEST_FILES_BY_ECOSYSTEM.jvm]\n },\n go: {\n include: [\"**/*.{go,mod,json,yaml,yml,md,sql}\"],\n exclude: [\"**/vendor/**\", \"**/bin/**\", ...BUILD_OUTPUT_DIRS, ...LOCKFILES_BY_ECOSYSTEM.go, ...TEST_FILES_BY_ECOSYSTEM.go]\n },\n generic: { include: DEFAULT_INCLUDE, exclude: DEFAULT_EXCLUDE }\n};\n","import {\n DEFAULT_API_KEY_ENV,\n DEFAULT_BATCH_SIZE,\n DEFAULT_CHUNK_LINES,\n DEFAULT_CHUNK_OVERLAP,\n DEFAULT_DIMENSIONS\n} from \"../config/defaults\";\nimport {\n DEFAULT_ASSET_NAME_TEMPLATE,\n DEFAULT_GITHUB_API_URL,\n DEFAULT_GITLAB_API_URL,\n DEFAULT_OUTPUT_DIR,\n DEFAULT_TAG_TEMPLATE,\n GITHUB_TOKEN_ENV,\n GITLAB_TOKEN_ENV\n} from \"../constants\";\nimport type { ParsedRemote } from \"../git/parseRemoteUrl\";\nimport type { ProjectType } from \"./detectProjectType\";\nimport { PROJECT_PRESETS } from \"./projectPresets\";\n\nexport interface GenerateConfigSourceOptions {\n remote?: ParsedRemote;\n projectType: ProjectType;\n}\n\nfunction list(values: string[], indent: string): string {\n return `[\\n${values.map((value) => `${indent} ${JSON.stringify(value)}`).join(\",\\n\")}\\n${indent}]`;\n}\n\nfunction apiUrlLine(remote: ParsedRemote | undefined): string {\n if (remote?.provider === \"gitlab\") {\n return remote.host === \"gitlab.com\"\n ? `// apiUrl: ${JSON.stringify(DEFAULT_GITLAB_API_URL)}`\n : `apiUrl: ${JSON.stringify(`https://${remote.host}/api/v4`)}`;\n }\n\n return remote && remote.host !== \"github.com\"\n ? `apiUrl: ${JSON.stringify(`https://${remote.host}/api/v3`)}`\n : `// apiUrl: ${JSON.stringify(DEFAULT_GITHUB_API_URL)}`;\n}\n\nfunction repositoryBlock(remote: ParsedRemote | undefined): string {\n const fields = [\n `provider: ${JSON.stringify(remote?.provider ?? \"github\")}`,\n `owner: ${JSON.stringify(remote?.owner ?? \"TODO-owner\")}`,\n `name: ${JSON.stringify(remote?.name ?? \"TODO-repository\")}`\n ];\n const apiUrl = apiUrlLine(remote);\n const lines = apiUrl.startsWith(\"//\") ? [fields.join(\",\\n \"), apiUrl] : [[...fields, apiUrl].join(\",\\n \")];\n\n return `{\\n ${lines.join(\"\\n \")}\\n }`;\n}\n\n/** Source of a default `source-pack.config.ts`, deduced from the Git remote and the project type. */\nexport function generateConfigSource({ remote, projectType }: GenerateConfigSourceOptions): string {\n const preset = PROJECT_PRESETS[projectType];\n\n return `import { defineConfig } from \"@cmflow/source-pack\";\n\n// Secrets are read from the environment only: ${DEFAULT_API_KEY_ENV} (embeddings), ${remote?.provider === \"gitlab\" ? GITLAB_TOKEN_ENV : GITHUB_TOKEN_ENV} (publish).\nexport default defineConfig({\n outputDir: ${JSON.stringify(DEFAULT_OUTPUT_DIR)},\n repository: ${repositoryBlock(remote)},\n sources: {\n include: ${list(preset.include, \" \")},\n // Adjust to the project: generated data, fixtures, mocks, vendored code...\n exclude: ${list(preset.exclude, \" \")}\n },\n chunking: { lines: ${DEFAULT_CHUNK_LINES}, overlap: ${DEFAULT_CHUNK_OVERLAP} },\n embedding: {\n baseUrl: \"https://litellm.example.com\",\n model: \"text-embedding-3-small\",\n fallbackModels: [\"text-embedding-3-small-fallback-1\", \"text-embedding-3-small-fallback-2\"],\n referenceModel: \"text-embedding-3-small\",\n dimensions: ${DEFAULT_DIMENSIONS},\n batchSize: ${DEFAULT_BATCH_SIZE}\n },\n publish: {\n tag: ${JSON.stringify(DEFAULT_TAG_TEMPLATE)},\n assetName: ${JSON.stringify(DEFAULT_ASSET_NAME_TEMPLATE)}\n }\n});\n`;\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { GitRepository } from \"../git/GitRepository\";\nimport { type ParsedRemote, parseRemoteUrl } from \"../git/parseRemoteUrl\";\nimport { detectProjectType, type ProjectType } from \"../init/detectProjectType\";\nimport { generateConfigSource } from \"../init/generateConfigSource\";\n\nexport interface InitConfigOptions {\n configPath: string;\n force?: boolean;\n}\n\nexport interface InitConfigResult {\n configPath: string;\n remote?: ParsedRemote;\n projectType: ProjectType;\n}\n\n/** Writes a default `source-pack.config.ts` next to `configPath`, deduced from the Git remote `origin`. */\nexport async function initConfig({ configPath, force = false }: InitConfigOptions): Promise<InitConfigResult> {\n const directory = path.dirname(configPath);\n\n if (!force) {\n const exists = await access(configPath).then(\n () => true,\n () => false\n );\n\n if (exists) {\n throw new Error(`${configPath} already exists. Use --force to overwrite it.`);\n }\n }\n\n const repository = await GitRepository.open(directory).catch(() => undefined);\n const remoteUrl = await repository?.remoteUrl();\n const remote = remoteUrl ? parseRemoteUrl(remoteUrl) : undefined;\n const projectType = detectProjectType(repository?.root ?? directory);\n\n await mkdir(directory, { recursive: true });\n await writeFile(configPath, generateConfigSource({ remote, projectType }), \"utf8\");\n\n return { configPath, remote, projectType };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cmflow/source-pack",
3
- "version": "3.21.0",
3
+ "version": "3.22.0",
4
4
  "description": "Versioned source code index (chunks + embeddings) built and published at each production release",
5
5
  "license": "MIT",
6
6
  "author": "romakita",