notsleep 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +117 -0
- package/LICENSE +21 -0
- package/README.md +341 -0
- package/dashboard/index.html +893 -0
- package/dist/agent.d.ts +162 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1064 -0
- package/dist/agent.js.map +1 -0
- package/dist/api.d.ts +10 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +39 -0
- package/dist/api.js.map +1 -0
- package/dist/checkpoint.d.ts +52 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +234 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +265 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +15 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +237 -0
- package/dist/context.js.map +1 -0
- package/dist/cost.d.ts +26 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +161 -0
- package/dist/cost.js.map +1 -0
- package/dist/dashboard.d.ts +96 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +292 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/fileconfig.d.ts +129 -0
- package/dist/fileconfig.d.ts.map +1 -0
- package/dist/fileconfig.js +391 -0
- package/dist/fileconfig.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +882 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +9 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +221 -0
- package/dist/init.js.map +1 -0
- package/dist/logger.d.ts +33 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +150 -0
- package/dist/logger.js.map +1 -0
- package/dist/modelsdev.d.ts +63 -0
- package/dist/modelsdev.d.ts.map +1 -0
- package/dist/modelsdev.js +265 -0
- package/dist/modelsdev.js.map +1 -0
- package/dist/parallel.d.ts +54 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +139 -0
- package/dist/parallel.js.map +1 -0
- package/dist/pool.d.ts +17 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +53 -0
- package/dist/pool.js.map +1 -0
- package/dist/provider.d.ts +60 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +396 -0
- package/dist/provider.js.map +1 -0
- package/dist/registry.d.ts +60 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +153 -0
- package/dist/registry.js.map +1 -0
- package/dist/safety.d.ts +21 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +118 -0
- package/dist/safety.js.map +1 -0
- package/dist/schema.d.ts +9 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +166 -0
- package/dist/schema.js.map +1 -0
- package/dist/test-dashboard.d.ts +5 -0
- package/dist/test-dashboard.d.ts.map +1 -0
- package/dist/test-dashboard.js +202 -0
- package/dist/test-dashboard.js.map +1 -0
- package/dist/tools.d.ts +27 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1212 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +180 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/worktree.d.ts +50 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +186 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { CustomToolConfig } from './types';
|
|
2
|
+
export type CustomToolDef = CustomToolConfig;
|
|
3
|
+
/** The shape of a notsleep.json file. All fields optional. */
|
|
4
|
+
export interface FileConfig {
|
|
5
|
+
/** JSON schema hint (ignored at runtime) */
|
|
6
|
+
$schema?: string;
|
|
7
|
+
provider?: 'openai' | 'anthropic';
|
|
8
|
+
/**
|
|
9
|
+
* Unified "provider/model" selector (OpenCode / models.dev style), e.g.
|
|
10
|
+
* "groq/llama-3.3-70b-versatile". Preferred over the provider + openai/
|
|
11
|
+
* anthropic blocks when present. See `providers` for connection details.
|
|
12
|
+
*/
|
|
13
|
+
model?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Named provider registry. Overlays NotSleep's built-in providers: give
|
|
16
|
+
* just an apiKey for a known one ("groq", "openrouter", ...), or a full
|
|
17
|
+
* { type, baseURL, apiKey } to define a brand-new provider.
|
|
18
|
+
*/
|
|
19
|
+
providers?: Record<string, {
|
|
20
|
+
type?: 'openai' | 'anthropic';
|
|
21
|
+
baseURL?: string;
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Cheaper model for the agent's internal calls (summarization, task
|
|
26
|
+
* generation). A "provider/model" ref, or a bare model id that reuses the
|
|
27
|
+
* primary provider's credentials. `small_model` is the OpenCode-compatible
|
|
28
|
+
* key; `smallModel` is accepted as an alias.
|
|
29
|
+
*/
|
|
30
|
+
small_model?: string;
|
|
31
|
+
smallModel?: string;
|
|
32
|
+
openai?: {
|
|
33
|
+
apiKey?: string;
|
|
34
|
+
model?: string;
|
|
35
|
+
baseURL?: string;
|
|
36
|
+
};
|
|
37
|
+
anthropic?: {
|
|
38
|
+
apiKey?: string;
|
|
39
|
+
model?: string;
|
|
40
|
+
baseURL?: string;
|
|
41
|
+
};
|
|
42
|
+
maxIterations?: number;
|
|
43
|
+
/** Max iterations per single task before auto-advancing (0 = no cap). */
|
|
44
|
+
maxIterationsPerTask?: number;
|
|
45
|
+
contextWindowLimit?: number;
|
|
46
|
+
summarizeThreshold?: number;
|
|
47
|
+
maxRetries?: number;
|
|
48
|
+
retryBaseDelayMs?: number;
|
|
49
|
+
toolTimeoutMs?: number;
|
|
50
|
+
checkpointDir?: string;
|
|
51
|
+
logDir?: string;
|
|
52
|
+
systemPrompt?: string;
|
|
53
|
+
/** Path to a file containing the system prompt (relative to config file) */
|
|
54
|
+
systemPromptFile?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Extra instruction files whose contents are appended to the system prompt
|
|
57
|
+
* (OpenCode-style). Paths are relative to the config file. On top of these,
|
|
58
|
+
* NotSleep auto-loads AGENTS.md / NOTSLEEP.md from the project root.
|
|
59
|
+
*/
|
|
60
|
+
instructions?: string[];
|
|
61
|
+
continuous?: boolean;
|
|
62
|
+
stopFile?: string;
|
|
63
|
+
/** Optional USD budget; agent stops when estimated cost exceeds it. */
|
|
64
|
+
maxCostUsd?: number;
|
|
65
|
+
/** Auto-create a local git commit after each completed task (never pushes). */
|
|
66
|
+
autoCommit?: boolean;
|
|
67
|
+
dashboard?: {
|
|
68
|
+
enabled?: boolean;
|
|
69
|
+
port?: number;
|
|
70
|
+
};
|
|
71
|
+
/** User-defined shell-command tools the agent can call. */
|
|
72
|
+
customTools?: CustomToolConfig[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Heuristic: does this string look like an actual API key/secret
|
|
76
|
+
* rather than an env variable name? Used to catch users who paste
|
|
77
|
+
* a key where a variable name was expected.
|
|
78
|
+
*/
|
|
79
|
+
export declare function looksLikeApiKey(value: string): boolean;
|
|
80
|
+
/** A valid POSIX-style environment variable name: letters, digits, underscore. */
|
|
81
|
+
export declare function isValidEnvVarName(name: string): boolean;
|
|
82
|
+
/** Absolute path to the global config file (~/.notsleep/config.json). */
|
|
83
|
+
export declare function getGlobalConfigPath(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Search from `startDir` upward for a project config file.
|
|
86
|
+
* Returns the absolute path, or null if none found.
|
|
87
|
+
*/
|
|
88
|
+
export declare function findProjectConfig(startDir?: string): string | null;
|
|
89
|
+
/**
|
|
90
|
+
* Parse JSONC — JSON with `//` line comments, block comments, and trailing
|
|
91
|
+
* commas — the way OpenCode and most modern agent configs allow. Comment
|
|
92
|
+
* stripping is string-aware, so `//` inside a value like a "https://…" URL is
|
|
93
|
+
* preserved.
|
|
94
|
+
*/
|
|
95
|
+
export declare function parseJsonc(text: string): any;
|
|
96
|
+
export interface LoadedFileConfig {
|
|
97
|
+
config: FileConfig;
|
|
98
|
+
sources: string[];
|
|
99
|
+
warnings: string[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Load and merge global + project config files.
|
|
103
|
+
*
|
|
104
|
+
* env/file references are resolved PER FILE, using that file's own directory
|
|
105
|
+
* as the base for {file:...} paths, BEFORE merging — so a global and a project
|
|
106
|
+
* config can each reference files relative to themselves.
|
|
107
|
+
* Returns an empty config (no error) if no files exist.
|
|
108
|
+
*/
|
|
109
|
+
export declare function loadFileConfig(startDir?: string): LoadedFileConfig;
|
|
110
|
+
/**
|
|
111
|
+
* Collect instruction-file contents to append to the system prompt: the
|
|
112
|
+
* explicit `instructions` list (relative to the config file) plus auto-loaded
|
|
113
|
+
* convention files (AGENTS.md / NOTSLEEP.md) in the project directory.
|
|
114
|
+
* Returns the combined text and the list of labels actually loaded.
|
|
115
|
+
*/
|
|
116
|
+
export declare function gatherInstructions(file: FileConfig, projectDir: string): {
|
|
117
|
+
text: string;
|
|
118
|
+
files: string[];
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Write a config object to disk as pretty JSON, creating dirs as needed.
|
|
122
|
+
*
|
|
123
|
+
* Also drops a local JSON Schema (notsleep.schema.json) beside the config and
|
|
124
|
+
* points "$schema" at it — fully offline, no hosted URL — so editors give
|
|
125
|
+
* autocomplete/validation out of the box. A caller-provided "$schema" is kept
|
|
126
|
+
* as-is.
|
|
127
|
+
*/
|
|
128
|
+
export declare function writeConfigFile(filePath: string, config: FileConfig): void;
|
|
129
|
+
//# sourceMappingURL=fileconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileconfig.d.ts","sourceRoot":"","sources":["../src/fileconfig.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI3C,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAClC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,2DAA2D;IAC3D,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUtD;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAiBjF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CA0C5C;AAmID,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,GAAE,MAAsB,GAAG,gBAAgB,CA6BjF;AASD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CA4BnC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkB1E"}
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================
|
|
3
|
+
// NotSleep - File-based Configuration
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Supports a JSON config file like other AI agents (OpenCode,
|
|
7
|
+
// Claude Code, etc). Two locations, merged in this order:
|
|
8
|
+
//
|
|
9
|
+
// 1. Global: ~/.notsleep/config.json (user defaults)
|
|
10
|
+
// 2. Project: ./notsleep.json OR ./.notsleep/config.json
|
|
11
|
+
//
|
|
12
|
+
// Project config overrides global config. Secrets can be kept
|
|
13
|
+
// out of the file with env references: "{env:OPENAI_API_KEY}".
|
|
14
|
+
// ============================================================
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.looksLikeApiKey = looksLikeApiKey;
|
|
50
|
+
exports.isValidEnvVarName = isValidEnvVarName;
|
|
51
|
+
exports.getGlobalConfigPath = getGlobalConfigPath;
|
|
52
|
+
exports.findProjectConfig = findProjectConfig;
|
|
53
|
+
exports.parseJsonc = parseJsonc;
|
|
54
|
+
exports.loadFileConfig = loadFileConfig;
|
|
55
|
+
exports.gatherInstructions = gatherInstructions;
|
|
56
|
+
exports.writeConfigFile = writeConfigFile;
|
|
57
|
+
const fs = __importStar(require("fs"));
|
|
58
|
+
const path = __importStar(require("path"));
|
|
59
|
+
const os = __importStar(require("os"));
|
|
60
|
+
const schema_1 = require("./schema");
|
|
61
|
+
const PROJECT_FILENAMES = ['notsleep.json', '.notsleep/config.json'];
|
|
62
|
+
// ── Validation helpers (shared by init wizard + loader) ──
|
|
63
|
+
/**
|
|
64
|
+
* Heuristic: does this string look like an actual API key/secret
|
|
65
|
+
* rather than an env variable name? Used to catch users who paste
|
|
66
|
+
* a key where a variable name was expected.
|
|
67
|
+
*/
|
|
68
|
+
function looksLikeApiKey(value) {
|
|
69
|
+
if (!value)
|
|
70
|
+
return false;
|
|
71
|
+
const v = value.trim();
|
|
72
|
+
// Common key prefixes (OpenAI, Anthropic, proxies, etc.)
|
|
73
|
+
if (/^(sk|pk|rk|api|key|tok|ghp|xai|gsk)[-_]/i.test(v))
|
|
74
|
+
return true;
|
|
75
|
+
// Contains a hyphen (invalid in env names) AND is long-ish → probably a key
|
|
76
|
+
if (v.includes('-') && v.length >= 16)
|
|
77
|
+
return true;
|
|
78
|
+
// Very long opaque token
|
|
79
|
+
if (v.length >= 32 && /[0-9]/.test(v) && /[a-z]/i.test(v))
|
|
80
|
+
return true;
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/** A valid POSIX-style environment variable name: letters, digits, underscore. */
|
|
84
|
+
function isValidEnvVarName(name) {
|
|
85
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
|
|
86
|
+
}
|
|
87
|
+
/** Absolute path to the global config file (~/.notsleep/config.json). */
|
|
88
|
+
function getGlobalConfigPath() {
|
|
89
|
+
return path.join(os.homedir(), '.notsleep', 'config.json');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Search from `startDir` upward for a project config file.
|
|
93
|
+
* Returns the absolute path, or null if none found.
|
|
94
|
+
*/
|
|
95
|
+
function findProjectConfig(startDir = process.cwd()) {
|
|
96
|
+
let dir = path.resolve(startDir);
|
|
97
|
+
const { root } = path.parse(dir);
|
|
98
|
+
while (true) {
|
|
99
|
+
for (const name of PROJECT_FILENAMES) {
|
|
100
|
+
const candidate = path.join(dir, name);
|
|
101
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
|
|
102
|
+
return candidate;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (dir === root)
|
|
106
|
+
break;
|
|
107
|
+
const parent = path.dirname(dir);
|
|
108
|
+
if (parent === dir)
|
|
109
|
+
break;
|
|
110
|
+
dir = parent;
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Parse JSONC — JSON with `//` line comments, block comments, and trailing
|
|
116
|
+
* commas — the way OpenCode and most modern agent configs allow. Comment
|
|
117
|
+
* stripping is string-aware, so `//` inside a value like a "https://…" URL is
|
|
118
|
+
* preserved.
|
|
119
|
+
*/
|
|
120
|
+
function parseJsonc(text) {
|
|
121
|
+
let out = '';
|
|
122
|
+
let inStr = false;
|
|
123
|
+
let esc = false;
|
|
124
|
+
for (let i = 0; i < text.length; i++) {
|
|
125
|
+
const c = text[i];
|
|
126
|
+
const n = text[i + 1];
|
|
127
|
+
if (inStr) {
|
|
128
|
+
out += c;
|
|
129
|
+
if (esc)
|
|
130
|
+
esc = false;
|
|
131
|
+
else if (c === '\\')
|
|
132
|
+
esc = true;
|
|
133
|
+
else if (c === '"')
|
|
134
|
+
inStr = false;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (c === '"') {
|
|
138
|
+
inStr = true;
|
|
139
|
+
out += c;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (c === '/' && n === '/') {
|
|
143
|
+
// Line comment: skip to end of line, keeping the newline for line counts.
|
|
144
|
+
i += 2;
|
|
145
|
+
while (i < text.length && text[i] !== '\n')
|
|
146
|
+
i++;
|
|
147
|
+
out += '\n';
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (c === '/' && n === '*') {
|
|
151
|
+
// Block comment: skip to the closing */.
|
|
152
|
+
i += 2;
|
|
153
|
+
while (i < text.length && !(text[i] === '*' && text[i + 1] === '/'))
|
|
154
|
+
i++;
|
|
155
|
+
i += 1; // land on '/', the for-loop's i++ steps past it
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
out += c;
|
|
159
|
+
}
|
|
160
|
+
// Remove trailing commas before } or ] (string-aware second pass).
|
|
161
|
+
out = stripTrailingCommas(out);
|
|
162
|
+
return JSON.parse(out);
|
|
163
|
+
}
|
|
164
|
+
/** Drop commas that directly precede a } or ] (ignoring whitespace), outside strings. */
|
|
165
|
+
function stripTrailingCommas(text) {
|
|
166
|
+
let out = '';
|
|
167
|
+
let inStr = false;
|
|
168
|
+
let esc = false;
|
|
169
|
+
for (let i = 0; i < text.length; i++) {
|
|
170
|
+
const c = text[i];
|
|
171
|
+
if (inStr) {
|
|
172
|
+
out += c;
|
|
173
|
+
if (esc)
|
|
174
|
+
esc = false;
|
|
175
|
+
else if (c === '\\')
|
|
176
|
+
esc = true;
|
|
177
|
+
else if (c === '"')
|
|
178
|
+
inStr = false;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (c === '"') {
|
|
182
|
+
inStr = true;
|
|
183
|
+
out += c;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (c === ',') {
|
|
187
|
+
let j = i + 1;
|
|
188
|
+
while (j < text.length && /\s/.test(text[j]))
|
|
189
|
+
j++;
|
|
190
|
+
if (text[j] === '}' || text[j] === ']')
|
|
191
|
+
continue; // drop this comma
|
|
192
|
+
}
|
|
193
|
+
out += c;
|
|
194
|
+
}
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
197
|
+
/** Read + parse a single JSONC config file. Throws on invalid JSON. */
|
|
198
|
+
function readConfigFile(filePath) {
|
|
199
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
200
|
+
try {
|
|
201
|
+
return parseJsonc(raw);
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
throw new Error(`Invalid JSON in config file "${filePath}": ${err.message}`, { cause: err });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Resolve "{env:VAR_NAME}" references in a string value.
|
|
209
|
+
* - Valid ref, env set → replaced with the value.
|
|
210
|
+
* - Valid ref, env missing → replaced with "", warning pushed.
|
|
211
|
+
* - Malformed ref (e.g. a key was pasted inside) → warning pushed,
|
|
212
|
+
* the reference is left as-is so `notsleep config` surfaces it.
|
|
213
|
+
*/
|
|
214
|
+
function resolveEnvRefs(value, fieldPath, baseDir, warnings) {
|
|
215
|
+
// Match {env:...anything-until-brace...} so we can catch malformed inner text.
|
|
216
|
+
let out = value.replace(/\{env:([^}]*)\}/g, (whole, inner) => {
|
|
217
|
+
const name = inner.trim();
|
|
218
|
+
if (!isValidEnvVarName(name)) {
|
|
219
|
+
if (looksLikeApiKey(name)) {
|
|
220
|
+
warnings.push(`${fieldPath}: looks like you pasted an API key inside {env:...}. ` +
|
|
221
|
+
`The {env:NAME} syntax expects an environment variable NAME, not the key itself. ` +
|
|
222
|
+
`Either write the key directly ("apiKey": "your-key") or set an env var and reference it ("apiKey": "{env:MY_KEY}").`);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
warnings.push(`${fieldPath}: "{env:${name}}" is not a valid environment variable name ` +
|
|
226
|
+
`(only letters, digits, and underscores are allowed).`);
|
|
227
|
+
}
|
|
228
|
+
return whole; // leave untouched so the problem is visible
|
|
229
|
+
}
|
|
230
|
+
const resolved = process.env[name];
|
|
231
|
+
if (resolved === undefined || resolved === '') {
|
|
232
|
+
warnings.push(`${fieldPath}: environment variable "${name}" referenced by {env:${name}} is not set.`);
|
|
233
|
+
return '';
|
|
234
|
+
}
|
|
235
|
+
return resolved;
|
|
236
|
+
});
|
|
237
|
+
// Resolve {file:./path} references to the file's (trimmed) contents, relative
|
|
238
|
+
// to the config file's directory. Missing files warn and resolve to "".
|
|
239
|
+
out = out.replace(/\{file:([^}]*)\}/g, (whole, inner) => {
|
|
240
|
+
const ref = inner.trim();
|
|
241
|
+
if (!ref) {
|
|
242
|
+
warnings.push(`${fieldPath}: empty {file:} reference.`);
|
|
243
|
+
return whole;
|
|
244
|
+
}
|
|
245
|
+
const resolvedPath = path.isAbsolute(ref) ? ref : path.resolve(baseDir, ref);
|
|
246
|
+
try {
|
|
247
|
+
return fs.readFileSync(resolvedPath, 'utf-8').trim();
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
warnings.push(`${fieldPath}: file "${ref}" referenced by {file:${ref}} was not found (looked in ${resolvedPath}).`);
|
|
251
|
+
return '';
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
return out;
|
|
255
|
+
}
|
|
256
|
+
/** Recursively resolve env + file refs in all string fields, collecting warnings. */
|
|
257
|
+
function resolveEnvRefsDeep(obj, baseDir, warnings, fieldPath = '') {
|
|
258
|
+
if (typeof obj === 'string') {
|
|
259
|
+
return resolveEnvRefs(obj, fieldPath || 'value', baseDir, warnings);
|
|
260
|
+
}
|
|
261
|
+
if (Array.isArray(obj)) {
|
|
262
|
+
return obj.map((v, i) => resolveEnvRefsDeep(v, baseDir, warnings, `${fieldPath}[${i}]`));
|
|
263
|
+
}
|
|
264
|
+
if (obj && typeof obj === 'object') {
|
|
265
|
+
const out = {};
|
|
266
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
267
|
+
const childPath = fieldPath ? `${fieldPath}.${k}` : k;
|
|
268
|
+
out[k] = resolveEnvRefsDeep(v, baseDir, warnings, childPath);
|
|
269
|
+
}
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
return obj;
|
|
273
|
+
}
|
|
274
|
+
/** Deep-merge `override` onto `base` (override wins, objects merged recursively). */
|
|
275
|
+
function deepMerge(base, override) {
|
|
276
|
+
const out = { ...base };
|
|
277
|
+
for (const [k, v] of Object.entries(override)) {
|
|
278
|
+
if (v === undefined)
|
|
279
|
+
continue;
|
|
280
|
+
if (v && typeof v === 'object' && !Array.isArray(v) &&
|
|
281
|
+
base[k] && typeof base[k] === 'object' && !Array.isArray(base[k])) {
|
|
282
|
+
out[k] = deepMerge(base[k], v);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
out[k] = v;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return out;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Load and merge global + project config files.
|
|
292
|
+
*
|
|
293
|
+
* env/file references are resolved PER FILE, using that file's own directory
|
|
294
|
+
* as the base for {file:...} paths, BEFORE merging — so a global and a project
|
|
295
|
+
* config can each reference files relative to themselves.
|
|
296
|
+
* Returns an empty config (no error) if no files exist.
|
|
297
|
+
*/
|
|
298
|
+
function loadFileConfig(startDir = process.cwd()) {
|
|
299
|
+
const sources = [];
|
|
300
|
+
const warnings = [];
|
|
301
|
+
let merged = {};
|
|
302
|
+
const globalPath = getGlobalConfigPath();
|
|
303
|
+
if (fs.existsSync(globalPath)) {
|
|
304
|
+
const globalCfg = resolveEnvRefsDeep(readConfigFile(globalPath), path.dirname(globalPath), warnings);
|
|
305
|
+
merged = deepMerge(merged, globalCfg);
|
|
306
|
+
sources.push(globalPath);
|
|
307
|
+
}
|
|
308
|
+
const projectPath = findProjectConfig(startDir);
|
|
309
|
+
if (projectPath) {
|
|
310
|
+
const projectDir = path.dirname(projectPath);
|
|
311
|
+
const projectCfg = readConfigFile(projectPath);
|
|
312
|
+
// Resolve systemPromptFile relative to the project config's directory
|
|
313
|
+
// (a convenience alias for "systemPrompt": "{file:...}").
|
|
314
|
+
if (projectCfg.systemPromptFile && !projectCfg.systemPrompt) {
|
|
315
|
+
const promptPath = path.resolve(projectDir, projectCfg.systemPromptFile);
|
|
316
|
+
if (fs.existsSync(promptPath)) {
|
|
317
|
+
projectCfg.systemPrompt = fs.readFileSync(promptPath, 'utf-8').trim();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
merged = deepMerge(merged, resolveEnvRefsDeep(projectCfg, projectDir, warnings));
|
|
321
|
+
sources.push(projectPath);
|
|
322
|
+
}
|
|
323
|
+
return { config: merged, sources, warnings };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Convention instruction files auto-loaded from the project root, in addition
|
|
327
|
+
* to any explicit `instructions` in config. AGENTS.md is the emerging
|
|
328
|
+
* cross-agent standard; NOTSLEEP.md is our own.
|
|
329
|
+
*/
|
|
330
|
+
const INSTRUCTION_FILENAMES = ['AGENTS.md', 'NOTSLEEP.md', '.notsleep/AGENTS.md'];
|
|
331
|
+
/**
|
|
332
|
+
* Collect instruction-file contents to append to the system prompt: the
|
|
333
|
+
* explicit `instructions` list (relative to the config file) plus auto-loaded
|
|
334
|
+
* convention files (AGENTS.md / NOTSLEEP.md) in the project directory.
|
|
335
|
+
* Returns the combined text and the list of labels actually loaded.
|
|
336
|
+
*/
|
|
337
|
+
function gatherInstructions(file, projectDir) {
|
|
338
|
+
const parts = [];
|
|
339
|
+
const loaded = [];
|
|
340
|
+
const seen = new Set();
|
|
341
|
+
const addFile = (absPath, label) => {
|
|
342
|
+
const abs = path.resolve(absPath);
|
|
343
|
+
if (seen.has(abs))
|
|
344
|
+
return;
|
|
345
|
+
seen.add(abs);
|
|
346
|
+
try {
|
|
347
|
+
const content = fs.readFileSync(abs, 'utf-8').trim();
|
|
348
|
+
if (content) {
|
|
349
|
+
parts.push(`# ${label}\n\n${content}`);
|
|
350
|
+
loaded.push(label);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
/* missing instruction file is fine — skip it */
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
for (const rel of file.instructions ?? []) {
|
|
358
|
+
addFile(path.isAbsolute(rel) ? rel : path.resolve(projectDir, rel), rel);
|
|
359
|
+
}
|
|
360
|
+
for (const name of INSTRUCTION_FILENAMES) {
|
|
361
|
+
addFile(path.resolve(projectDir, name), name);
|
|
362
|
+
}
|
|
363
|
+
return { text: parts.join('\n\n'), files: loaded };
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Write a config object to disk as pretty JSON, creating dirs as needed.
|
|
367
|
+
*
|
|
368
|
+
* Also drops a local JSON Schema (notsleep.schema.json) beside the config and
|
|
369
|
+
* points "$schema" at it — fully offline, no hosted URL — so editors give
|
|
370
|
+
* autocomplete/validation out of the box. A caller-provided "$schema" is kept
|
|
371
|
+
* as-is.
|
|
372
|
+
*/
|
|
373
|
+
function writeConfigFile(filePath, config) {
|
|
374
|
+
const dir = path.dirname(filePath);
|
|
375
|
+
if (!fs.existsSync(dir)) {
|
|
376
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
377
|
+
}
|
|
378
|
+
let schemaRef = config.$schema;
|
|
379
|
+
if (!schemaRef) {
|
|
380
|
+
try {
|
|
381
|
+
(0, schema_1.writeSchemaFile)(path.join(dir, schema_1.DEFAULT_SCHEMA_FILENAME));
|
|
382
|
+
schemaRef = `./${schema_1.DEFAULT_SCHEMA_FILENAME}`;
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
/* schema is a nicety; never block config writing on it */
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
const out = schemaRef ? { $schema: schemaRef, ...config } : { ...config };
|
|
389
|
+
fs.writeFileSync(filePath, JSON.stringify(out, null, 2) + '\n', 'utf-8');
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=fileconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileconfig.js","sourceRoot":"","sources":["../src/fileconfig.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|