@owlmeans/create-app 0.1.18-rc.55 → 0.1.18-rc.57
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 +8 -1
- package/build/args.d.ts +1 -26
- package/build/args.d.ts.map +1 -1
- package/build/args.js +3 -28
- package/build/args.js.map +1 -1
- package/build/consts.d.ts +6 -0
- package/build/consts.d.ts.map +1 -0
- package/build/consts.js +6 -0
- package/build/consts.js.map +1 -0
- package/build/consts.local.d.ts +12 -0
- package/build/consts.local.d.ts.map +1 -0
- package/build/consts.local.js +50 -0
- package/build/consts.local.js.map +1 -0
- package/build/index.d.ts +5 -4
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/naming.d.ts +0 -5
- package/build/naming.d.ts.map +1 -1
- package/build/naming.js +1 -5
- package/build/naming.js.map +1 -1
- package/build/run.d.ts +1 -1
- package/build/run.d.ts.map +1 -1
- package/build/run.js +2 -2
- package/build/scaffold.d.ts +1 -14
- package/build/scaffold.d.ts.map +1 -1
- package/build/scaffold.js +2 -1
- package/build/scaffold.js.map +1 -1
- package/build/template.d.ts +1 -20
- package/build/template.d.ts.map +1 -1
- package/build/template.js +1 -20
- package/build/template.js.map +1 -1
- package/build/types.d.ts +61 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +3 -3
- package/template/AGENTS.md +20 -1
- package/template/README.bare.md +14 -1
- package/template/README.md +5 -0
- package/template/_agents/skills/getting-started/SKILL.md +19 -0
- package/template/_agents/skills/logging/SKILL.md +38 -0
- package/template/_agents/skills/owlmeans-code-structure/SKILL.md +129 -0
- package/template/_agents/skills/reuse-code/SKILL.md +3 -2
- package/template/_agents/skills/skill-authoring/SKILL.md +1 -1
- package/template/_claude/settings.json +11 -0
- package/template/_gitignore +5 -0
- package/template/_owlmeans-structure.json +12 -0
- package/template/package.json +4 -2
- package/template/sources/api/package.json +4 -3
- package/template/sources/api/src/config.ts +7 -0
- package/template/sources/api/src/index.ts +7 -1
- package/template/sources/common/package.json +7 -7
- package/template/sources/common/src/config.ts +2 -1
- package/template/sources/web/package.json +32 -31
- package/template/sources/web/src/config.ts +8 -0
- package/template/sources/web/src/consts.ts +11 -0
- package/template/sources/web/src/context.ts +1 -3
- package/template/sources/web/src/layout/main.tsx +2 -1
- package/template/sources/web/src/nav.ts +1 -8
- package/template/sources/web/src/screens/session.tsx +2 -1
- package/template/sources/web/src/vite-env.d.ts +7 -0
- package/template/sources/web/vite.config.ts +3 -2
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ bun create @owlmeans/app my-app
|
|
|
9
9
|
# or
|
|
10
10
|
yarn create @owlmeans/app my-app
|
|
11
11
|
# or
|
|
12
|
-
npx @owlmeans/create-app@^0.1.18-rc.
|
|
12
|
+
npx @owlmeans/create-app@^0.1.18-rc.57 my-app
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## What it generates
|
|
@@ -31,6 +31,13 @@ The web app ships a basic shadcn UI **navigation + layout** and a **Session** sc
|
|
|
31
31
|
that creates, lists and removes items held in a **session-scoped in-memory resource**
|
|
32
32
|
(`@owlmeans/static-resource`) on the backend — no database required.
|
|
33
33
|
|
|
34
|
+
Logging goes through [`@owlmeans/log`](https://www.npmjs.com/package/@owlmeans/log), with the level
|
|
35
|
+
set per environment and never in code: the api's `config.ts` reads `LOG_LEVEL` (default `info`) and
|
|
36
|
+
`LOG_DEBUG` from the Bun runtime, the web's reads `VITE_LOG_LEVEL` (default `debug` under `vite`,
|
|
37
|
+
`info` in a build) and `VITE_LOG_DEBUG` at build time. The shared `sources/common` config runs in
|
|
38
|
+
both runtimes, so it sets no level and no `cfg.debug` flag. Local values go in the git-ignored
|
|
39
|
+
`sources/api/.env` / `sources/web/.env`.
|
|
40
|
+
|
|
34
41
|
By default the scaffolder also installs dependencies and **deploys agent guidance**
|
|
35
42
|
into the project via [`@owlmeans/agent-skills`](https://www.npmjs.com/package/@owlmeans/agent-skills)
|
|
36
43
|
(`.agents/skills/`).
|
package/build/args.d.ts
CHANGED
|
@@ -1,29 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export interface CreateArgs {
|
|
3
|
-
/** Target directory (positional). `null` means it must be prompted/derived. */
|
|
4
|
-
dir: string | null;
|
|
5
|
-
/** Human-readable app name. Defaults to the directory slug. */
|
|
6
|
-
name: string | null;
|
|
7
|
-
/** Explicit package slug. `null` derives it from the target directory. */
|
|
8
|
-
slug: string | null;
|
|
9
|
-
/** BCP-47-ish language of the generated UI text and `<html lang>`. */
|
|
10
|
-
lang: string;
|
|
11
|
-
/** One-line project description for the README, AGENTS.md and the index.html meta tags. */
|
|
12
|
-
description: string | null;
|
|
13
|
-
/** Scaffold the shell without the example/demo code. */
|
|
14
|
-
bare: boolean;
|
|
15
|
-
/** Package manager used to install deps and (for `bun`) run the project. */
|
|
16
|
-
pm: PackageManager;
|
|
17
|
-
/** Install dependencies after copying the template. */
|
|
18
|
-
install: boolean;
|
|
19
|
-
/** Deploy agent skills via @owlmeans/agent-skills after install. */
|
|
20
|
-
skills: boolean;
|
|
21
|
-
/** Run `git init` in the new project. */
|
|
22
|
-
git: boolean;
|
|
23
|
-
/** Skip confirmations / proceed into a non-empty directory. */
|
|
24
|
-
yes: boolean;
|
|
25
|
-
help: boolean;
|
|
26
|
-
}
|
|
1
|
+
import type { CreateArgs } from './types.js';
|
|
27
2
|
export declare const parseArgs: (argv: string[]) => CreateArgs | null;
|
|
28
3
|
export declare const printHelp: () => void;
|
|
29
4
|
//# sourceMappingURL=args.d.ts.map
|
package/build/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAA;AAE5D,eAAO,MAAM,SAAS,SAAU,MAAM,EAAE,KAAG,UAAU,GAAG,IAqHvD,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,IAE5B,CAAA"}
|
package/build/args.js
CHANGED
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Usage:
|
|
5
|
-
npm create @owlmeans/app@latest <dir> [options]
|
|
6
|
-
bun create @owlmeans/app <dir> [options]
|
|
7
|
-
yarn create @owlmeans/app <dir> [options]
|
|
8
|
-
npx @owlmeans/create-app@^0.1.18-rc.55 <dir> [options]
|
|
9
|
-
|
|
10
|
-
Generates three workspaces (common + api + web) with shadcn UI navigation and
|
|
11
|
-
layout, no authentication, and a session-scoped in-memory resource on the
|
|
12
|
-
backend. With --bare the demo is left out and only the working shell remains.
|
|
13
|
-
Agent skills are deployed into the project by default.
|
|
14
|
-
|
|
15
|
-
Options:
|
|
16
|
-
--name <name> human-readable app name (default: derived from <dir>)
|
|
17
|
-
--slug <slug> package slug (default: derived from <dir>)
|
|
18
|
-
--lang <code> language of the generated UI text (default: ${DEFAULT_LANG})
|
|
19
|
-
--description <t> one-line project description for the generated docs
|
|
20
|
-
--bare scaffold the shell only — no example/demo code
|
|
21
|
-
--pm <bun|npm|yarn> package manager (default: bun)
|
|
22
|
-
--no-install do not install dependencies
|
|
23
|
-
--no-skills do not deploy agent skills via @owlmeans/agent-skills
|
|
24
|
-
--no-git do not run "git init"
|
|
25
|
-
--yes, -y proceed without prompts / into a non-empty directory
|
|
26
|
-
--help, -h show this help
|
|
27
|
-
`;
|
|
28
|
-
const PMS = ['bun', 'npm', 'yarn'];
|
|
1
|
+
import { isValidLang, isValidSlug } from './naming.js';
|
|
2
|
+
import { DEFAULT_LANG, SLUG_PATTERN } from './consts.js';
|
|
3
|
+
import { HELP, PMS } from './consts.local.js';
|
|
29
4
|
export const parseArgs = (argv) => {
|
|
30
5
|
const args = argv.slice(2);
|
|
31
6
|
const result = {
|
package/build/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** npm-safe package slug: lowercase alphanumerics and inner dashes, 1–32 chars. */
|
|
2
|
+
export declare const SLUG_PATTERN: RegExp;
|
|
3
|
+
/** Loose BCP-47 shape — enough to keep junk out of `<html lang>` without shipping a registry. */
|
|
4
|
+
export declare const LANG_PATTERN: RegExp;
|
|
5
|
+
export declare const DEFAULT_LANG = "en";
|
|
6
|
+
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,eAAO,MAAM,YAAY,QAA2C,CAAA;AAEpE,iGAAiG;AACjG,eAAO,MAAM,YAAY,QAA0C,CAAA;AAEnE,eAAO,MAAM,YAAY,OAAO,CAAA"}
|
package/build/consts.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** npm-safe package slug: lowercase alphanumerics and inner dashes, 1–32 chars. */
|
|
2
|
+
export const SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$/;
|
|
3
|
+
/** Loose BCP-47 shape — enough to keep junk out of `<html lang>` without shipping a registry. */
|
|
4
|
+
export const LANG_PATTERN = /^[a-zA-Z]{2,8}(?:-[a-zA-Z0-9]{1,8})*$/;
|
|
5
|
+
export const DEFAULT_LANG = 'en';
|
|
6
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG,wCAAwC,CAAA;AAEpE,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,uCAAuC,CAAA;AAEnE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PackageManager } from './types.js';
|
|
2
|
+
export declare const HELP = "@owlmeans/create-app \u2014 scaffold a fullstack OwlMeans Common app\n\nUsage:\n npm create @owlmeans/app@latest <dir> [options]\n bun create @owlmeans/app <dir> [options]\n yarn create @owlmeans/app <dir> [options]\n npx @owlmeans/create-app@^0.1.18-rc.57 <dir> [options]\n\nGenerates three workspaces (common + api + web) with shadcn UI navigation and\nlayout, no authentication, and a session-scoped in-memory resource on the\nbackend. With --bare the demo is left out and only the working shell remains.\nAgent skills are deployed into the project by default.\n\nOptions:\n --name <name> human-readable app name (default: derived from <dir>)\n --slug <slug> package slug (default: derived from <dir>)\n --lang <code> language of the generated UI text (default: en)\n --description <t> one-line project description for the generated docs\n --bare scaffold the shell only \u2014 no example/demo code\n --pm <bun|npm|yarn> package manager (default: bun)\n --no-install do not install dependencies\n --no-skills do not deploy agent skills via @owlmeans/agent-skills\n --no-git do not run \"git init\"\n --yes, -y proceed without prompts / into a non-empty directory\n --help, -h show this help\n";
|
|
3
|
+
export declare const PMS: PackageManager[];
|
|
4
|
+
/** Dotfiles/dirs are shipped with an underscore prefix so npm does not strip them from the tarball. */
|
|
5
|
+
export declare const DOTFILE_RENAMES: Record<string, string>;
|
|
6
|
+
/** Files whose contents are binary or must not be string-substituted. */
|
|
7
|
+
export declare const BINARY_EXT: Set<string>;
|
|
8
|
+
/** Template-root manifest describing what the bare shell drops and what it swaps in. */
|
|
9
|
+
export declare const BARE_MANIFEST = "_bare.json";
|
|
10
|
+
/** Stand-in for the globstar segment while the single-`*` pass runs; cannot occur in a path. */
|
|
11
|
+
export declare const GLOBSTAR = "\0";
|
|
12
|
+
//# sourceMappingURL=consts.local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.local.d.ts","sourceRoot":"","sources":["../src/consts.local.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,eAAO,MAAM,IAAI,6wCAyBhB,CAAA;AAED,eAAO,MAAM,GAAG,EAAE,cAAc,EAA2B,CAAA;AAE3D,uGAAuG;AACvG,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAalD,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,UAAU,aAAiF,CAAA;AAExG,wFAAwF;AACxF,eAAO,MAAM,aAAa,eAAe,CAAA;AAEzC,gGAAgG;AAChG,eAAO,MAAM,QAAQ,OAAW,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DEFAULT_LANG } from './consts.js';
|
|
2
|
+
export const HELP = `@owlmeans/create-app — scaffold a fullstack OwlMeans Common app
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
npm create @owlmeans/app@latest <dir> [options]
|
|
6
|
+
bun create @owlmeans/app <dir> [options]
|
|
7
|
+
yarn create @owlmeans/app <dir> [options]
|
|
8
|
+
npx @owlmeans/create-app@^0.1.18-rc.57 <dir> [options]
|
|
9
|
+
|
|
10
|
+
Generates three workspaces (common + api + web) with shadcn UI navigation and
|
|
11
|
+
layout, no authentication, and a session-scoped in-memory resource on the
|
|
12
|
+
backend. With --bare the demo is left out and only the working shell remains.
|
|
13
|
+
Agent skills are deployed into the project by default.
|
|
14
|
+
|
|
15
|
+
Options:
|
|
16
|
+
--name <name> human-readable app name (default: derived from <dir>)
|
|
17
|
+
--slug <slug> package slug (default: derived from <dir>)
|
|
18
|
+
--lang <code> language of the generated UI text (default: ${DEFAULT_LANG})
|
|
19
|
+
--description <t> one-line project description for the generated docs
|
|
20
|
+
--bare scaffold the shell only — no example/demo code
|
|
21
|
+
--pm <bun|npm|yarn> package manager (default: bun)
|
|
22
|
+
--no-install do not install dependencies
|
|
23
|
+
--no-skills do not deploy agent skills via @owlmeans/agent-skills
|
|
24
|
+
--no-git do not run "git init"
|
|
25
|
+
--yes, -y proceed without prompts / into a non-empty directory
|
|
26
|
+
--help, -h show this help
|
|
27
|
+
`;
|
|
28
|
+
export const PMS = ['bun', 'npm', 'yarn'];
|
|
29
|
+
/** Dotfiles/dirs are shipped with an underscore prefix so npm does not strip them from the tarball. */
|
|
30
|
+
export const DOTFILE_RENAMES = {
|
|
31
|
+
'_gitignore': '.gitignore',
|
|
32
|
+
'_npmrc': '.npmrc',
|
|
33
|
+
'_env': '.env',
|
|
34
|
+
'_github': '.github',
|
|
35
|
+
'_owlmeans-structure.json': '.owlmeans-structure.json',
|
|
36
|
+
// `_agents` carries the canonical harness — AGENTS.md's skills, the shared memory
|
|
37
|
+
// store and the link-skills bridge; the template seed (sync-agent-meta) writes
|
|
38
|
+
// `_agents/skills/` into this tree. `_claude` carries only the Claude Code skill-link
|
|
39
|
+
// bridge (SessionStart hook + the gitkept symlink dir). Entries whose source dir is
|
|
40
|
+
// absent are inert.
|
|
41
|
+
'_agents': '.agents',
|
|
42
|
+
'_claude': '.claude',
|
|
43
|
+
};
|
|
44
|
+
/** Files whose contents are binary or must not be string-substituted. */
|
|
45
|
+
export const BINARY_EXT = new Set(['.ico', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.woff', '.woff2']);
|
|
46
|
+
/** Template-root manifest describing what the bare shell drops and what it swaps in. */
|
|
47
|
+
export const BARE_MANIFEST = '_bare.json';
|
|
48
|
+
/** Stand-in for the globstar segment while the single-`*` pass runs; cannot occur in a path. */
|
|
49
|
+
export const GLOBSTAR = '\u0000';
|
|
50
|
+
//# sourceMappingURL=consts.local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.local.js","sourceRoot":"","sources":["../src/consts.local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;oEAgBgD,YAAY;;;;;;;;;CAS/E,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAE3D,uGAAuG;AACvG,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,YAAY,EAAE,YAAY;IAC1B,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,SAAS;IACpB,0BAA0B,EAAE,0BAA0B;IACtD,kFAAkF;IAClF,+EAA+E;IAC/E,sFAAsF;IACtF,oFAAoF;IACpF,oBAAoB;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;CACrB,CAAA;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;AAExG,wFAAwF;AACxF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAA;AAEzC,gGAAgG;AAChG,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAA"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export { run } from './run.js';
|
|
2
2
|
export { parseArgs, printHelp } from './args.js';
|
|
3
|
-
export type { CreateArgs, PackageManager } from './
|
|
3
|
+
export type { CreateArgs, PackageManager } from './types.js';
|
|
4
4
|
export { scaffold } from './scaffold.js';
|
|
5
|
-
export type { ScaffoldOptions } from './
|
|
5
|
+
export type { ScaffoldOptions } from './types.js';
|
|
6
6
|
export { copyTemplate, templateDir, isEmptyDir } from './template.js';
|
|
7
|
-
export type { BareManifest, CopyTemplateOptions, TemplateReplacements } from './
|
|
8
|
-
export {
|
|
7
|
+
export type { BareManifest, CopyTemplateOptions, TemplateReplacements } from './types.js';
|
|
8
|
+
export { defaultDescription, isValidLang, isValidSlug, slugify, titleize } from './naming.js';
|
|
9
|
+
export { DEFAULT_LANG, LANG_PATTERN, SLUG_PATTERN } from './consts.js';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACrE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -2,5 +2,6 @@ export { run } from './run.js';
|
|
|
2
2
|
export { parseArgs, printHelp } from './args.js';
|
|
3
3
|
export { scaffold } from './scaffold.js';
|
|
4
4
|
export { copyTemplate, templateDir, isEmptyDir } from './template.js';
|
|
5
|
-
export {
|
|
5
|
+
export { defaultDescription, isValidLang, isValidSlug, slugify, titleize } from './naming.js';
|
|
6
|
+
export { DEFAULT_LANG, LANG_PATTERN, SLUG_PATTERN } from './consts.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAErE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAErE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
package/build/naming.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/** npm-safe package slug: lowercase alphanumerics and inner dashes, 1–32 chars. */
|
|
2
|
-
export declare const SLUG_PATTERN: RegExp;
|
|
3
|
-
/** Loose BCP-47 shape — enough to keep junk out of `<html lang>` without shipping a registry. */
|
|
4
|
-
export declare const LANG_PATTERN: RegExp;
|
|
5
|
-
export declare const DEFAULT_LANG = "en";
|
|
6
1
|
export declare const isValidSlug: (slug: string) => boolean;
|
|
7
2
|
export declare const isValidLang: (lang: string) => boolean;
|
|
8
3
|
export declare const slugify: (input: string) => string;
|
package/build/naming.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,OAAkC,CAAA;AAE7E,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,OAAkC,CAAA;AAE7E,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MAOnB,CAAA;AAErB,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAC6C,CAAA;AAErF,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,MACJ,CAAA"}
|
package/build/naming.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { basename } from 'node:path';
|
|
2
|
-
|
|
3
|
-
export const SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$/;
|
|
4
|
-
/** Loose BCP-47 shape — enough to keep junk out of `<html lang>` without shipping a registry. */
|
|
5
|
-
export const LANG_PATTERN = /^[a-zA-Z]{2,8}(?:-[a-zA-Z0-9]{1,8})*$/;
|
|
6
|
-
export const DEFAULT_LANG = 'en';
|
|
2
|
+
import { LANG_PATTERN, SLUG_PATTERN } from './consts.js';
|
|
7
3
|
export const isValidSlug = (slug) => SLUG_PATTERN.test(slug);
|
|
8
4
|
export const isValidLang = (lang) => LANG_PATTERN.test(lang);
|
|
9
5
|
export const slugify = (input) => basename(input)
|
package/build/naming.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAE7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAE7E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAU,EAAE,CAC/C,QAAQ,CAAC,KAAK,CAAC;KACZ,WAAW,EAAE;KACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;KAC5B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;KACnB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;OACjB,cAAc,CAAA;AAErB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAErF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAU,EAAE,CACzD,GAAG,IAAI,qCAAqC,CAAA"}
|
package/build/run.d.ts
CHANGED
package/build/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAA;AAQ5D,eAAO,MAAM,GAAG,SAAgB,UAAU,KAAG,OAAO,CAAC,MAAM,CAyF1D,CAAA"}
|
package/build/run.js
CHANGED
|
@@ -50,7 +50,7 @@ export const run = async (args) => {
|
|
|
50
50
|
log(args.install
|
|
51
51
|
? '\nDeploying agent skills via @owlmeans/agent-skills…'
|
|
52
52
|
: '\nDeploying harness guidance via @owlmeans/agent-skills (general skills only — re-run'
|
|
53
|
-
+ '\n`npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
53
|
+
+ '\n`npx @owlmeans/agent-skills@^0.1.18-rc.48` after installing to add the package-specific ones)…');
|
|
54
54
|
try {
|
|
55
55
|
const result = await installSkills({
|
|
56
56
|
dir: dest,
|
|
@@ -62,7 +62,7 @@ export const run = async (args) => {
|
|
|
62
62
|
help: false,
|
|
63
63
|
});
|
|
64
64
|
if (result.code !== 0) {
|
|
65
|
-
process.stderr.write(` agent-skills exited with code ${result.code} — you can re-run \`npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
65
|
+
process.stderr.write(` agent-skills exited with code ${result.code} — you can re-run \`npx @owlmeans/agent-skills@^0.1.18-rc.48\` later.\n`);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
catch (err) {
|
package/build/scaffold.d.ts
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
/** Destination directory. Created when missing; an existing one is written into as-is. */
|
|
3
|
-
dir: string;
|
|
4
|
-
/** package/workspace slug, e.g. `my-app`. */
|
|
5
|
-
slug: string;
|
|
6
|
-
/** Human-readable name. Defaults to the titleized slug. */
|
|
7
|
-
name?: string;
|
|
8
|
-
/** BCP-47-ish UI language and `<html lang>`. Defaults to `en`. */
|
|
9
|
-
lang?: string;
|
|
10
|
-
/** One-line description for the README, AGENTS.md and the index.html meta tags. */
|
|
11
|
-
description?: string;
|
|
12
|
-
/** Scaffold the shell without the example/demo code. */
|
|
13
|
-
bare?: boolean;
|
|
14
|
-
}
|
|
1
|
+
import type { ScaffoldOptions } from './types.js';
|
|
15
2
|
/**
|
|
16
3
|
* Filesystem-only scaffolding for tools that drive create-app themselves: no git, no
|
|
17
4
|
* dependency install, no agent-skills deploy, no output. Everything the CLI adds around
|
package/build/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,SAAU,eAAe,KAAG,IAShD,CAAA"}
|
package/build/scaffold.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { defaultDescription, titleize } from './naming.js';
|
|
3
|
+
import { DEFAULT_LANG } from './consts.js';
|
|
3
4
|
import { copyTemplate, templateDir } from './template.js';
|
|
4
5
|
/**
|
|
5
6
|
* Filesystem-only scaffolding for tools that drive create-app themselves: no git, no
|
package/build/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAqB,EAAQ,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE7C,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC,IAAI,CAAC;KAC1D,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAA;AAClC,CAAC,CAAA"}
|
package/build/template.d.ts
CHANGED
|
@@ -1,24 +1,5 @@
|
|
|
1
1
|
import { renameSync } from 'node:fs';
|
|
2
|
-
|
|
3
|
-
/** Template-relative paths — a file, a directory subtree, or a `*` / `**` glob — the bare shell omits. */
|
|
4
|
-
remove: string[];
|
|
5
|
-
/** Target template path → the `.bare.`-infixed source whose CONTENT is written there instead. */
|
|
6
|
-
overrides: Record<string, string>;
|
|
7
|
-
}
|
|
8
|
-
export interface TemplateReplacements {
|
|
9
|
-
/** package/workspace slug, e.g. `my-app` */
|
|
10
|
-
slug: string;
|
|
11
|
-
/** human-readable name, e.g. `My App` */
|
|
12
|
-
name: string;
|
|
13
|
-
/** BCP-47-ish UI language, e.g. `en` — also the generated `<html lang>` */
|
|
14
|
-
lang: string;
|
|
15
|
-
/** one-line project description for the README, AGENTS.md and the index.html meta tags */
|
|
16
|
-
description: string;
|
|
17
|
-
}
|
|
18
|
-
export interface CopyTemplateOptions {
|
|
19
|
-
/** Scaffold the demo-free shell: apply `_bare.json`'s removals and overrides. */
|
|
20
|
-
bare?: boolean;
|
|
21
|
-
}
|
|
2
|
+
import type { CopyTemplateOptions, TemplateReplacements } from './types.js';
|
|
22
3
|
/** Absolute path to the bundled `template/` directory (sibling of `build/`). */
|
|
23
4
|
export declare const templateDir: () => string;
|
|
24
5
|
/**
|
package/build/template.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,UAAU,EAA2B,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,UAAU,EAA2B,MAAM,SAAS,CAAA;AAIvH,OAAO,KAAK,EAAgB,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEzF,gFAAgF;AAChF,eAAO,MAAM,WAAW,QAAO,MACqC,CAAA;AA8EpE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAClB,MAAM,QAAQ,MAAM,KAAK,oBAAoB,SAAQ,mBAAmB,KAC5E,IAEF,CAAA;AAED,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,OAGxC,CAAA;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
package/build/template.js
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { dirname, join, relative, resolve, sep } from 'node:path';
|
|
4
|
-
|
|
5
|
-
const DOTFILE_RENAMES = {
|
|
6
|
-
'_gitignore': '.gitignore',
|
|
7
|
-
'_npmrc': '.npmrc',
|
|
8
|
-
'_env': '.env',
|
|
9
|
-
'_github': '.github',
|
|
10
|
-
// `_agents` carries the canonical harness — AGENTS.md's skills, the shared memory
|
|
11
|
-
// store and the link-skills bridge; the template seed (sync-agent-meta) writes
|
|
12
|
-
// `_agents/skills/` into this tree. `_claude` carries only the Claude Code skill-link
|
|
13
|
-
// bridge (SessionStart hook + the gitkept symlink dir). Entries whose source dir is
|
|
14
|
-
// absent are inert.
|
|
15
|
-
'_agents': '.agents',
|
|
16
|
-
'_claude': '.claude',
|
|
17
|
-
};
|
|
18
|
-
/** Files whose contents are binary or must not be string-substituted. */
|
|
19
|
-
const BINARY_EXT = new Set(['.ico', '.png', '.jpg', '.jpeg', '.gif', '.webp', '.woff', '.woff2']);
|
|
20
|
-
/** Template-root manifest describing what the bare shell drops and what it swaps in. */
|
|
21
|
-
const BARE_MANIFEST = '_bare.json';
|
|
4
|
+
import { BARE_MANIFEST, BINARY_EXT, DOTFILE_RENAMES, GLOBSTAR } from './consts.local.js';
|
|
22
5
|
/** Absolute path to the bundled `template/` directory (sibling of `build/`). */
|
|
23
6
|
export const templateDir = () => resolve(dirname(fileURLToPath(import.meta.url)), '..', 'template');
|
|
24
7
|
const applyReplacements = (content, r) => content
|
|
@@ -35,8 +18,6 @@ const isBinary = (file) => {
|
|
|
35
18
|
* one project — which is also why they are filtered out of the copy in BOTH modes.
|
|
36
19
|
*/
|
|
37
20
|
const isBareVariant = (entry) => entry.includes('.bare.');
|
|
38
|
-
/** Stand-in for the globstar segment while the single-`*` pass runs; cannot occur in a path. */
|
|
39
|
-
const GLOBSTAR = '\u0000';
|
|
40
21
|
const globToRegExp = (pattern) => new RegExp('^' + pattern
|
|
41
22
|
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
42
23
|
.replaceAll('**/', GLOBSTAR)
|
package/build/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export type PackageManager = 'bun' | 'npm' | 'yarn';
|
|
2
|
+
export interface CreateArgs {
|
|
3
|
+
/** Target directory (positional). `null` means it must be prompted/derived. */
|
|
4
|
+
dir: string | null;
|
|
5
|
+
/** Human-readable app name. Defaults to the directory slug. */
|
|
6
|
+
name: string | null;
|
|
7
|
+
/** Explicit package slug. `null` derives it from the target directory. */
|
|
8
|
+
slug: string | null;
|
|
9
|
+
/** BCP-47-ish language of the generated UI text and `<html lang>`. */
|
|
10
|
+
lang: string;
|
|
11
|
+
/** One-line project description for the README, AGENTS.md and the index.html meta tags. */
|
|
12
|
+
description: string | null;
|
|
13
|
+
/** Scaffold the shell without the example/demo code. */
|
|
14
|
+
bare: boolean;
|
|
15
|
+
/** Package manager used to install deps and (for `bun`) run the project. */
|
|
16
|
+
pm: PackageManager;
|
|
17
|
+
/** Install dependencies after copying the template. */
|
|
18
|
+
install: boolean;
|
|
19
|
+
/** Deploy agent skills via @owlmeans/agent-skills after install. */
|
|
20
|
+
skills: boolean;
|
|
21
|
+
/** Run `git init` in the new project. */
|
|
22
|
+
git: boolean;
|
|
23
|
+
/** Skip confirmations / proceed into a non-empty directory. */
|
|
24
|
+
yes: boolean;
|
|
25
|
+
help: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ScaffoldOptions {
|
|
28
|
+
/** Destination directory. Created when missing; an existing one is written into as-is. */
|
|
29
|
+
dir: string;
|
|
30
|
+
/** package/workspace slug, e.g. `my-app`. */
|
|
31
|
+
slug: string;
|
|
32
|
+
/** Human-readable name. Defaults to the titleized slug. */
|
|
33
|
+
name?: string;
|
|
34
|
+
/** BCP-47-ish UI language and `<html lang>`. Defaults to `en`. */
|
|
35
|
+
lang?: string;
|
|
36
|
+
/** One-line description for the README, AGENTS.md and the index.html meta tags. */
|
|
37
|
+
description?: string;
|
|
38
|
+
/** Scaffold the shell without the example/demo code. */
|
|
39
|
+
bare?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface BareManifest {
|
|
42
|
+
/** Template-relative paths — a file, a directory subtree, or a `*` / `**` glob — the bare shell omits. */
|
|
43
|
+
remove: string[];
|
|
44
|
+
/** Target template path → the `.bare.`-infixed source whose CONTENT is written there instead. */
|
|
45
|
+
overrides: Record<string, string>;
|
|
46
|
+
}
|
|
47
|
+
export interface TemplateReplacements {
|
|
48
|
+
/** package/workspace slug, e.g. `my-app` */
|
|
49
|
+
slug: string;
|
|
50
|
+
/** human-readable name, e.g. `My App` */
|
|
51
|
+
name: string;
|
|
52
|
+
/** BCP-47-ish UI language, e.g. `en` — also the generated `<html lang>` */
|
|
53
|
+
lang: string;
|
|
54
|
+
/** one-line project description for the README, AGENTS.md and the index.html meta tags */
|
|
55
|
+
description: string;
|
|
56
|
+
}
|
|
57
|
+
export interface CopyTemplateOptions {
|
|
58
|
+
/** Scaffold the demo-free shell: apply `_bare.json`'s removals and overrides. */
|
|
59
|
+
bare?: boolean;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAEnD,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,2FAA2F;IAC3F,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,wDAAwD;IACxD,IAAI,EAAE,OAAO,CAAA;IACb,4EAA4E;IAC5E,EAAE,EAAE,cAAc,CAAA;IAClB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAA;IAChB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAA;IACf,yCAAyC;IACzC,GAAG,EAAE,OAAO,CAAA;IACZ,+DAA+D;IAC/D,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,0GAA0G;IAC1G,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,iGAAiG;IACjG,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf"}
|
package/build/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/create-app",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.57",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Scaffold a fullstack OwlMeans Common app — common + api + web workspaces, shadcn UI navigation/layout, no auth, and a session-scoped in-memory resource, or --bare for the demo-free shell. Also usable programmatically via scaffold(). Deploys agent skills via @owlmeans/agent-skills by default.",
|
|
6
6
|
"type": "module",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"template"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@owlmeans/agent-skills": "^0.1.18-rc.
|
|
33
|
+
"@owlmeans/agent-skills": "^0.1.18-rc.48"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@owlmeans/dep-config": "workspace:*",
|
|
37
|
-
"@types/node": "^26.
|
|
37
|
+
"@types/node": "^26.6.4",
|
|
38
38
|
"nodemon": "^3.1.14",
|
|
39
39
|
"typescript": "^7.0.2"
|
|
40
40
|
},
|
package/template/AGENTS.md
CHANGED
|
@@ -30,6 +30,13 @@ skill.
|
|
|
30
30
|
- Report finished git work as a Markdown table (**Action**, **Target**, **Result**), and never
|
|
31
31
|
commit a conflicted working copy — stop, list the conflicted paths, hand control back.
|
|
32
32
|
|
|
33
|
+
## Code structure (mandatory)
|
|
34
|
+
|
|
35
|
+
Types and interfaces live in `types.ts`, constants and enums in `consts.ts`, code in other files
|
|
36
|
+
(package-private ones in `*.local.ts`); helpers are factory-built objects and entity logic is a model
|
|
37
|
+
over a plain record. Load `/owlmeans-code-structure` before writing, moving or reviewing any
|
|
38
|
+
`.ts`/`.tsx`; `bun run check:structure` stays clean.
|
|
39
|
+
|
|
33
40
|
## Reporting (mandatory)
|
|
34
41
|
|
|
35
42
|
Always report concisely and briefly, in table format, about WHAT was done rather than why —
|
|
@@ -87,6 +94,17 @@ package that owns its browser consumer imports `apiConfigPlugin({ allow, deny? }
|
|
|
87
94
|
nested `deny` selector when a public collection carries a credential. Databases, queues, SMTP,
|
|
88
95
|
tokens, secrets and internal addresses never belong in an `allow` selector.
|
|
89
96
|
|
|
97
|
+
## Logging (mandatory)
|
|
98
|
+
|
|
99
|
+
Before adding any log line, catch block or `console` call, follow the `logging` skill (mechanics: `log`).
|
|
100
|
+
|
|
101
|
+
- No `console.*`: `const log = logger('<scope>')` from `@owlmeans/log`, a deliberate level, the
|
|
102
|
+
`Error` itself to `log.error`; never secrets, tokens or personal content.
|
|
103
|
+
- The level is set per environment, never in code: the api reads `LOG_LEVEL` / `LOG_DEBUG`
|
|
104
|
+
(default `info`), the web build reads `VITE_LOG_LEVEL` / `VITE_LOG_DEBUG` (`debug` under `vite`,
|
|
105
|
+
`info` in a build). Local values go in the git-ignored `sources/api/.env` / `sources/web/.env`.
|
|
106
|
+
- Never set `cfg.debug = { all: true }` — it does not control logging and must not reach production.
|
|
107
|
+
|
|
90
108
|
## Skills
|
|
91
109
|
|
|
92
110
|
Reusable guidance lives in `.agents/skills/<name>/SKILL.md`, deployed by `@owlmeans/agent-skills`
|
|
@@ -94,8 +112,9 @@ from the installed `@owlmeans/*` packages. Agents load a skill by topic, or you
|
|
|
94
112
|
explicitly. Copilot and Codex read `.agents/skills/` directly; Claude Code reads the generated
|
|
95
113
|
symlinks in `.claude/skills/` (see "Claude Code" below).
|
|
96
114
|
|
|
97
|
-
- After adding or updating any `@owlmeans/*` dependency, run `npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
115
|
+
- After adding or updating any `@owlmeans/*` dependency, run `npx @owlmeans/agent-skills@^0.1.18-rc.48` to refresh
|
|
98
116
|
the deployed skills.
|
|
117
|
+
- `/logging` — before adding any log line, catch block or `console` call (mechanics: `/log`).
|
|
99
118
|
- Deployed files carry an `AUTO-GENERATED` banner and are refreshed in place — never hand-edit them.
|
|
100
119
|
- To capture your own guidance, see the `skill-authoring` skill; to turn repeatedly-used memory into
|
|
101
120
|
a skill, `memory-promotion`. Keep it inside this repository, in `.agents/skills/` — never in a
|