omniagent 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/cli.js +201 -1
- package/package.json +1 -1
- package/CLAUDE.md +0 -68
- package/CONTRIBUTING.md +0 -56
- package/biome.json +0 -41
- package/tasks.md +0 -25
- package/tsconfig.json +0 -13
- package/vite.config.ts +0 -22
- package/vitest.config.ts +0 -10
package/README.md
CHANGED
|
@@ -147,7 +147,9 @@ glob-based `enable`/`disable` lists, per-target toggles, and template
|
|
|
147
147
|
variables. Individual skills, subagents, and commands can also set frontmatter
|
|
148
148
|
`enabled: false` to stay hidden by default until a profile opts them in.
|
|
149
149
|
Discover and validate profiles with `omniagent profiles`,
|
|
150
|
-
`omniagent profiles
|
|
150
|
+
`omniagent profiles init <name>`, `omniagent profiles show <name>`, and
|
|
151
|
+
`omniagent profiles validate`. Use `omniagent profiles init <name>.local`
|
|
152
|
+
to create a personal local profile override.
|
|
151
153
|
|
|
152
154
|
See [`docs/profiles.md`](docs/profiles.md) for the full schema, resolution
|
|
153
155
|
order, and examples.
|
package/dist/cli.js
CHANGED
|
@@ -2898,6 +2898,26 @@ function resolveTargets(options) {
|
|
|
2898
2898
|
disabledTargets
|
|
2899
2899
|
};
|
|
2900
2900
|
}
|
|
2901
|
+
const PROFILE_SCHEMA_URL = "https://raw.githubusercontent.com/JoeRoddy/omniagent/master/schemas/profile.v1.json";
|
|
2902
|
+
const ANSI_GRAY = "\x1B[90m";
|
|
2903
|
+
const ANSI_RESET_FOREGROUND = "\x1B[39m";
|
|
2904
|
+
const PROFILE_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
2905
|
+
const STARTER_PROFILE = {
|
|
2906
|
+
$schema: PROFILE_SCHEMA_URL,
|
|
2907
|
+
description: "",
|
|
2908
|
+
targets: {},
|
|
2909
|
+
enable: {
|
|
2910
|
+
skills: [],
|
|
2911
|
+
subagents: [],
|
|
2912
|
+
commands: []
|
|
2913
|
+
},
|
|
2914
|
+
disable: {
|
|
2915
|
+
skills: [],
|
|
2916
|
+
subagents: [],
|
|
2917
|
+
commands: []
|
|
2918
|
+
},
|
|
2919
|
+
variables: {}
|
|
2920
|
+
};
|
|
2901
2921
|
async function resolveRepoAndAgentsDir(argv) {
|
|
2902
2922
|
const startDir = process.cwd();
|
|
2903
2923
|
const repoRoot = await findRepoRoot(startDir);
|
|
@@ -2931,6 +2951,122 @@ function formatAnnotations(entry2) {
|
|
|
2931
2951
|
}
|
|
2932
2952
|
return annotations;
|
|
2933
2953
|
}
|
|
2954
|
+
function validateProfileNamePart(name) {
|
|
2955
|
+
if (!PROFILE_NAME_PATTERN.test(name)) {
|
|
2956
|
+
return "Profile names may only contain letters, numbers, dots, underscores, and hyphens, and must start with a letter or number.";
|
|
2957
|
+
}
|
|
2958
|
+
return null;
|
|
2959
|
+
}
|
|
2960
|
+
function parseInitProfileTarget(name) {
|
|
2961
|
+
if (name.endsWith(".local")) {
|
|
2962
|
+
const profileName = name.slice(0, -".local".length);
|
|
2963
|
+
const issue2 = validateProfileNamePart(profileName);
|
|
2964
|
+
if (issue2) {
|
|
2965
|
+
return { error: issue2 };
|
|
2966
|
+
}
|
|
2967
|
+
if (profileName.endsWith(".local")) {
|
|
2968
|
+
return { error: 'Profile names cannot end with ".local.local".' };
|
|
2969
|
+
}
|
|
2970
|
+
return {
|
|
2971
|
+
profileName,
|
|
2972
|
+
isLocal: true
|
|
2973
|
+
};
|
|
2974
|
+
}
|
|
2975
|
+
const issue = validateProfileNamePart(name);
|
|
2976
|
+
if (issue) {
|
|
2977
|
+
return { error: issue };
|
|
2978
|
+
}
|
|
2979
|
+
return {
|
|
2980
|
+
profileName: name,
|
|
2981
|
+
isLocal: false
|
|
2982
|
+
};
|
|
2983
|
+
}
|
|
2984
|
+
function colorsEnabled() {
|
|
2985
|
+
if (process.env.NO_COLOR !== void 0) {
|
|
2986
|
+
return false;
|
|
2987
|
+
}
|
|
2988
|
+
const forced = process.env.FORCE_COLOR;
|
|
2989
|
+
if (forced !== void 0) {
|
|
2990
|
+
return forced !== "0" && forced.toLowerCase() !== "false";
|
|
2991
|
+
}
|
|
2992
|
+
return Boolean(process.stdout.isTTY);
|
|
2993
|
+
}
|
|
2994
|
+
function findLineCommentStart(line) {
|
|
2995
|
+
let inString = false;
|
|
2996
|
+
let escaped = false;
|
|
2997
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
2998
|
+
const char = line[index];
|
|
2999
|
+
if (escaped) {
|
|
3000
|
+
escaped = false;
|
|
3001
|
+
continue;
|
|
3002
|
+
}
|
|
3003
|
+
if (char === "\\" && inString) {
|
|
3004
|
+
escaped = true;
|
|
3005
|
+
continue;
|
|
3006
|
+
}
|
|
3007
|
+
if (char === '"') {
|
|
3008
|
+
inString = !inString;
|
|
3009
|
+
continue;
|
|
3010
|
+
}
|
|
3011
|
+
if (!inString && char === "/" && line[index + 1] === "/") {
|
|
3012
|
+
return index;
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
return null;
|
|
3016
|
+
}
|
|
3017
|
+
function colorizeGuideComments(text) {
|
|
3018
|
+
if (!colorsEnabled()) {
|
|
3019
|
+
return text;
|
|
3020
|
+
}
|
|
3021
|
+
return text.split("\n").map((line) => {
|
|
3022
|
+
const commentStart = findLineCommentStart(line);
|
|
3023
|
+
if (commentStart === null) {
|
|
3024
|
+
return line;
|
|
3025
|
+
}
|
|
3026
|
+
return `${line.slice(0, commentStart)}${ANSI_GRAY}${line.slice(commentStart)}${ANSI_RESET_FOREGROUND}`;
|
|
3027
|
+
}).join("\n");
|
|
3028
|
+
}
|
|
3029
|
+
function initGuide(target, displayPath) {
|
|
3030
|
+
const label = target.isLocal ? `Created local profile "${target.profileName}" at ${displayPath}.` : `Created profile "${target.profileName}" at ${displayPath}.`;
|
|
3031
|
+
const localHint = target.isLocal ? `
|
|
3032
|
+
Use profile name "${target.profileName}" when syncing; ".local" is only the file suffix.
|
|
3033
|
+
` : "";
|
|
3034
|
+
return colorizeGuideComments(`${label}${localHint}
|
|
3035
|
+
|
|
3036
|
+
Profile files must be valid JSON. This commented version is just a guide:
|
|
3037
|
+
|
|
3038
|
+
{
|
|
3039
|
+
"$schema": "${PROFILE_SCHEMA_URL}",
|
|
3040
|
+
|
|
3041
|
+
"description": "shown in \`omniagent profiles\`",
|
|
3042
|
+
|
|
3043
|
+
"targets": {
|
|
3044
|
+
"claude": { "enabled": true }, // includes Claude; overrides an earlier profile setting it false
|
|
3045
|
+
"gemini": { "enabled": false } // skips Gemini for this profile
|
|
3046
|
+
},
|
|
3047
|
+
|
|
3048
|
+
"enable": { // names/globs to include; also opts in items marked enabled:false
|
|
3049
|
+
"skills": ["code-review"],
|
|
3050
|
+
"subagents": ["reviewer"],
|
|
3051
|
+
"commands": []
|
|
3052
|
+
},
|
|
3053
|
+
|
|
3054
|
+
"disable": { // names/globs to exclude after enable rules
|
|
3055
|
+
"skills": [],
|
|
3056
|
+
"subagents": [],
|
|
3057
|
+
"commands": ["*-legacy"]
|
|
3058
|
+
},
|
|
3059
|
+
|
|
3060
|
+
// https://github.com/JoeRoddy/omniagent/blob/master/docs/templating.md
|
|
3061
|
+
"variables": {
|
|
3062
|
+
"REVIEW_STYLE": "thorough" // replaces {{REVIEW_STYLE}} in synced files
|
|
3063
|
+
}
|
|
3064
|
+
}
|
|
3065
|
+
|
|
3066
|
+
Try it:
|
|
3067
|
+
omniagent profiles show ${target.profileName}
|
|
3068
|
+
omniagent sync --profile ${target.profileName}`);
|
|
3069
|
+
}
|
|
2934
3070
|
async function loadProfileValidationCatalog(repoRoot, agentsDir) {
|
|
2935
3071
|
const { config } = await loadTargetConfig({ repoRoot, agentsDir });
|
|
2936
3072
|
const validation = validateTargetConfig({ config, builtIns: BUILTIN_TARGETS });
|
|
@@ -3016,6 +3152,70 @@ function collectProfileReferenceIssues(profileName, resolvedProfile, catalog) {
|
|
|
3016
3152
|
}
|
|
3017
3153
|
return issues;
|
|
3018
3154
|
}
|
|
3155
|
+
const initSubcommand = {
|
|
3156
|
+
command: "init <name>",
|
|
3157
|
+
describe: "Create a new sync profile",
|
|
3158
|
+
builder: (yargs2) => yargs2.positional("name", {
|
|
3159
|
+
type: "string",
|
|
3160
|
+
demandOption: true,
|
|
3161
|
+
describe: "Profile name"
|
|
3162
|
+
}).option("agentsDir", {
|
|
3163
|
+
type: "string",
|
|
3164
|
+
describe: "Override the agents directory",
|
|
3165
|
+
defaultDescription: DEFAULT_AGENTS_DIR
|
|
3166
|
+
}),
|
|
3167
|
+
handler: async (argv) => {
|
|
3168
|
+
const typed = argv;
|
|
3169
|
+
const initTarget = parseInitProfileTarget(typed.name);
|
|
3170
|
+
if ("error" in initTarget) {
|
|
3171
|
+
console.error(`Error: ${initTarget.error}`);
|
|
3172
|
+
process.exit(1);
|
|
3173
|
+
return;
|
|
3174
|
+
}
|
|
3175
|
+
const resolved = await resolveRepoAndAgentsDir(typed);
|
|
3176
|
+
if (!resolved) return;
|
|
3177
|
+
if (initTarget.isLocal) {
|
|
3178
|
+
const existingDedicatedPath = profileLocalDedicatedPath(
|
|
3179
|
+
resolved.repoRoot,
|
|
3180
|
+
initTarget.profileName,
|
|
3181
|
+
resolved.agentsDir
|
|
3182
|
+
);
|
|
3183
|
+
const inspected = await inspectProfileFiles(
|
|
3184
|
+
resolved.repoRoot,
|
|
3185
|
+
initTarget.profileName,
|
|
3186
|
+
resolved.agentsDir
|
|
3187
|
+
);
|
|
3188
|
+
if (inspected.localDedicated.exists) {
|
|
3189
|
+
const displayPath2 = path.relative(resolved.repoRoot, existingDedicatedPath).split(path.sep).join("/");
|
|
3190
|
+
console.error(
|
|
3191
|
+
`Error: Local profile "${initTarget.profileName}" already exists at ${displayPath2}.`
|
|
3192
|
+
);
|
|
3193
|
+
process.exit(1);
|
|
3194
|
+
return;
|
|
3195
|
+
}
|
|
3196
|
+
}
|
|
3197
|
+
const targetPath = initTarget.isLocal ? profileLocalSiblingPath(resolved.repoRoot, initTarget.profileName, resolved.agentsDir) : profileSharedPath(resolved.repoRoot, initTarget.profileName, resolved.agentsDir);
|
|
3198
|
+
const displayPath = path.relative(resolved.repoRoot, targetPath).split(path.sep).join("/");
|
|
3199
|
+
const starterContents = `${JSON.stringify(STARTER_PROFILE, null, 2)}
|
|
3200
|
+
`;
|
|
3201
|
+
try {
|
|
3202
|
+
await mkdir(path.dirname(targetPath), { recursive: true });
|
|
3203
|
+
await writeFile(targetPath, starterContents, { encoding: "utf8", flag: "wx" });
|
|
3204
|
+
} catch (error) {
|
|
3205
|
+
const code = error.code;
|
|
3206
|
+
if (code === "EEXIST") {
|
|
3207
|
+
const label = initTarget.isLocal ? "Local profile" : "Profile";
|
|
3208
|
+
console.error(
|
|
3209
|
+
`Error: ${label} "${initTarget.profileName}" already exists at ${displayPath}.`
|
|
3210
|
+
);
|
|
3211
|
+
process.exit(1);
|
|
3212
|
+
return;
|
|
3213
|
+
}
|
|
3214
|
+
throw error;
|
|
3215
|
+
}
|
|
3216
|
+
console.log(initGuide(initTarget, displayPath));
|
|
3217
|
+
}
|
|
3218
|
+
};
|
|
3019
3219
|
const listSubcommand = {
|
|
3020
3220
|
command: "$0",
|
|
3021
3221
|
describe: "List available sync profiles",
|
|
@@ -3191,7 +3391,7 @@ const validateSubcommand = {
|
|
|
3191
3391
|
const profilesCommand = {
|
|
3192
3392
|
command: "profiles",
|
|
3193
3393
|
describe: "Inspect and validate sync profiles",
|
|
3194
|
-
builder: (yargs2) => yargs2.command(listSubcommand).command(showSubcommand).command(validateSubcommand).demandCommand(0).strictCommands(),
|
|
3394
|
+
builder: (yargs2) => yargs2.command(listSubcommand).command(initSubcommand).command(showSubcommand).command(validateSubcommand).demandCommand(0).strictCommands(),
|
|
3195
3395
|
handler: () => {
|
|
3196
3396
|
}
|
|
3197
3397
|
};
|
package/package.json
CHANGED
package/CLAUDE.md
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# omniagent Development Guidelines
|
|
2
|
-
|
|
3
|
-
Auto-generated from all feature plans. Last updated: 2026-01-10
|
|
4
|
-
|
|
5
|
-
## Active Technologies
|
|
6
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js fs/promises + path (004-sync-agent-config)
|
|
7
|
-
- Filesystem (repo-local directories) (004-sync-agent-config)
|
|
8
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js fs/promises + path, Vitest, Vite, Biome (005-sync-slash-commands)
|
|
9
|
-
- Filesystem (repo `agents/commands/`, project target dirs, user home dirs) (005-sync-slash-commands)
|
|
10
|
-
- Filesystem (repo-local config + target directories) (006-add-custom-subagents)
|
|
11
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises`, `path`, Vitest, Vite, Biome (007-agent-templating)
|
|
12
|
-
- Filesystem (repo-local config + target directories + user home config) (007-agent-templating)
|
|
13
|
-
- Filesystem (repo-local agents/ directories and user home state under `~/.omniagent/state/`) (009-local-config-sync)
|
|
14
|
-
- Filesystem (repo-local sources/outputs + user home state under `~/.omniagent/state/`) (010-instruction-file-sync)
|
|
15
|
-
- Filesystem (repo-local `agents/` directory or user-supplied agents directory) (012-agents-dir-override)
|
|
16
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, @typescript/native-preview (tsgo), Vitest, Vite, Biome (013-fix-typecheck-ci)
|
|
17
|
-
- Filesystem (repo-local config and user home state) (013-fix-typecheck-ci)
|
|
18
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vite, Vitest, Biome (014-add-custom-targets)
|
|
19
|
-
- Filesystem (repo-local directories and user home state under `~/.omniagent/state/`) (014-add-custom-targets)
|
|
20
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, `jiti`, Vite, Vitest, Biome, @typescript/native-preview (tsgo) (015-cli-shim-flags)
|
|
21
|
-
- Filesystem (repo-local agents directory and user home state under `~/.omniagent/state/`) (015-cli-shim-flags)
|
|
22
|
-
- TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vitest, Vite, Biome (016-sync-default-agents)
|
|
23
|
-
- Filesystem (repo-local outputs and user home state under `~/.omniagent/state/`) (016-sync-default-agents)
|
|
24
|
-
|
|
25
|
-
- TypeScript 5.x, ES2022 target + yargs (CLI parsing), Vitest (testing), Vite (build), Biome (formatting/linting) (003-biome-integration)
|
|
26
|
-
|
|
27
|
-
- TypeScript 5.x, ES2022 target + yargs (CLI parsing), Vitest (testing) (002-vitest-cli-testing)
|
|
28
|
-
|
|
29
|
-
- TypeScript 5.x, Node.js 18+ + yargs (CLI parsing only) (001-cli-foundation)
|
|
30
|
-
|
|
31
|
-
## Project Structure
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
src/
|
|
35
|
-
tests/
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Commands
|
|
39
|
-
|
|
40
|
-
npm run check && npm test
|
|
41
|
-
|
|
42
|
-
## Code Style
|
|
43
|
-
|
|
44
|
-
TypeScript 5.x, Node.js 18+: Enforced by Biome (formatting and linting)
|
|
45
|
-
- Line width: 100 characters
|
|
46
|
-
- Indentation: Tabs (2-space width)
|
|
47
|
-
- Quotes: Double quotes
|
|
48
|
-
- Semicolons: Always
|
|
49
|
-
- Run `npm run format` before committing
|
|
50
|
-
|
|
51
|
-
## Recent Changes
|
|
52
|
-
- 016-sync-default-agents: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vitest, Vite, Biome
|
|
53
|
-
- 015-cli-shim-flags: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, `jiti`, Vite, Vitest, Biome, @typescript/native-preview (tsgo)
|
|
54
|
-
- 014-add-custom-targets: Added TypeScript 5.9 (ES2022) on Node.js 18+ + yargs, Node.js `fs/promises` + `path`, Vite, Vitest, Biome
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
<!-- MANUAL ADDITIONS START -->
|
|
60
|
-
- Dynamic template scripts (`<nodejs>` and `<shell>`) are a shared sync runtime feature and apply across all
|
|
61
|
-
syncable template surfaces (skills, subagents, slash commands, and instruction templates).
|
|
62
|
-
- Any future syncable surface must integrate with the shared template-script runtime instead of
|
|
63
|
-
introducing surface-specific script execution behavior.
|
|
64
|
-
- For GitHub actions, use `gh` CLI.
|
|
65
|
-
- Keep ignore and publish rules aligned with tool-specific directories so package publishes stay
|
|
66
|
-
clean.
|
|
67
|
-
- CLI shim E2E docs: `docs/cli-shim-e2e.md`.
|
|
68
|
-
<!-- MANUAL ADDITIONS END -->
|
package/CONTRIBUTING.md
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Contributing
|
|
2
|
-
|
|
3
|
-
This document is for contributors and maintainers working on the `omniagent` codebase.
|
|
4
|
-
|
|
5
|
-
If you are using `omniagent` as an npm package consumer, start with [`README.md`](README.md).
|
|
6
|
-
|
|
7
|
-
## Local Setup
|
|
8
|
-
|
|
9
|
-
- Node.js 18+
|
|
10
|
-
- npm
|
|
11
|
-
|
|
12
|
-
Install dependencies:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
npm ci
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Local Validation
|
|
19
|
-
|
|
20
|
-
Run the same checks used by CI before opening a PR:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npm run check
|
|
24
|
-
npm run typecheck
|
|
25
|
-
npm test
|
|
26
|
-
npm run build
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Docs Changes
|
|
30
|
-
|
|
31
|
-
When updating docs, keep root `README.md` consumer-focused.
|
|
32
|
-
|
|
33
|
-
- End-user usage and product behavior belong in `README.md` and `docs/*.md`.
|
|
34
|
-
- Development and contribution workflows belong in `CONTRIBUTING.md`.
|
|
35
|
-
- Update docs assertions in `tests/docs/readme.test.ts` when docs architecture changes.
|
|
36
|
-
|
|
37
|
-
## CLI Shim E2E (Contributor Workflow)
|
|
38
|
-
|
|
39
|
-
CLI shim E2E is a contributor-only verification flow and is not required for normal package usage.
|
|
40
|
-
|
|
41
|
-
Detailed guide:
|
|
42
|
-
|
|
43
|
-
- [`docs/cli-shim-e2e.md`](docs/cli-shim-e2e.md)
|
|
44
|
-
|
|
45
|
-
Quick commands:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Build first
|
|
49
|
-
npm run build
|
|
50
|
-
|
|
51
|
-
# Record baseline outputs from real CLIs
|
|
52
|
-
OA_E2E_RECORD_BASELINE=1 npm test -- tests/e2e/cli-shim/cli-shim.e2e.test.ts
|
|
53
|
-
|
|
54
|
-
# Compare shim output to recorded baselines
|
|
55
|
-
OA_E2E=1 npm test -- tests/e2e/cli-shim/cli-shim.e2e.test.ts
|
|
56
|
-
```
|
package/biome.json
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
3
|
-
"files": {
|
|
4
|
-
"includes": ["src/**/*.ts", "tests/**/*.ts"]
|
|
5
|
-
},
|
|
6
|
-
"formatter": {
|
|
7
|
-
"enabled": true,
|
|
8
|
-
"indentStyle": "tab",
|
|
9
|
-
"indentWidth": 2,
|
|
10
|
-
"lineWidth": 100
|
|
11
|
-
},
|
|
12
|
-
"linter": {
|
|
13
|
-
"enabled": true,
|
|
14
|
-
"rules": {
|
|
15
|
-
"recommended": true,
|
|
16
|
-
"suspicious": {
|
|
17
|
-
"noExplicitAny": "warn"
|
|
18
|
-
},
|
|
19
|
-
"correctness": {
|
|
20
|
-
"noUnusedImports": "error",
|
|
21
|
-
"noUnusedVariables": "error"
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"assist": {
|
|
26
|
-
"enabled": true,
|
|
27
|
-
"actions": {
|
|
28
|
-
"source": {
|
|
29
|
-
"recommended": true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"javascript": {
|
|
34
|
-
"formatter": {
|
|
35
|
-
"quoteStyle": "double",
|
|
36
|
-
"semicolons": "always",
|
|
37
|
-
"trailingCommas": "all",
|
|
38
|
-
"arrowParentheses": "always"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
package/tasks.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# README Docs Refactor Tasks
|
|
2
|
-
|
|
3
|
-
- [x] Create concise onboarding-first `README.md` for the 90% sync workflow.
|
|
4
|
-
- [x] Add advanced docs pages and move complex README content into `/docs`.
|
|
5
|
-
- [x] Move custom targets/custom agent declaration guidance to `docs/custom-targets.md`.
|
|
6
|
-
- [x] Move templating and dynamic script guidance to `docs/templating.md`.
|
|
7
|
-
- [x] Add a docs index and link advanced docs from `README.md`.
|
|
8
|
-
- [x] Update docs tests to match the new README/docs structure.
|
|
9
|
-
- [x] Run validation (`npm run check` and `npm test`).
|
|
10
|
-
|
|
11
|
-
# Contributor/Consumer Split Follow-up
|
|
12
|
-
|
|
13
|
-
- [x] Remove development-only validation details from root `README.md`.
|
|
14
|
-
- [x] Add `CONTRIBUTING.md` with local development and validation guidance.
|
|
15
|
-
- [x] Move CLI shim E2E guidance under contributing docs flow.
|
|
16
|
-
- [x] Remove contributor-only links from end-user docs indexes.
|
|
17
|
-
- [x] Update docs tests for the new contributing boundary.
|
|
18
|
-
- [x] Run validation (`npm run check` and `npm test`).
|
|
19
|
-
|
|
20
|
-
# README Basics Follow-up
|
|
21
|
-
|
|
22
|
-
- [x] Add simple `.local` override explanation to root `README.md`.
|
|
23
|
-
- [x] Add simple basic templating explanation to root `README.md`.
|
|
24
|
-
- [x] Update docs tests to assert these root README basics.
|
|
25
|
-
- [x] Run validation (`npm run check` and `npm test`).
|
package/tsconfig.json
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "Bundler",
|
|
6
|
-
"strict": true,
|
|
7
|
-
"types": ["node", "vitest/globals"],
|
|
8
|
-
"esModuleInterop": true,
|
|
9
|
-
"skipLibCheck": true,
|
|
10
|
-
"forceConsistentCasingInFileNames": true
|
|
11
|
-
},
|
|
12
|
-
"include": ["src"]
|
|
13
|
-
}
|
package/vite.config.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vite'
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
build: {
|
|
5
|
-
target: 'node18',
|
|
6
|
-
ssr: true,
|
|
7
|
-
lib: {
|
|
8
|
-
entry: {
|
|
9
|
-
cli: 'src/cli/index.ts',
|
|
10
|
-
index: 'src/index.ts'
|
|
11
|
-
},
|
|
12
|
-
formats: ['es'],
|
|
13
|
-
fileName: (_format, entryName) => `${entryName}.js`
|
|
14
|
-
},
|
|
15
|
-
rollupOptions: {
|
|
16
|
-
external: ['yargs', 'yargs/helpers'],
|
|
17
|
-
output: {
|
|
18
|
-
banner: (chunk) => (chunk.name === 'cli' ? '#!/usr/bin/env node' : '')
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
})
|