@stoneforge/quarry 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration File Loading
|
|
3
|
+
*
|
|
4
|
+
* Handles YAML configuration file parsing, discovery, and writing.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import * as yaml from 'yaml';
|
|
10
|
+
import { ValidationError, ErrorCode } from '@stoneforge/core';
|
|
11
|
+
import { isValidIdentityMode } from '../systems/identity.js';
|
|
12
|
+
import { parseDurationValue } from './duration.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/** Default config file name */
|
|
17
|
+
export const CONFIG_FILE_NAME = 'config.yaml';
|
|
18
|
+
/** Default .stoneforge directory name */
|
|
19
|
+
export const STONEFORGE_DIR = '.stoneforge';
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// File Discovery
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Finds the nearest .stoneforge directory by walking up from the given directory.
|
|
25
|
+
*
|
|
26
|
+
* This function first checks the STONEFORGE_ROOT environment variable, which
|
|
27
|
+
* is used to support agents working in git worktrees. When an agent is spawned
|
|
28
|
+
* in a worktree, STONEFORGE_ROOT points to the main workspace root where the
|
|
29
|
+
* SQLite database lives.
|
|
30
|
+
*
|
|
31
|
+
* @param startDir - Directory to start searching from
|
|
32
|
+
* @returns Path to .stoneforge directory, or undefined if not found
|
|
33
|
+
*/
|
|
34
|
+
export function findStoneforgeDir(startDir) {
|
|
35
|
+
// Check STONEFORGE_ROOT env var first - used for worktree root-finding
|
|
36
|
+
// When agents work in git worktrees, they need to access the main
|
|
37
|
+
// workspace's .stoneforge directory where the SQLite database lives
|
|
38
|
+
const envRoot = process.env.STONEFORGE_ROOT;
|
|
39
|
+
if (envRoot) {
|
|
40
|
+
const stoneforgePath = path.join(envRoot, STONEFORGE_DIR);
|
|
41
|
+
if (fs.existsSync(stoneforgePath) && fs.statSync(stoneforgePath).isDirectory()) {
|
|
42
|
+
return stoneforgePath;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Fall back to walk-up search
|
|
46
|
+
let currentDir = path.resolve(startDir);
|
|
47
|
+
const root = path.parse(currentDir).root;
|
|
48
|
+
while (currentDir !== root) {
|
|
49
|
+
const stoneforgePath = path.join(currentDir, STONEFORGE_DIR);
|
|
50
|
+
if (fs.existsSync(stoneforgePath) && fs.statSync(stoneforgePath).isDirectory()) {
|
|
51
|
+
return stoneforgePath;
|
|
52
|
+
}
|
|
53
|
+
currentDir = path.dirname(currentDir);
|
|
54
|
+
}
|
|
55
|
+
// Check root
|
|
56
|
+
const rootStoneforgePath = path.join(root, STONEFORGE_DIR);
|
|
57
|
+
if (fs.existsSync(rootStoneforgePath) && fs.statSync(rootStoneforgePath).isDirectory()) {
|
|
58
|
+
return rootStoneforgePath;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets the global config directory path
|
|
64
|
+
*/
|
|
65
|
+
export function getGlobalConfigDir() {
|
|
66
|
+
return path.join(os.homedir(), STONEFORGE_DIR);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the global config file path
|
|
70
|
+
*/
|
|
71
|
+
export function getGlobalConfigPath() {
|
|
72
|
+
return path.join(getGlobalConfigDir(), CONFIG_FILE_NAME);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Discovers the configuration file location
|
|
76
|
+
*
|
|
77
|
+
* @param overridePath - Optional override path to use
|
|
78
|
+
* @param startDir - Directory to start searching from (default: cwd)
|
|
79
|
+
* @returns Discovery result with path and existence info
|
|
80
|
+
*/
|
|
81
|
+
export function discoverConfigFile(overridePath, startDir = process.cwd()) {
|
|
82
|
+
// If override path is provided, use it directly
|
|
83
|
+
if (overridePath) {
|
|
84
|
+
const resolvedPath = path.resolve(overridePath);
|
|
85
|
+
const exists = fs.existsSync(resolvedPath);
|
|
86
|
+
return {
|
|
87
|
+
path: resolvedPath,
|
|
88
|
+
exists,
|
|
89
|
+
stoneforgeDir: exists ? path.dirname(resolvedPath) : undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Try to find .stoneforge directory
|
|
93
|
+
const stoneforgeDir = findStoneforgeDir(startDir);
|
|
94
|
+
if (stoneforgeDir) {
|
|
95
|
+
const configPath = path.join(stoneforgeDir, CONFIG_FILE_NAME);
|
|
96
|
+
return {
|
|
97
|
+
path: configPath,
|
|
98
|
+
exists: fs.existsSync(configPath),
|
|
99
|
+
stoneforgeDir,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Fall back to global config
|
|
103
|
+
const globalPath = getGlobalConfigPath();
|
|
104
|
+
return {
|
|
105
|
+
path: globalPath,
|
|
106
|
+
exists: fs.existsSync(globalPath),
|
|
107
|
+
stoneforgeDir: fs.existsSync(getGlobalConfigDir()) ? getGlobalConfigDir() : undefined,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// ============================================================================
|
|
111
|
+
// YAML Parsing
|
|
112
|
+
// ============================================================================
|
|
113
|
+
/**
|
|
114
|
+
* Parses YAML content into a config file structure
|
|
115
|
+
*
|
|
116
|
+
* @param content - YAML string content
|
|
117
|
+
* @param filePath - Path to file (for error messages)
|
|
118
|
+
* @returns Parsed YAML config object
|
|
119
|
+
*/
|
|
120
|
+
export function parseYamlConfig(content, filePath) {
|
|
121
|
+
try {
|
|
122
|
+
const parsed = yaml.parse(content);
|
|
123
|
+
if (parsed === null || parsed === undefined) {
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
if (typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
127
|
+
throw new ValidationError(`Configuration file must contain an object${filePath ? ` (${filePath})` : ''}`, ErrorCode.INVALID_INPUT, { value: parsed });
|
|
128
|
+
}
|
|
129
|
+
return parsed;
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
if (err instanceof ValidationError) {
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
throw new ValidationError(`Failed to parse YAML configuration${filePath ? ` (${filePath})` : ''}: ${err instanceof Error ? err.message : String(err)}`, ErrorCode.INVALID_INPUT, { filePath });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Converts YAML config (snake_case) to internal format (camelCase)
|
|
140
|
+
*
|
|
141
|
+
* @param yamlConfig - Parsed YAML config
|
|
142
|
+
* @returns Partial configuration in internal format
|
|
143
|
+
*/
|
|
144
|
+
export function convertYamlToConfig(yamlConfig) {
|
|
145
|
+
const result = {};
|
|
146
|
+
// Direct fields
|
|
147
|
+
if (yamlConfig.actor !== undefined) {
|
|
148
|
+
result.actor = yamlConfig.actor;
|
|
149
|
+
}
|
|
150
|
+
if (yamlConfig.database !== undefined) {
|
|
151
|
+
result.database = yamlConfig.database;
|
|
152
|
+
}
|
|
153
|
+
// Sync section
|
|
154
|
+
if (yamlConfig.sync) {
|
|
155
|
+
result.sync = {};
|
|
156
|
+
if (yamlConfig.sync.auto_export !== undefined) {
|
|
157
|
+
result.sync.autoExport = yamlConfig.sync.auto_export;
|
|
158
|
+
}
|
|
159
|
+
if (yamlConfig.sync.export_debounce !== undefined) {
|
|
160
|
+
result.sync.exportDebounce = parseDurationValue(yamlConfig.sync.export_debounce);
|
|
161
|
+
}
|
|
162
|
+
if (yamlConfig.sync.elements_file !== undefined) {
|
|
163
|
+
result.sync.elementsFile = yamlConfig.sync.elements_file;
|
|
164
|
+
}
|
|
165
|
+
if (yamlConfig.sync.dependencies_file !== undefined) {
|
|
166
|
+
result.sync.dependenciesFile = yamlConfig.sync.dependencies_file;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Playbooks section
|
|
170
|
+
if (yamlConfig.playbooks?.paths) {
|
|
171
|
+
result.playbooks = {
|
|
172
|
+
paths: yamlConfig.playbooks.paths,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Tombstone section
|
|
176
|
+
if (yamlConfig.tombstone) {
|
|
177
|
+
result.tombstone = {};
|
|
178
|
+
if (yamlConfig.tombstone.ttl !== undefined) {
|
|
179
|
+
result.tombstone.ttl = parseDurationValue(yamlConfig.tombstone.ttl);
|
|
180
|
+
}
|
|
181
|
+
if (yamlConfig.tombstone.min_ttl !== undefined) {
|
|
182
|
+
result.tombstone.minTtl = parseDurationValue(yamlConfig.tombstone.min_ttl);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Identity section
|
|
186
|
+
if (yamlConfig.identity) {
|
|
187
|
+
result.identity = {};
|
|
188
|
+
if (yamlConfig.identity.mode !== undefined) {
|
|
189
|
+
if (!isValidIdentityMode(yamlConfig.identity.mode)) {
|
|
190
|
+
throw new ValidationError(`Invalid identity mode: '${yamlConfig.identity.mode}'. Must be one of: soft, cryptographic, hybrid`, ErrorCode.INVALID_INPUT, { field: 'identity.mode', value: yamlConfig.identity.mode });
|
|
191
|
+
}
|
|
192
|
+
result.identity.mode = yamlConfig.identity.mode;
|
|
193
|
+
}
|
|
194
|
+
if (yamlConfig.identity.time_tolerance !== undefined) {
|
|
195
|
+
result.identity.timeTolerance = parseDurationValue(yamlConfig.identity.time_tolerance);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Plugins section
|
|
199
|
+
if (yamlConfig.plugins?.packages) {
|
|
200
|
+
result.plugins = {
|
|
201
|
+
packages: yamlConfig.plugins.packages,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Reads and parses a configuration file
|
|
208
|
+
*
|
|
209
|
+
* @param filePath - Path to the configuration file
|
|
210
|
+
* @returns Partial configuration from the file
|
|
211
|
+
*/
|
|
212
|
+
export function readConfigFile(filePath) {
|
|
213
|
+
if (!fs.existsSync(filePath)) {
|
|
214
|
+
return {};
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
218
|
+
const yamlConfig = parseYamlConfig(content, filePath);
|
|
219
|
+
return convertYamlToConfig(yamlConfig);
|
|
220
|
+
}
|
|
221
|
+
catch (err) {
|
|
222
|
+
if (err instanceof ValidationError) {
|
|
223
|
+
throw err;
|
|
224
|
+
}
|
|
225
|
+
throw new ValidationError(`Failed to read configuration file '${filePath}': ${err instanceof Error ? err.message : String(err)}`, ErrorCode.INVALID_INPUT, { filePath });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// ============================================================================
|
|
229
|
+
// YAML Writing
|
|
230
|
+
// ============================================================================
|
|
231
|
+
/**
|
|
232
|
+
* Converts internal config (camelCase) to YAML format (snake_case)
|
|
233
|
+
*
|
|
234
|
+
* @param config - Configuration in internal format
|
|
235
|
+
* @returns YAML config object
|
|
236
|
+
*/
|
|
237
|
+
export function convertConfigToYaml(config) {
|
|
238
|
+
const result = {};
|
|
239
|
+
// Direct fields
|
|
240
|
+
if (config.actor !== undefined) {
|
|
241
|
+
result.actor = config.actor;
|
|
242
|
+
}
|
|
243
|
+
if (config.database !== undefined) {
|
|
244
|
+
result.database = config.database;
|
|
245
|
+
}
|
|
246
|
+
// Sync section
|
|
247
|
+
if (config.sync) {
|
|
248
|
+
result.sync = {};
|
|
249
|
+
if (config.sync.autoExport !== undefined) {
|
|
250
|
+
result.sync.auto_export = config.sync.autoExport;
|
|
251
|
+
}
|
|
252
|
+
if (config.sync.exportDebounce !== undefined) {
|
|
253
|
+
result.sync.export_debounce = config.sync.exportDebounce;
|
|
254
|
+
}
|
|
255
|
+
if (config.sync.elementsFile !== undefined) {
|
|
256
|
+
result.sync.elements_file = config.sync.elementsFile;
|
|
257
|
+
}
|
|
258
|
+
if (config.sync.dependenciesFile !== undefined) {
|
|
259
|
+
result.sync.dependencies_file = config.sync.dependenciesFile;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Playbooks section
|
|
263
|
+
if (config.playbooks?.paths) {
|
|
264
|
+
result.playbooks = {
|
|
265
|
+
paths: config.playbooks.paths,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
// Tombstone section
|
|
269
|
+
if (config.tombstone) {
|
|
270
|
+
result.tombstone = {};
|
|
271
|
+
if (config.tombstone.ttl !== undefined) {
|
|
272
|
+
result.tombstone.ttl = config.tombstone.ttl;
|
|
273
|
+
}
|
|
274
|
+
if (config.tombstone.minTtl !== undefined) {
|
|
275
|
+
result.tombstone.min_ttl = config.tombstone.minTtl;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Identity section
|
|
279
|
+
if (config.identity) {
|
|
280
|
+
result.identity = {};
|
|
281
|
+
if (config.identity.mode !== undefined) {
|
|
282
|
+
result.identity.mode = config.identity.mode;
|
|
283
|
+
}
|
|
284
|
+
if (config.identity.timeTolerance !== undefined) {
|
|
285
|
+
result.identity.time_tolerance = config.identity.timeTolerance;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Plugins section
|
|
289
|
+
if (config.plugins?.packages && config.plugins.packages.length > 0) {
|
|
290
|
+
result.plugins = {
|
|
291
|
+
packages: config.plugins.packages,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
return result;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Serializes configuration to YAML string
|
|
298
|
+
*
|
|
299
|
+
* @param config - Configuration to serialize
|
|
300
|
+
* @returns YAML string
|
|
301
|
+
*/
|
|
302
|
+
export function serializeConfigToYaml(config) {
|
|
303
|
+
const yamlConfig = convertConfigToYaml(config);
|
|
304
|
+
return yaml.stringify(yamlConfig, {
|
|
305
|
+
indent: 2,
|
|
306
|
+
lineWidth: 120,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Writes configuration to a file
|
|
311
|
+
*
|
|
312
|
+
* @param filePath - Path to write to
|
|
313
|
+
* @param config - Configuration to write
|
|
314
|
+
*/
|
|
315
|
+
export function writeConfigFile(filePath, config) {
|
|
316
|
+
const dir = path.dirname(filePath);
|
|
317
|
+
// Ensure directory exists
|
|
318
|
+
if (!fs.existsSync(dir)) {
|
|
319
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
320
|
+
}
|
|
321
|
+
const content = `# Stoneforge Configuration\n\n${serializeConfigToYaml(config)}`;
|
|
322
|
+
fs.writeFileSync(filePath, content, 'utf-8');
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Updates a configuration file by merging with existing content
|
|
326
|
+
*
|
|
327
|
+
* @param filePath - Path to the configuration file
|
|
328
|
+
* @param updates - Partial configuration to merge
|
|
329
|
+
*/
|
|
330
|
+
export function updateConfigFile(filePath, updates) {
|
|
331
|
+
// Read existing config
|
|
332
|
+
const existing = readConfigFile(filePath);
|
|
333
|
+
// Merge updates with the help of deep merge
|
|
334
|
+
const merged = {
|
|
335
|
+
...existing,
|
|
336
|
+
...updates,
|
|
337
|
+
sync: updates.sync ? { ...existing.sync, ...updates.sync } : existing.sync,
|
|
338
|
+
playbooks: updates.playbooks ? { ...existing.playbooks, ...updates.playbooks } : existing.playbooks,
|
|
339
|
+
tombstone: updates.tombstone ? { ...existing.tombstone, ...updates.tombstone } : existing.tombstone,
|
|
340
|
+
identity: updates.identity ? { ...existing.identity, ...updates.identity } : existing.identity,
|
|
341
|
+
};
|
|
342
|
+
writeConfigFile(filePath, merged);
|
|
343
|
+
}
|
|
344
|
+
// ============================================================================
|
|
345
|
+
// Path Expansion
|
|
346
|
+
// ============================================================================
|
|
347
|
+
/**
|
|
348
|
+
* Expands ~ to home directory in a path
|
|
349
|
+
*/
|
|
350
|
+
export function expandPath(filePath) {
|
|
351
|
+
if (filePath.startsWith('~/')) {
|
|
352
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
353
|
+
}
|
|
354
|
+
if (filePath === '~') {
|
|
355
|
+
return os.homedir();
|
|
356
|
+
}
|
|
357
|
+
return filePath;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Expands ~ in all playbook paths
|
|
361
|
+
*/
|
|
362
|
+
export function expandPlaybookPaths(paths) {
|
|
363
|
+
return paths.map(expandPath);
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/config/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration System
|
|
3
|
+
*
|
|
4
|
+
* Manages settings for Stoneforge, supporting file-based configuration,
|
|
5
|
+
* environment variables, and CLI overrides with a clear precedence hierarchy.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import {
|
|
10
|
+
* loadConfig,
|
|
11
|
+
* getConfig,
|
|
12
|
+
* getValue,
|
|
13
|
+
* setValue,
|
|
14
|
+
* getDefaultConfig,
|
|
15
|
+
* } from './config/index.js';
|
|
16
|
+
*
|
|
17
|
+
* // Load and access configuration
|
|
18
|
+
* const config = loadConfig();
|
|
19
|
+
* const actor = getValue('actor');
|
|
20
|
+
* const mode = getValue('identity.mode');
|
|
21
|
+
*
|
|
22
|
+
* // Modify configuration
|
|
23
|
+
* setValue('actor', 'my-agent');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export type { Duration, DurationString, SyncConfig, PlaybookConfig, TombstoneConfig, IdentityConfigSection, PluginsConfig, Configuration, PartialConfiguration, ConfigSource, TrackedValue, TrackedConfiguration, YamlConfigFile, ConfigFileDiscovery, ConfigValidationResult, ConfigPath, ConfigPathTypes, LoadConfigOptions, EnvVar, } from './types.js';
|
|
27
|
+
export { EnvVars, ConfigSource as ConfigSourceEnum, VALID_CONFIG_PATHS, isValidConfigPath } from './types.js';
|
|
28
|
+
export { DEFAULT_CONFIG, DEFAULT_SYNC_CONFIG, DEFAULT_PLAYBOOK_CONFIG, DEFAULT_TOMBSTONE_CONFIG, DEFAULT_IDENTITY_CONFIG, DEFAULT_PLUGINS_CONFIG, getDefaultConfig, ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, MIN_EXPORT_DEBOUNCE, MAX_EXPORT_DEBOUNCE, MIN_TIME_TOLERANCE, MAX_TIME_TOLERANCE, MAX_TTL, } from './defaults.js';
|
|
29
|
+
export { DURATION_UNITS, isDurationString, parseDuration, parseDurationValue, tryParseDuration, formatDuration, formatDurationHuman, validateDurationRange, } from './duration.js';
|
|
30
|
+
export { isValidActor, validateActor, isValidDatabase, validateDatabase, isValidJsonlFilename, validateJsonlFilename, isValidPlaybookPaths, validatePlaybookPaths, validateConfiguration, validateConfigurationSafe, validatePartialConfiguration, } from './validation.js';
|
|
31
|
+
export { deepMerge, mergeConfiguration, mergeConfigurations, createConfiguration, cloneConfiguration, diffConfigurations, configurationsEqual, } from './merge.js';
|
|
32
|
+
export { CONFIG_FILE_NAME, STONEFORGE_DIR, findStoneforgeDir, getGlobalConfigDir, getGlobalConfigPath, discoverConfigFile, parseYamlConfig, convertYamlToConfig, readConfigFile, convertConfigToYaml, serializeConfigToYaml, writeConfigFile, updateConfigFile, expandPath, expandPlaybookPaths, } from './file.js';
|
|
33
|
+
export { parseEnvBoolean, isEnvBoolean, parseEnvDuration, getEnvVar, hasEnvVar, loadEnvConfig, getEnvConfigPath, getEnvJsonMode, getEnvVerboseMode, getEnvVarInfo, getSetEnvVars, } from './env.js';
|
|
34
|
+
export { loadConfig, getConfig, getTrackedConfig, reloadConfig, clearConfigCache, getValue, getValueFromConfig, getValueSource, getValueWithSource, setValue, unsetValue, getConfigPath, configFileExists, saveConfig, } from './config.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,YAAY,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG9G,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,GACR,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration System
|
|
3
|
+
*
|
|
4
|
+
* Manages settings for Stoneforge, supporting file-based configuration,
|
|
5
|
+
* environment variables, and CLI overrides with a clear precedence hierarchy.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import {
|
|
10
|
+
* loadConfig,
|
|
11
|
+
* getConfig,
|
|
12
|
+
* getValue,
|
|
13
|
+
* setValue,
|
|
14
|
+
* getDefaultConfig,
|
|
15
|
+
* } from './config/index.js';
|
|
16
|
+
*
|
|
17
|
+
* // Load and access configuration
|
|
18
|
+
* const config = loadConfig();
|
|
19
|
+
* const actor = getValue('actor');
|
|
20
|
+
* const mode = getValue('identity.mode');
|
|
21
|
+
*
|
|
22
|
+
* // Modify configuration
|
|
23
|
+
* setValue('actor', 'my-agent');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export { EnvVars, ConfigSource as ConfigSourceEnum, VALID_CONFIG_PATHS, isValidConfigPath } from './types.js';
|
|
27
|
+
// Defaults
|
|
28
|
+
export { DEFAULT_CONFIG, DEFAULT_SYNC_CONFIG, DEFAULT_PLAYBOOK_CONFIG, DEFAULT_TOMBSTONE_CONFIG, DEFAULT_IDENTITY_CONFIG, DEFAULT_PLUGINS_CONFIG, getDefaultConfig, ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, MIN_EXPORT_DEBOUNCE, MAX_EXPORT_DEBOUNCE, MIN_TIME_TOLERANCE, MAX_TIME_TOLERANCE, MAX_TTL, } from './defaults.js';
|
|
29
|
+
// Duration utilities
|
|
30
|
+
export { DURATION_UNITS, isDurationString, parseDuration, parseDurationValue, tryParseDuration, formatDuration, formatDurationHuman, validateDurationRange, } from './duration.js';
|
|
31
|
+
// Validation
|
|
32
|
+
export { isValidActor, validateActor, isValidDatabase, validateDatabase, isValidJsonlFilename, validateJsonlFilename, isValidPlaybookPaths, validatePlaybookPaths, validateConfiguration, validateConfigurationSafe, validatePartialConfiguration, } from './validation.js';
|
|
33
|
+
// Merge utilities
|
|
34
|
+
export { deepMerge, mergeConfiguration, mergeConfigurations, createConfiguration, cloneConfiguration, diffConfigurations, configurationsEqual, } from './merge.js';
|
|
35
|
+
// File operations
|
|
36
|
+
export { CONFIG_FILE_NAME, STONEFORGE_DIR, findStoneforgeDir, getGlobalConfigDir, getGlobalConfigPath, discoverConfigFile, parseYamlConfig, convertYamlToConfig, readConfigFile, convertConfigToYaml, serializeConfigToYaml, writeConfigFile, updateConfigFile, expandPath, expandPlaybookPaths, } from './file.js';
|
|
37
|
+
// Environment variables
|
|
38
|
+
export { parseEnvBoolean, isEnvBoolean, parseEnvDuration, getEnvVar, hasEnvVar, loadEnvConfig, getEnvConfigPath, getEnvJsonMode, getEnvVerboseMode, getEnvVarInfo, getSetEnvVars, } from './env.js';
|
|
39
|
+
// Main configuration API
|
|
40
|
+
export { loadConfig, getConfig, getTrackedConfig, reloadConfig, clearConfigCache, getValue, getValueFromConfig, getValueSource, getValueWithSource, setValue, unsetValue, getConfigPath, configFileExists, saveConfig, } from './config.js';
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAyBH,OAAO,EAAE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9G,WAAW;AACX,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,wBAAwB;AACxB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,yBAAyB;AACzB,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Merging
|
|
3
|
+
*
|
|
4
|
+
* Deep merge utilities for combining configuration from multiple sources
|
|
5
|
+
* with precedence handling.
|
|
6
|
+
*/
|
|
7
|
+
import type { Configuration, PartialConfiguration } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Deep merges two objects, with source values overriding target values
|
|
10
|
+
* Arrays are replaced, not merged
|
|
11
|
+
*
|
|
12
|
+
* @param target - Base object
|
|
13
|
+
* @param source - Override object
|
|
14
|
+
* @returns Merged object
|
|
15
|
+
*/
|
|
16
|
+
export declare function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T;
|
|
17
|
+
/**
|
|
18
|
+
* Merges partial configuration into a complete configuration
|
|
19
|
+
*
|
|
20
|
+
* @param base - Base configuration (typically defaults)
|
|
21
|
+
* @param partial - Partial configuration to merge in
|
|
22
|
+
* @returns Complete merged configuration
|
|
23
|
+
*/
|
|
24
|
+
export declare function mergeConfiguration(base: Configuration, partial: PartialConfiguration): Configuration;
|
|
25
|
+
/**
|
|
26
|
+
* Merges multiple partial configurations in order
|
|
27
|
+
* Later configurations override earlier ones
|
|
28
|
+
*
|
|
29
|
+
* @param base - Base configuration
|
|
30
|
+
* @param partials - Partial configurations to merge, in order
|
|
31
|
+
* @returns Complete merged configuration
|
|
32
|
+
*/
|
|
33
|
+
export declare function mergeConfigurations(base: Configuration, ...partials: PartialConfiguration[]): Configuration;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a configuration by merging defaults with partial config
|
|
36
|
+
*
|
|
37
|
+
* @param partial - Partial configuration
|
|
38
|
+
* @returns Complete configuration with defaults filled in
|
|
39
|
+
*/
|
|
40
|
+
export declare function createConfiguration(partial?: PartialConfiguration): Configuration;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a deep clone of a configuration
|
|
43
|
+
*/
|
|
44
|
+
export declare function cloneConfiguration(config: Configuration): Configuration;
|
|
45
|
+
/**
|
|
46
|
+
* Compares two configurations and returns the differences
|
|
47
|
+
*/
|
|
48
|
+
export declare function diffConfigurations(a: Configuration, b: Configuration): PartialConfiguration;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if two configurations are equal
|
|
51
|
+
*/
|
|
52
|
+
export declare function configurationsEqual(a: Configuration, b: Configuration): boolean;
|
|
53
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/config/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAmBtE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,CAAC,CAyBH;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CA0Bf;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,GAAG,QAAQ,EAAE,oBAAoB,EAAE,GAClC,aAAa,CAMf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAMjF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAyBvE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf,oBAAoB,CAiEtB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAiB/E"}
|