mewkit 1.7.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/commands/budget.d.ts +0 -6
- package/dist/commands/budget.d.ts.map +0 -1
- package/dist/commands/budget.js +0 -95
- package/dist/commands/budget.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -4
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -365
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/init.d.ts +0 -13
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -354
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -9
- package/dist/commands/memory.d.ts.map +0 -1
- package/dist/commands/memory.js +0 -217
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -21
- package/dist/commands/migrate.d.ts.map +0 -1
- package/dist/commands/migrate.js +0 -42
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -16
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -413
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/task.d.ts +0 -10
- package/dist/commands/task.d.ts.map +0 -1
- package/dist/commands/task.js +0 -313
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/upgrade.d.ts +0 -7
- package/dist/commands/upgrade.d.ts.map +0 -1
- package/dist/commands/upgrade.js +0 -143
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -2
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -139
- package/dist/commands/validate.js.map +0 -1
- package/dist/core/compute-checksums.d.ts +0 -25
- package/dist/core/compute-checksums.d.ts.map +0 -1
- package/dist/core/compute-checksums.js +0 -105
- package/dist/core/compute-checksums.js.map +0 -1
- package/dist/core/core-logger.d.ts +0 -9
- package/dist/core/core-logger.d.ts.map +0 -1
- package/dist/core/core-logger.js +0 -31
- package/dist/core/core-logger.js.map +0 -1
- package/dist/core/dependency-installer.d.ts +0 -29
- package/dist/core/dependency-installer.d.ts.map +0 -1
- package/dist/core/dependency-installer.js +0 -150
- package/dist/core/dependency-installer.js.map +0 -1
- package/dist/core/github-releases.d.ts +0 -32
- package/dist/core/github-releases.d.ts.map +0 -1
- package/dist/core/github-releases.js +0 -96
- package/dist/core/github-releases.js.map +0 -1
- package/dist/core/index.d.ts +0 -12
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -12
- package/dist/core/index.js.map +0 -1
- package/dist/core/merge-settings.d.ts +0 -7
- package/dist/core/merge-settings.d.ts.map +0 -1
- package/dist/core/merge-settings.js +0 -131
- package/dist/core/merge-settings.js.map +0 -1
- package/dist/core/skills-dependencies.d.ts +0 -25
- package/dist/core/skills-dependencies.d.ts.map +0 -1
- package/dist/core/skills-dependencies.js +0 -100
- package/dist/core/skills-dependencies.js.map +0 -1
- package/dist/core/smart-update-utils.d.ts +0 -10
- package/dist/core/smart-update-utils.d.ts.map +0 -1
- package/dist/core/smart-update-utils.js +0 -61
- package/dist/core/smart-update-utils.js.map +0 -1
- package/dist/core/smart-update.d.ts +0 -18
- package/dist/core/smart-update.d.ts.map +0 -1
- package/dist/core/smart-update.js +0 -177
- package/dist/core/smart-update.js.map +0 -1
- package/dist/core/substitute-placeholders.d.ts +0 -11
- package/dist/core/substitute-placeholders.d.ts.map +0 -1
- package/dist/core/substitute-placeholders.js +0 -28
- package/dist/core/substitute-placeholders.js.map +0 -1
- package/dist/core/validate-install.d.ts +0 -6
- package/dist/core/validate-install.d.ts.map +0 -1
- package/dist/core/validate-install.js +0 -97
- package/dist/core/validate-install.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -199
- package/dist/index.js.map +0 -1
- package/dist/lib/system-deps-registry.d.ts +0 -117
- package/dist/lib/system-deps-registry.d.ts.map +0 -1
- package/dist/lib/system-deps-registry.js +0 -234
- package/dist/lib/system-deps-registry.js.map +0 -1
- package/dist/logger.d.ts +0 -26
- package/dist/logger.js +0 -70
- package/dist/logger.js.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts +0 -2
- package/dist/migrate/__tests__/frontmatter-parser.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/frontmatter-parser.test.js +0 -73
- package/dist/migrate/__tests__/frontmatter-parser.test.js.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts +0 -2
- package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/md-strip-mewkit.test.js +0 -55
- package/dist/migrate/__tests__/md-strip-mewkit.test.js.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts +0 -2
- package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js +0 -53
- package/dist/migrate/__tests__/migrate-scope-resolver.test.js.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.d.ts +0 -2
- package/dist/migrate/__tests__/process-lock.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/process-lock.test.js +0 -63
- package/dist/migrate/__tests__/process-lock.test.js.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.d.ts +0 -2
- package/dist/migrate/__tests__/provider-registry.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/provider-registry.test.js +0 -53
- package/dist/migrate/__tests__/provider-registry.test.js.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.d.ts +0 -2
- package/dist/migrate/__tests__/reconciler.test.d.ts.map +0 -1
- package/dist/migrate/__tests__/reconciler.test.js +0 -180
- package/dist/migrate/__tests__/reconciler.test.js.map +0 -1
- package/dist/migrate/codex-capabilities.d.ts +0 -17
- package/dist/migrate/codex-capabilities.d.ts.map +0 -1
- package/dist/migrate/codex-capabilities.js +0 -95
- package/dist/migrate/codex-capabilities.js.map +0 -1
- package/dist/migrate/config-merger/merge-single-sections.d.ts +0 -20
- package/dist/migrate/config-merger/merge-single-sections.d.ts.map +0 -1
- package/dist/migrate/config-merger/merge-single-sections.js +0 -169
- package/dist/migrate/config-merger/merge-single-sections.js.map +0 -1
- package/dist/migrate/converters/claude-to-codex-hooks.d.ts +0 -23
- package/dist/migrate/converters/claude-to-codex-hooks.d.ts.map +0 -1
- package/dist/migrate/converters/claude-to-codex-hooks.js +0 -80
- package/dist/migrate/converters/claude-to-codex-hooks.js.map +0 -1
- package/dist/migrate/converters/direct-copy.d.ts +0 -3
- package/dist/migrate/converters/direct-copy.d.ts.map +0 -1
- package/dist/migrate/converters/direct-copy.js +0 -52
- package/dist/migrate/converters/direct-copy.js.map +0 -1
- package/dist/migrate/converters/fm-strip.d.ts +0 -4
- package/dist/migrate/converters/fm-strip.d.ts.map +0 -1
- package/dist/migrate/converters/fm-strip.js +0 -36
- package/dist/migrate/converters/fm-strip.js.map +0 -1
- package/dist/migrate/converters/fm-to-codex-toml.d.ts +0 -19
- package/dist/migrate/converters/fm-to-codex-toml.d.ts.map +0 -1
- package/dist/migrate/converters/fm-to-codex-toml.js +0 -93
- package/dist/migrate/converters/fm-to-codex-toml.js.map +0 -1
- package/dist/migrate/converters/fm-to-fm.d.ts +0 -3
- package/dist/migrate/converters/fm-to-fm.d.ts.map +0 -1
- package/dist/migrate/converters/fm-to-fm.js +0 -142
- package/dist/migrate/converters/fm-to-fm.js.map +0 -1
- package/dist/migrate/converters/fm-to-json.d.ts +0 -12
- package/dist/migrate/converters/fm-to-json.d.ts.map +0 -1
- package/dist/migrate/converters/fm-to-json.js +0 -55
- package/dist/migrate/converters/fm-to-json.js.map +0 -1
- package/dist/migrate/converters/fm-to-yaml.d.ts +0 -4
- package/dist/migrate/converters/fm-to-yaml.d.ts.map +0 -1
- package/dist/migrate/converters/fm-to-yaml.js +0 -62
- package/dist/migrate/converters/fm-to-yaml.js.map +0 -1
- package/dist/migrate/converters/gemini-hook-event-map.d.ts +0 -6
- package/dist/migrate/converters/gemini-hook-event-map.d.ts.map +0 -1
- package/dist/migrate/converters/gemini-hook-event-map.js +0 -41
- package/dist/migrate/converters/gemini-hook-event-map.js.map +0 -1
- package/dist/migrate/converters/index.d.ts +0 -12
- package/dist/migrate/converters/index.d.ts.map +0 -1
- package/dist/migrate/converters/index.js +0 -66
- package/dist/migrate/converters/index.js.map +0 -1
- package/dist/migrate/converters/md-strip.d.ts +0 -19
- package/dist/migrate/converters/md-strip.d.ts.map +0 -1
- package/dist/migrate/converters/md-strip.js +0 -290
- package/dist/migrate/converters/md-strip.js.map +0 -1
- package/dist/migrate/converters/md-to-kiro-steering.d.ts +0 -3
- package/dist/migrate/converters/md-to-kiro-steering.d.ts.map +0 -1
- package/dist/migrate/converters/md-to-kiro-steering.js +0 -90
- package/dist/migrate/converters/md-to-kiro-steering.js.map +0 -1
- package/dist/migrate/converters/md-to-mdc.d.ts +0 -3
- package/dist/migrate/converters/md-to-mdc.d.ts.map +0 -1
- package/dist/migrate/converters/md-to-mdc.js +0 -19
- package/dist/migrate/converters/md-to-mdc.js.map +0 -1
- package/dist/migrate/converters/md-to-toml.d.ts +0 -4
- package/dist/migrate/converters/md-to-toml.d.ts.map +0 -1
- package/dist/migrate/converters/md-to-toml.js +0 -25
- package/dist/migrate/converters/md-to-toml.js.map +0 -1
- package/dist/migrate/converters/skill-md.d.ts +0 -3
- package/dist/migrate/converters/skill-md.d.ts.map +0 -1
- package/dist/migrate/converters/skill-md.js +0 -18
- package/dist/migrate/converters/skill-md.js.map +0 -1
- package/dist/migrate/discovery/agents-discovery.d.ts +0 -3
- package/dist/migrate/discovery/agents-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/agents-discovery.js +0 -42
- package/dist/migrate/discovery/agents-discovery.js.map +0 -1
- package/dist/migrate/discovery/commands-discovery.d.ts +0 -3
- package/dist/migrate/discovery/commands-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/commands-discovery.js +0 -60
- package/dist/migrate/discovery/commands-discovery.js.map +0 -1
- package/dist/migrate/discovery/config-discovery.d.ts +0 -3
- package/dist/migrate/discovery/config-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/config-discovery.js +0 -17
- package/dist/migrate/discovery/config-discovery.js.map +0 -1
- package/dist/migrate/discovery/exclusions.d.ts +0 -5
- package/dist/migrate/discovery/exclusions.d.ts.map +0 -1
- package/dist/migrate/discovery/exclusions.js +0 -31
- package/dist/migrate/discovery/exclusions.js.map +0 -1
- package/dist/migrate/discovery/handlers-json-filter.d.ts +0 -17
- package/dist/migrate/discovery/handlers-json-filter.d.ts.map +0 -1
- package/dist/migrate/discovery/handlers-json-filter.js +0 -48
- package/dist/migrate/discovery/handlers-json-filter.js.map +0 -1
- package/dist/migrate/discovery/hooks-discovery.d.ts +0 -7
- package/dist/migrate/discovery/hooks-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/hooks-discovery.js +0 -45
- package/dist/migrate/discovery/hooks-discovery.js.map +0 -1
- package/dist/migrate/discovery/index.d.ts +0 -10
- package/dist/migrate/discovery/index.d.ts.map +0 -1
- package/dist/migrate/discovery/index.js +0 -10
- package/dist/migrate/discovery/index.js.map +0 -1
- package/dist/migrate/discovery/rules-discovery.d.ts +0 -3
- package/dist/migrate/discovery/rules-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/rules-discovery.js +0 -53
- package/dist/migrate/discovery/rules-discovery.js.map +0 -1
- package/dist/migrate/discovery/skills-discovery.d.ts +0 -5
- package/dist/migrate/discovery/skills-discovery.d.ts.map +0 -1
- package/dist/migrate/discovery/skills-discovery.js +0 -73
- package/dist/migrate/discovery/skills-discovery.js.map +0 -1
- package/dist/migrate/discovery/source-paths.d.ts +0 -13
- package/dist/migrate/discovery/source-paths.d.ts.map +0 -1
- package/dist/migrate/discovery/source-paths.js +0 -63
- package/dist/migrate/discovery/source-paths.js.map +0 -1
- package/dist/migrate/frontmatter-parser.d.ts +0 -4
- package/dist/migrate/frontmatter-parser.d.ts.map +0 -1
- package/dist/migrate/frontmatter-parser.js +0 -99
- package/dist/migrate/frontmatter-parser.js.map +0 -1
- package/dist/migrate/hooks/codex-features-flag.d.ts +0 -8
- package/dist/migrate/hooks/codex-features-flag.d.ts.map +0 -1
- package/dist/migrate/hooks/codex-features-flag.js +0 -146
- package/dist/migrate/hooks/codex-features-flag.js.map +0 -1
- package/dist/migrate/hooks/codex-hook-wrapper.d.ts +0 -10
- package/dist/migrate/hooks/codex-hook-wrapper.d.ts.map +0 -1
- package/dist/migrate/hooks/codex-hook-wrapper.js +0 -166
- package/dist/migrate/hooks/codex-hook-wrapper.js.map +0 -1
- package/dist/migrate/hooks/codex-path-safety.d.ts +0 -5
- package/dist/migrate/hooks/codex-path-safety.d.ts.map +0 -1
- package/dist/migrate/hooks/codex-path-safety.js +0 -99
- package/dist/migrate/hooks/codex-path-safety.js.map +0 -1
- package/dist/migrate/hooks/codex-toml-installer.d.ts +0 -15
- package/dist/migrate/hooks/codex-toml-installer.d.ts.map +0 -1
- package/dist/migrate/hooks/codex-toml-installer.js +0 -124
- package/dist/migrate/hooks/codex-toml-installer.js.map +0 -1
- package/dist/migrate/hooks/hooks-settings-merger.d.ts +0 -20
- package/dist/migrate/hooks/hooks-settings-merger.d.ts.map +0 -1
- package/dist/migrate/hooks/hooks-settings-merger.js +0 -273
- package/dist/migrate/hooks/hooks-settings-merger.js.map +0 -1
- package/dist/migrate/hooks/index.d.ts +0 -7
- package/dist/migrate/hooks/index.d.ts.map +0 -1
- package/dist/migrate/hooks/index.js +0 -7
- package/dist/migrate/hooks/index.js.map +0 -1
- package/dist/migrate/hooks/opencode-config-installer.d.ts +0 -31
- package/dist/migrate/hooks/opencode-config-installer.d.ts.map +0 -1
- package/dist/migrate/hooks/opencode-config-installer.js +0 -116
- package/dist/migrate/hooks/opencode-config-installer.js.map +0 -1
- package/dist/migrate/index.d.ts +0 -15
- package/dist/migrate/index.d.ts.map +0 -1
- package/dist/migrate/index.js +0 -15
- package/dist/migrate/index.js.map +0 -1
- package/dist/migrate/migrate-discover.d.ts +0 -28
- package/dist/migrate/migrate-discover.d.ts.map +0 -1
- package/dist/migrate/migrate-discover.js +0 -52
- package/dist/migrate/migrate-discover.js.map +0 -1
- package/dist/migrate/migrate-mode-resolver.d.ts +0 -10
- package/dist/migrate/migrate-mode-resolver.d.ts.map +0 -1
- package/dist/migrate/migrate-mode-resolver.js +0 -123
- package/dist/migrate/migrate-mode-resolver.js.map +0 -1
- package/dist/migrate/migrate-orchestrator.d.ts +0 -9
- package/dist/migrate/migrate-orchestrator.d.ts.map +0 -1
- package/dist/migrate/migrate-orchestrator.js +0 -204
- package/dist/migrate/migrate-orchestrator.js.map +0 -1
- package/dist/migrate/migrate-scope-resolver.d.ts +0 -19
- package/dist/migrate/migrate-scope-resolver.d.ts.map +0 -1
- package/dist/migrate/migrate-scope-resolver.js +0 -81
- package/dist/migrate/migrate-scope-resolver.js.map +0 -1
- package/dist/migrate/migrate-ui-summary.d.ts +0 -14
- package/dist/migrate/migrate-ui-summary.d.ts.map +0 -1
- package/dist/migrate/migrate-ui-summary.js +0 -65
- package/dist/migrate/migrate-ui-summary.js.map +0 -1
- package/dist/migrate/model-taxonomy.d.ts +0 -16
- package/dist/migrate/model-taxonomy.d.ts.map +0 -1
- package/dist/migrate/model-taxonomy.js +0 -58
- package/dist/migrate/model-taxonomy.js.map +0 -1
- package/dist/migrate/portable-installer.d.ts +0 -14
- package/dist/migrate/portable-installer.d.ts.map +0 -1
- package/dist/migrate/portable-installer.js +0 -159
- package/dist/migrate/portable-installer.js.map +0 -1
- package/dist/migrate/provider-overrides.d.ts +0 -8
- package/dist/migrate/provider-overrides.d.ts.map +0 -1
- package/dist/migrate/provider-overrides.js +0 -40
- package/dist/migrate/provider-overrides.js.map +0 -1
- package/dist/migrate/provider-registry-utils.d.ts +0 -23
- package/dist/migrate/provider-registry-utils.d.ts.map +0 -1
- package/dist/migrate/provider-registry-utils.js +0 -67
- package/dist/migrate/provider-registry-utils.js.map +0 -1
- package/dist/migrate/provider-registry.d.ts +0 -5
- package/dist/migrate/provider-registry.d.ts.map +0 -1
- package/dist/migrate/provider-registry.js +0 -327
- package/dist/migrate/provider-registry.js.map +0 -1
- package/dist/migrate/reconcile/checksum-utils.d.ts +0 -8
- package/dist/migrate/reconcile/checksum-utils.d.ts.map +0 -1
- package/dist/migrate/reconcile/checksum-utils.js +0 -32
- package/dist/migrate/reconcile/checksum-utils.js.map +0 -1
- package/dist/migrate/reconcile/conflict-resolver.d.ts +0 -8
- package/dist/migrate/reconcile/conflict-resolver.d.ts.map +0 -1
- package/dist/migrate/reconcile/conflict-resolver.js +0 -59
- package/dist/migrate/reconcile/conflict-resolver.js.map +0 -1
- package/dist/migrate/reconcile/diff-display.d.ts +0 -6
- package/dist/migrate/reconcile/diff-display.d.ts.map +0 -1
- package/dist/migrate/reconcile/diff-display.js +0 -40
- package/dist/migrate/reconcile/diff-display.js.map +0 -1
- package/dist/migrate/reconcile/index.d.ts +0 -10
- package/dist/migrate/reconcile/index.d.ts.map +0 -1
- package/dist/migrate/reconcile/index.js +0 -10
- package/dist/migrate/reconcile/index.js.map +0 -1
- package/dist/migrate/reconcile/output-sanitizer.d.ts +0 -3
- package/dist/migrate/reconcile/output-sanitizer.d.ts.map +0 -1
- package/dist/migrate/reconcile/output-sanitizer.js +0 -42
- package/dist/migrate/reconcile/output-sanitizer.js.map +0 -1
- package/dist/migrate/reconcile/portable-registry.d.ts +0 -142
- package/dist/migrate/reconcile/portable-registry.d.ts.map +0 -1
- package/dist/migrate/reconcile/portable-registry.js +0 -224
- package/dist/migrate/reconcile/portable-registry.js.map +0 -1
- package/dist/migrate/reconcile/process-lock.d.ts +0 -15
- package/dist/migrate/reconcile/process-lock.d.ts.map +0 -1
- package/dist/migrate/reconcile/process-lock.js +0 -77
- package/dist/migrate/reconcile/process-lock.js.map +0 -1
- package/dist/migrate/reconcile/reconcile-state-builders.d.ts +0 -24
- package/dist/migrate/reconcile/reconcile-state-builders.d.ts.map +0 -1
- package/dist/migrate/reconcile/reconcile-state-builders.js +0 -185
- package/dist/migrate/reconcile/reconcile-state-builders.js.map +0 -1
- package/dist/migrate/reconcile/reconcile-types.d.ts +0 -113
- package/dist/migrate/reconcile/reconcile-types.d.ts.map +0 -1
- package/dist/migrate/reconcile/reconcile-types.js +0 -42
- package/dist/migrate/reconcile/reconcile-types.js.map +0 -1
- package/dist/migrate/reconcile/reconciler.d.ts +0 -3
- package/dist/migrate/reconcile/reconciler.d.ts.map +0 -1
- package/dist/migrate/reconcile/reconciler.js +0 -445
- package/dist/migrate/reconcile/reconciler.js.map +0 -1
- package/dist/migrate/skill-directory-installer.d.ts +0 -23
- package/dist/migrate/skill-directory-installer.d.ts.map +0 -1
- package/dist/migrate/skill-directory-installer.js +0 -55
- package/dist/migrate/skill-directory-installer.js.map +0 -1
- package/dist/migrate/types.d.ts +0 -172
- package/dist/migrate/types.d.ts.map +0 -1
- package/dist/migrate/types.js +0 -45
- package/dist/migrate/types.js.map +0 -1
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Append-only merge for .claude/settings.json.
|
|
3
|
-
* Adds new MeowKit hooks/permissions without modifying existing user entries.
|
|
4
|
-
* Backs up before merge, restores on failure.
|
|
5
|
-
*/
|
|
6
|
-
import { readFileSync, writeFileSync, copyFileSync, existsSync, mkdirSync } from "node:fs";
|
|
7
|
-
import { dirname } from "node:path";
|
|
8
|
-
import * as log from "./core-logger.js";
|
|
9
|
-
/**
|
|
10
|
-
* Merge template settings.json into existing user settings.json.
|
|
11
|
-
* Strategy: append-only — add new hooks/permissions, never modify existing.
|
|
12
|
-
* Returns true if merge succeeded, false if skipped or failed.
|
|
13
|
-
*/
|
|
14
|
-
export function mergeSettingsFile(templatePath, destPath, dryRun) {
|
|
15
|
-
if (!existsSync(templatePath)) {
|
|
16
|
-
log.debug("Template settings.json not found, skipping merge");
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
// If dest doesn't exist, just copy
|
|
20
|
-
if (!existsSync(destPath)) {
|
|
21
|
-
if (!dryRun) {
|
|
22
|
-
mkdirSync(dirname(destPath), { recursive: true });
|
|
23
|
-
copyFileSync(templatePath, destPath);
|
|
24
|
-
}
|
|
25
|
-
log.debug("settings.json: fresh copy (no existing file)");
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
if (dryRun) {
|
|
29
|
-
log.debug("settings.json: would merge (dry-run)");
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
// Read both files
|
|
33
|
-
let userSettings;
|
|
34
|
-
let templateSettings;
|
|
35
|
-
try {
|
|
36
|
-
userSettings = JSON.parse(readFileSync(destPath, "utf-8"));
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
log.warn("settings.json: invalid JSON in existing file, skipping merge");
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
templateSettings = JSON.parse(readFileSync(templatePath, "utf-8"));
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
log.warn("settings.json: invalid JSON in template, skipping merge");
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
// Backup before merge
|
|
50
|
-
const backupPath = destPath + ".bak";
|
|
51
|
-
copyFileSync(destPath, backupPath);
|
|
52
|
-
try {
|
|
53
|
-
const merged = appendOnlyMerge(userSettings, templateSettings);
|
|
54
|
-
writeFileSync(destPath, JSON.stringify(merged, null, 2) + "\n", "utf-8");
|
|
55
|
-
log.debug("settings.json: merged successfully");
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
// Restore backup on failure
|
|
60
|
-
copyFileSync(backupPath, destPath);
|
|
61
|
-
log.warn(`settings.json merge failed, restored backup: ${err instanceof Error ? err.message : String(err)}`);
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** Append-only merge: add new template entries to user settings without modifying existing */
|
|
66
|
-
function appendOnlyMerge(user, template) {
|
|
67
|
-
const result = { ...user };
|
|
68
|
-
// Copy new top-level keys from template (e.g. statusLine) without overwriting existing
|
|
69
|
-
for (const key of Object.keys(template)) {
|
|
70
|
-
if (key !== "hooks" && key !== "permissions" && !(key in result)) {
|
|
71
|
-
result[key] = template[key];
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Merge hooks: add new hook matchers that don't exist in user's config
|
|
75
|
-
if (template.hooks) {
|
|
76
|
-
if (!result.hooks)
|
|
77
|
-
result.hooks = {};
|
|
78
|
-
for (const [event, templateMatchers] of Object.entries(template.hooks)) {
|
|
79
|
-
if (!result.hooks[event]) {
|
|
80
|
-
// Entire hook event is new — add it
|
|
81
|
-
result.hooks[event] = templateMatchers;
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
// Event exists — add only matchers with commands not already present
|
|
85
|
-
const userMatchers = result.hooks[event];
|
|
86
|
-
const userCommands = extractCommandStrings(userMatchers);
|
|
87
|
-
for (const templateMatcher of templateMatchers) {
|
|
88
|
-
const newHooks = templateMatcher.hooks.filter((h) => !userCommands.has(normalizeCommand(h.command)));
|
|
89
|
-
if (newHooks.length > 0) {
|
|
90
|
-
// Find existing matcher with same matcher pattern, or create new
|
|
91
|
-
const existingMatcher = userMatchers.find((m) => (m.matcher ?? "") === (templateMatcher.matcher ?? ""));
|
|
92
|
-
if (existingMatcher) {
|
|
93
|
-
existingMatcher.hooks.push(...newHooks);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
userMatchers.push({ ...templateMatcher, hooks: newHooks });
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// Merge permissions.allow: union of arrays
|
|
103
|
-
if (template.permissions?.allow) {
|
|
104
|
-
if (!result.permissions)
|
|
105
|
-
result.permissions = {};
|
|
106
|
-
if (!result.permissions.allow)
|
|
107
|
-
result.permissions.allow = [];
|
|
108
|
-
const existingSet = new Set(result.permissions.allow);
|
|
109
|
-
for (const perm of template.permissions.allow) {
|
|
110
|
-
if (!existingSet.has(perm)) {
|
|
111
|
-
result.permissions.allow.push(perm);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
/** Extract all command strings from hook matchers for deduplication */
|
|
118
|
-
function extractCommandStrings(matchers) {
|
|
119
|
-
const commands = new Set();
|
|
120
|
-
for (const matcher of matchers) {
|
|
121
|
-
for (const hook of matcher.hooks) {
|
|
122
|
-
commands.add(normalizeCommand(hook.command));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return commands;
|
|
126
|
-
}
|
|
127
|
-
/** Normalize command string for comparison (trim whitespace, collapse spaces) */
|
|
128
|
-
function normalizeCommand(cmd) {
|
|
129
|
-
return cmd.trim().replace(/\s+/g, " ");
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=merge-settings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-settings.js","sourceRoot":"","sources":["../../src/core/merge-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/** Skills dependency config — single source of truth for pip packages */
|
|
2
|
-
export interface SkillsDependency {
|
|
3
|
-
/** pip package name (as passed to pip install) */
|
|
4
|
-
name: string;
|
|
5
|
-
/** Human-readable description for prompt display */
|
|
6
|
-
description: string;
|
|
7
|
-
}
|
|
8
|
-
/** Default pip packages installed into .claude/skills/.venv */
|
|
9
|
-
export declare const DEFAULT_PIP_PACKAGES: readonly SkillsDependency[];
|
|
10
|
-
/** Extract base package name, stripping version specifiers (e.g. "pillow>=10.0" → "pillow") */
|
|
11
|
-
export declare function getBasePackageName(name: string): string;
|
|
12
|
-
export declare function validatePackageName(name: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Resolve pip packages to install.
|
|
15
|
-
* Walks per-skill requirements.txt files, merges and deduplicates.
|
|
16
|
-
* Falls back to DEFAULT_PIP_PACKAGES if no requirements files found.
|
|
17
|
-
*/
|
|
18
|
-
export declare function getRequirementsSource(projectDir: string): {
|
|
19
|
-
packages: readonly SkillsDependency[];
|
|
20
|
-
source: string;
|
|
21
|
-
rejected: string[];
|
|
22
|
-
};
|
|
23
|
-
/** Format packages for CLI display */
|
|
24
|
-
export declare function formatPackageList(packages: readonly SkillsDependency[]): string;
|
|
25
|
-
//# sourceMappingURL=skills-dependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-dependencies.d.ts","sourceRoot":"","sources":["../../src/core/skills-dependencies.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAKzE,MAAM,WAAW,gBAAgB;IAChC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,EAAE,SAAS,gBAAgB,EAIlD,CAAC;AAKX,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAsCD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG;IAC1D,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB,CAyBA;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAO/E"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/** Skills dependency config — single source of truth for pip packages */
|
|
2
|
-
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
/** Default pip packages installed into .claude/skills/.venv */
|
|
5
|
-
export const DEFAULT_PIP_PACKAGES = [
|
|
6
|
-
{ name: "google-genai", description: "Gemini API client (meow:multimodal skill)" },
|
|
7
|
-
{ name: "pillow", description: "Image processing (meow:multimodal)" },
|
|
8
|
-
{ name: "python-dotenv", description: "Env var loading (optional — scripts have fallback)" },
|
|
9
|
-
];
|
|
10
|
-
/** Validate pip package name — rejects flags, URLs, shell-breaking chars */
|
|
11
|
-
const SAFE_PKG_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*(\[[a-zA-Z0-9,_-]*\])?(==|>=|<=|!=|~=|<|>)?[a-zA-Z0-9.*]*$/;
|
|
12
|
-
/** Extract base package name, stripping version specifiers (e.g. "pillow>=10.0" → "pillow") */
|
|
13
|
-
export function getBasePackageName(name) {
|
|
14
|
-
return (name.split(/[=<>!~]/)[0] ?? name).toLowerCase();
|
|
15
|
-
}
|
|
16
|
-
export function validatePackageName(name) {
|
|
17
|
-
if (!name || name.startsWith("-") || name.includes("://"))
|
|
18
|
-
return false;
|
|
19
|
-
return SAFE_PKG_RE.test(getBasePackageName(name));
|
|
20
|
-
}
|
|
21
|
-
// Collect per-skill requirements.txt files from .claude/skills/{skill}/scripts/
|
|
22
|
-
function findRequirementsFiles(projectDir) {
|
|
23
|
-
const skillsDir = join(projectDir, ".claude", "skills");
|
|
24
|
-
if (!existsSync(skillsDir))
|
|
25
|
-
return [];
|
|
26
|
-
const found = [];
|
|
27
|
-
try {
|
|
28
|
-
for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {
|
|
29
|
-
if (!entry.isDirectory())
|
|
30
|
-
continue;
|
|
31
|
-
const reqPath = join(skillsDir, entry.name, "scripts", "requirements.txt");
|
|
32
|
-
if (existsSync(reqPath))
|
|
33
|
-
found.push(reqPath);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
/* skills dir not readable */
|
|
38
|
-
}
|
|
39
|
-
return found;
|
|
40
|
-
}
|
|
41
|
-
/** Parse a single requirements.txt, validating each line */
|
|
42
|
-
function parseRequirementsFile(filePath) {
|
|
43
|
-
const content = readFileSync(filePath, "utf-8");
|
|
44
|
-
const lines = content
|
|
45
|
-
.split("\n")
|
|
46
|
-
.map((l) => l.trim())
|
|
47
|
-
.filter((l) => l && !l.startsWith("#"));
|
|
48
|
-
const packages = [];
|
|
49
|
-
const rejected = [];
|
|
50
|
-
for (const line of lines) {
|
|
51
|
-
if (validatePackageName(line)) {
|
|
52
|
-
packages.push({ name: line, description: "" });
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
rejected.push(line);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return { packages, rejected };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Resolve pip packages to install.
|
|
62
|
-
* Walks per-skill requirements.txt files, merges and deduplicates.
|
|
63
|
-
* Falls back to DEFAULT_PIP_PACKAGES if no requirements files found.
|
|
64
|
-
*/
|
|
65
|
-
export function getRequirementsSource(projectDir) {
|
|
66
|
-
const reqFiles = findRequirementsFiles(projectDir);
|
|
67
|
-
if (reqFiles.length > 0) {
|
|
68
|
-
const allPackages = [];
|
|
69
|
-
const allRejected = [];
|
|
70
|
-
const seen = new Set();
|
|
71
|
-
for (const filePath of reqFiles) {
|
|
72
|
-
const { packages, rejected } = parseRequirementsFile(filePath);
|
|
73
|
-
for (const pkg of packages) {
|
|
74
|
-
const baseName = getBasePackageName(pkg.name);
|
|
75
|
-
if (!seen.has(baseName)) {
|
|
76
|
-
seen.add(baseName);
|
|
77
|
-
allPackages.push(pkg);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
allRejected.push(...rejected);
|
|
81
|
-
}
|
|
82
|
-
if (allRejected.length > 0) {
|
|
83
|
-
console.warn(` Skipped ${allRejected.length} invalid line(s) across ${reqFiles.length} requirements file(s)`);
|
|
84
|
-
}
|
|
85
|
-
if (allPackages.length > 0) {
|
|
86
|
-
return { packages: allPackages, source: `${reqFiles.length} requirements.txt file(s)`, rejected: allRejected };
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return { packages: DEFAULT_PIP_PACKAGES, source: "built-in defaults", rejected: [] };
|
|
90
|
-
}
|
|
91
|
-
/** Format packages for CLI display */
|
|
92
|
-
export function formatPackageList(packages) {
|
|
93
|
-
return packages
|
|
94
|
-
.map((p) => {
|
|
95
|
-
const desc = p.description ? ` ${p.description}` : "";
|
|
96
|
-
return ` ${p.name.padEnd(18)}${desc}`;
|
|
97
|
-
})
|
|
98
|
-
.join("\n");
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=skills-dependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-dependencies.js","sourceRoot":"","sources":["../../src/core/skills-dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Parse .meowkitignore once, return a matcher function */
|
|
2
|
-
export declare function loadIgnorePatterns(targetDir: string): (relPath: string) => boolean;
|
|
3
|
-
/** Recursively collect files from a directory */
|
|
4
|
-
export declare function walkDir(dir: string, base: string): Array<{
|
|
5
|
-
relPath: string;
|
|
6
|
-
srcPath: string;
|
|
7
|
-
}>;
|
|
8
|
-
/** Copy a single file, creating parent dirs. Sets executable for hooks/scripts. */
|
|
9
|
-
export declare function copyFile(src: string, dest: string, dryRun: boolean): void;
|
|
10
|
-
//# sourceMappingURL=smart-update-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-update-utils.d.ts","sourceRoot":"","sources":["../../src/core/smart-update-utils.ts"],"names":[],"mappings":"AAMA,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAmBlF;AAED,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB9F;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAazE"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper utilities for smart-update: file copying, .meowkitignore parsing, directory walking.
|
|
3
|
-
*/
|
|
4
|
-
import { existsSync, readFileSync, readdirSync, statSync, mkdirSync, copyFileSync, chmodSync } from "node:fs";
|
|
5
|
-
import { join, relative, dirname, basename } from "node:path";
|
|
6
|
-
/** Parse .meowkitignore once, return a matcher function */
|
|
7
|
-
export function loadIgnorePatterns(targetDir) {
|
|
8
|
-
const ignorePath = join(targetDir, ".meowkitignore");
|
|
9
|
-
if (!existsSync(ignorePath))
|
|
10
|
-
return () => false;
|
|
11
|
-
const patterns = readFileSync(ignorePath, "utf-8")
|
|
12
|
-
.split("\n")
|
|
13
|
-
.map((l) => l.trim())
|
|
14
|
-
.filter((l) => l && !l.startsWith("#"));
|
|
15
|
-
if (patterns.length === 0)
|
|
16
|
-
return () => false;
|
|
17
|
-
return (relPath) => {
|
|
18
|
-
for (const p of patterns) {
|
|
19
|
-
if (relPath === p)
|
|
20
|
-
return true;
|
|
21
|
-
if (p.endsWith("/") && relPath.startsWith(p))
|
|
22
|
-
return true;
|
|
23
|
-
if (relPath.startsWith(p + "/"))
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/** Recursively collect files from a directory */
|
|
30
|
-
export function walkDir(dir, base) {
|
|
31
|
-
const results = [];
|
|
32
|
-
const SKIP = new Set(["__pycache__", "node_modules", ".DS_Store"]);
|
|
33
|
-
for (const entry of readdirSync(dir)) {
|
|
34
|
-
if (SKIP.has(entry) || entry.endsWith(".pyc") || entry.endsWith("_INDEX.md") || entry === "SKILLS_ATTRIBUTION.md")
|
|
35
|
-
continue;
|
|
36
|
-
const full = join(dir, entry);
|
|
37
|
-
const stat = statSync(full);
|
|
38
|
-
if (stat.isDirectory()) {
|
|
39
|
-
results.push(...walkDir(full, base));
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
results.push({ relPath: relative(base, full), srcPath: full });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return results;
|
|
46
|
-
}
|
|
47
|
-
/** Copy a single file, creating parent dirs. Sets executable for hooks/scripts. */
|
|
48
|
-
export function copyFile(src, dest, dryRun) {
|
|
49
|
-
if (dryRun)
|
|
50
|
-
return;
|
|
51
|
-
mkdirSync(dirname(dest), { recursive: true });
|
|
52
|
-
copyFileSync(src, dest);
|
|
53
|
-
// Use path.basename(path.dirname(...)) rather than splitting on "/" because
|
|
54
|
-
// Node's path returns platform separators (\ on Windows, / elsewhere).
|
|
55
|
-
const parent = basename(dirname(dest));
|
|
56
|
-
const ext = basename(dest).includes(".") ? "." + basename(dest).split(".").pop() : "";
|
|
57
|
-
if (ext === ".sh" || ext === ".cjs" || parent === "hooks" || parent === "bin") {
|
|
58
|
-
chmodSync(dest, 0o755);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=smart-update-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-update-utils.js","sourceRoot":"","sources":["../../src/core/smart-update-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { UserConfig } from "./substitute-placeholders.js";
|
|
2
|
-
export interface UpdateStats {
|
|
3
|
-
updated: number;
|
|
4
|
-
skipped: number;
|
|
5
|
-
added: number;
|
|
6
|
-
userModified: string[];
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Smart update from a downloaded release directory.
|
|
10
|
-
*
|
|
11
|
-
* @param config - User configuration (description, API keys, etc.)
|
|
12
|
-
* @param sourceDir - Path to extracted release (contains .claude/, tasks/, CLAUDE.md)
|
|
13
|
-
* @param targetDir - User's project directory
|
|
14
|
-
* @param dryRun - Preview only, no writes
|
|
15
|
-
* @param force - Overwrite all files, ignore user modifications
|
|
16
|
-
*/
|
|
17
|
-
export declare function smartUpdate(config: UserConfig, sourceDir: string, targetDir: string, dryRun: boolean, force?: boolean): Promise<UpdateStats>;
|
|
18
|
-
//# sourceMappingURL=smart-update.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-update.d.ts","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAK/D,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAChC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,KAAK,UAAQ,GACX,OAAO,CAAC,WAAW,CAAC,CA6LtB"}
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import * as log from "./core-logger.js";
|
|
4
|
-
import { processTemplate } from "./substitute-placeholders.js";
|
|
5
|
-
import { mergeSettingsFile } from "./merge-settings.js";
|
|
6
|
-
import { readManifest, buildManifest, writeManifest, hashFile, classifyLayer } from "./compute-checksums.js";
|
|
7
|
-
import { loadIgnorePatterns, walkDir, copyFile } from "./smart-update-utils.js";
|
|
8
|
-
/**
|
|
9
|
-
* Smart update from a downloaded release directory.
|
|
10
|
-
*
|
|
11
|
-
* @param config - User configuration (description, API keys, etc.)
|
|
12
|
-
* @param sourceDir - Path to extracted release (contains .claude/, tasks/, CLAUDE.md)
|
|
13
|
-
* @param targetDir - User's project directory
|
|
14
|
-
* @param dryRun - Preview only, no writes
|
|
15
|
-
* @param force - Overwrite all files, ignore user modifications
|
|
16
|
-
*/
|
|
17
|
-
export async function smartUpdate(config, sourceDir, targetDir, dryRun, force = false) {
|
|
18
|
-
const oldManifest = force ? null : readManifest(join(targetDir, ".claude"));
|
|
19
|
-
const stats = { updated: 0, skipped: 0, added: 0, userModified: [] };
|
|
20
|
-
if (!oldManifest && existsSync(join(targetDir, ".claude"))) {
|
|
21
|
-
log.warn("No manifest found — will treat all existing files as unmodified.");
|
|
22
|
-
}
|
|
23
|
-
const oldChecksums = oldManifest?.checksums ?? {};
|
|
24
|
-
const isIgnored = loadIgnorePatterns(targetDir);
|
|
25
|
-
// Source .claude/ from downloaded release
|
|
26
|
-
const claudeSrc = join(sourceDir, ".claude");
|
|
27
|
-
if (!existsSync(claudeSrc)) {
|
|
28
|
-
log.error(`Release .claude/ not found at: ${claudeSrc}`);
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
// Walk .claude/ files from release
|
|
32
|
-
const claudeFiles = walkDir(claudeSrc, claudeSrc).map((f) => ({ ...f, relPath: `.claude/${f.relPath}` }));
|
|
33
|
-
for (const { relPath, srcPath } of claudeFiles) {
|
|
34
|
-
const destPath = join(targetDir, relPath);
|
|
35
|
-
const layer = classifyLayer(relPath);
|
|
36
|
-
if (isIgnored(relPath)) {
|
|
37
|
-
log.debug(`Ignored (protected): ${relPath}`);
|
|
38
|
-
stats.skipped++;
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
// settings.json uses append-only merge
|
|
42
|
-
if (relPath === ".claude/settings.json") {
|
|
43
|
-
mergeSettingsFile(srcPath, destPath, dryRun);
|
|
44
|
-
stats.updated++;
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
// User layer: never overwrite
|
|
48
|
-
if (layer === "user") {
|
|
49
|
-
if (existsSync(destPath)) {
|
|
50
|
-
log.debug(`Skipped (user layer): ${relPath}`);
|
|
51
|
-
stats.skipped++;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
copyFile(srcPath, destPath, dryRun);
|
|
55
|
-
stats.added++;
|
|
56
|
-
}
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
// New file → always add
|
|
60
|
-
if (!existsSync(destPath)) {
|
|
61
|
-
copyFile(srcPath, destPath, dryRun);
|
|
62
|
-
log.debug(`Added (new): ${relPath}`);
|
|
63
|
-
stats.added++;
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
// File exists — check if user modified it
|
|
67
|
-
const currentHash = hashFile(destPath);
|
|
68
|
-
const manifestEntry = oldChecksums[relPath];
|
|
69
|
-
if (manifestEntry && currentHash !== manifestEntry.sha256) {
|
|
70
|
-
log.debug(`Skipped (user-modified): ${relPath}`);
|
|
71
|
-
stats.userModified.push(relPath);
|
|
72
|
-
stats.skipped++;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
// Safe to overwrite
|
|
76
|
-
copyFile(srcPath, destPath, dryRun);
|
|
77
|
-
stats.updated++;
|
|
78
|
-
}
|
|
79
|
-
// Copy tasks/ from release
|
|
80
|
-
const tasksSrc = join(sourceDir, "tasks");
|
|
81
|
-
if (existsSync(tasksSrc)) {
|
|
82
|
-
const taskFiles = walkDir(tasksSrc, tasksSrc).map((f) => ({ ...f, relPath: `tasks/${f.relPath}` }));
|
|
83
|
-
for (const { relPath, srcPath: tSrc } of taskFiles) {
|
|
84
|
-
const tDest = join(targetDir, relPath);
|
|
85
|
-
if (!existsSync(tDest)) {
|
|
86
|
-
copyFile(tSrc, tDest, dryRun);
|
|
87
|
-
stats.added++;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (!dryRun) {
|
|
91
|
-
for (const dir of ["tasks/active", "tasks/completed", "tasks/backlog", "tasks/guidelines"]) {
|
|
92
|
-
mkdirSync(join(targetDir, dir), { recursive: true });
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const claudeDir = join(targetDir, ".claude");
|
|
97
|
-
// CLAUDE.md at project root
|
|
98
|
-
const claudeMdSrc = join(sourceDir, "CLAUDE.md");
|
|
99
|
-
const claudeMdDest = join(targetDir, "CLAUDE.md");
|
|
100
|
-
if (existsSync(claudeMdSrc) && !existsSync(claudeMdDest)) {
|
|
101
|
-
processTemplate(claudeMdSrc, claudeMdDest, config, dryRun);
|
|
102
|
-
stats.added++;
|
|
103
|
-
}
|
|
104
|
-
// meowkit.config.json template (generated, not from release)
|
|
105
|
-
const configDest = join(claudeDir, "meowkit.config.json");
|
|
106
|
-
if (!existsSync(configDest)) {
|
|
107
|
-
if (!dryRun) {
|
|
108
|
-
mkdirSync(claudeDir, { recursive: true });
|
|
109
|
-
const configContent = JSON.stringify({
|
|
110
|
-
$schema: "https://meowkit.dev/schema/config.json",
|
|
111
|
-
version: "1.0.0",
|
|
112
|
-
project: { description: config.description || "" },
|
|
113
|
-
features: { costTracking: config.enableCostTracking, memory: config.enableMemory },
|
|
114
|
-
}, null, 2);
|
|
115
|
-
writeFileSync(configDest, configContent + "\n", "utf-8");
|
|
116
|
-
}
|
|
117
|
-
stats.added++;
|
|
118
|
-
}
|
|
119
|
-
// Write .env with API keys (single read-modify-write cycle)
|
|
120
|
-
const envPath = join(claudeDir, ".env");
|
|
121
|
-
const hasNewKeys = config.geminiApiKey || config.externalProviderKeys;
|
|
122
|
-
if (hasNewKeys) {
|
|
123
|
-
let envContent = existsSync(envPath)
|
|
124
|
-
? readFileSync(envPath, "utf-8")
|
|
125
|
-
: "# MeowKit environment variables\n# Never commit this file to git.\n\n";
|
|
126
|
-
if (config.geminiApiKey && !envContent.includes("MEOWKIT_GEMINI_API_KEY=")) {
|
|
127
|
-
envContent += `MEOWKIT_GEMINI_API_KEY=${config.geminiApiKey}\n`;
|
|
128
|
-
}
|
|
129
|
-
// Legacy migration: if GEMINI_API_KEY exists but MEOWKIT_ doesn't, add it
|
|
130
|
-
if (!config.geminiApiKey &&
|
|
131
|
-
envContent.includes("GEMINI_API_KEY=") &&
|
|
132
|
-
!envContent.includes("MEOWKIT_GEMINI_API_KEY=")) {
|
|
133
|
-
const match = envContent.match(/^GEMINI_API_KEY=(.+)$/m);
|
|
134
|
-
if (match?.[1]?.trim()) {
|
|
135
|
-
envContent += `MEOWKIT_GEMINI_API_KEY=${match[1].trim()}\n`;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
if (config.externalProviderKeys) {
|
|
139
|
-
for (const [envVar, value] of Object.entries(config.externalProviderKeys)) {
|
|
140
|
-
if (!envContent.includes(`${envVar}=`)) {
|
|
141
|
-
envContent += `${envVar}=${value}\n`;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (!dryRun) {
|
|
146
|
-
writeFileSync(envPath, envContent, "utf-8");
|
|
147
|
-
}
|
|
148
|
-
stats.added++;
|
|
149
|
-
// Ensure .gitignore covers .claude/.env (prevents accidental commits)
|
|
150
|
-
const gitignorePath = join(targetDir, ".gitignore");
|
|
151
|
-
if (!dryRun) {
|
|
152
|
-
let gitignoreContent = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf-8") : "";
|
|
153
|
-
if (!gitignoreContent.includes(".claude/.env")) {
|
|
154
|
-
gitignoreContent += "\n# MeowKit secrets\n.claude/.env\n";
|
|
155
|
-
writeFileSync(gitignorePath, gitignoreContent, "utf-8");
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Ensure memory + logs dirs exist
|
|
160
|
-
if (!dryRun) {
|
|
161
|
-
mkdirSync(join(targetDir, ".claude", "memory"), { recursive: true });
|
|
162
|
-
mkdirSync(join(targetDir, ".claude", "logs"), { recursive: true });
|
|
163
|
-
}
|
|
164
|
-
// Write manifest
|
|
165
|
-
if (!dryRun) {
|
|
166
|
-
const newManifest = buildManifest(claudeDir);
|
|
167
|
-
writeManifest(claudeDir, newManifest);
|
|
168
|
-
}
|
|
169
|
-
log.setData("update", {
|
|
170
|
-
updated: stats.updated,
|
|
171
|
-
skipped: stats.skipped,
|
|
172
|
-
added: stats.added,
|
|
173
|
-
userModified: stats.userModified,
|
|
174
|
-
});
|
|
175
|
-
return stats;
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=smart-update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smart-update.js","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/** User configuration for template substitution */
|
|
2
|
-
export interface UserConfig {
|
|
3
|
-
description: string;
|
|
4
|
-
enableCostTracking: boolean;
|
|
5
|
-
enableMemory: boolean;
|
|
6
|
-
geminiApiKey: string | null;
|
|
7
|
-
externalProviderKeys?: Record<string, string>;
|
|
8
|
-
}
|
|
9
|
-
/** Process a .template file: substitute placeholders, write to destPath */
|
|
10
|
-
export declare function processTemplate(templatePath: string, destPath: string, config: UserConfig, dryRun: boolean): void;
|
|
11
|
-
//# sourceMappingURL=substitute-placeholders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"substitute-placeholders.d.ts","sourceRoot":"","sources":["../../src/core/substitute-placeholders.ts"],"names":[],"mappings":"AAIA,mDAAmD;AACnD,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAcD,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAejH"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
import pc from "picocolors";
|
|
4
|
-
const PREFIX = "__MEOWKIT_";
|
|
5
|
-
const SUFFIX = "__";
|
|
6
|
-
/** Builds placeholder → value map from user config */
|
|
7
|
-
function buildReplacements(config) {
|
|
8
|
-
return {
|
|
9
|
-
[`${PREFIX}DESCRIPTION${SUFFIX}`]: config.description || "",
|
|
10
|
-
[`${PREFIX}COST_TRACKING${SUFFIX}`]: String(config.enableCostTracking),
|
|
11
|
-
[`${PREFIX}MEMORY_ENABLED${SUFFIX}`]: String(config.enableMemory),
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
/** Process a .template file: substitute placeholders, write to destPath */
|
|
15
|
-
export function processTemplate(templatePath, destPath, config, dryRun) {
|
|
16
|
-
if (dryRun) {
|
|
17
|
-
console.log(` ${pc.dim("create")} ${destPath}`);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
let content = readFileSync(templatePath, "utf-8");
|
|
21
|
-
const replacements = buildReplacements(config);
|
|
22
|
-
for (const [key, value] of Object.entries(replacements)) {
|
|
23
|
-
content = content.replaceAll(key, value);
|
|
24
|
-
}
|
|
25
|
-
mkdirSync(dirname(destPath), { recursive: true });
|
|
26
|
-
writeFileSync(destPath, content, "utf-8");
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=substitute-placeholders.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"substitute-placeholders.js","sourceRoot":"","sources":["../../src/core/substitute-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAW5B,MAAM,MAAM,GAAG,YAAY,CAAC;AAC5B,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB,sDAAsD;AACtD,SAAS,iBAAiB,CAAC,MAAkB;IAC5C,OAAO;QACN,CAAC,GAAG,MAAM,cAAc,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QAC3D,CAAC,GAAG,MAAM,gBAAgB,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACtE,CAAC,GAAG,MAAM,iBAAiB,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;KACjE,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,QAAgB,EAAE,MAAkB,EAAE,MAAe;IAC1G,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO;IACR,CAAC;IAED,IAAI,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate-install.d.ts","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAsCD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAiE5D"}
|