modelroom 0.0.6 → 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/CHANGELOG.md +8 -0
- package/README.md +40 -8
- package/dist/bin/modelroom.js +241 -75
- package/dist/bin/modelroom.js.map +1 -1
- package/dist/lib/agents/index.d.ts.map +1 -1
- package/dist/lib/agents/index.js +19 -4
- package/dist/lib/agents/index.js.map +1 -1
- package/dist/lib/artifact.d.ts +1 -1
- package/dist/lib/artifact.d.ts.map +1 -1
- package/dist/lib/artifact.js +9 -5
- package/dist/lib/artifact.js.map +1 -1
- package/dist/lib/config.d.ts +17 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +40 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/frontmatter.d.ts +2 -0
- package/dist/lib/frontmatter.d.ts.map +1 -1
- package/dist/lib/frontmatter.js +11 -2
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/i18n.d.ts +315 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +651 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/lang.d.ts +4 -0
- package/dist/lib/lang.d.ts.map +1 -0
- package/dist/lib/lang.js +5 -0
- package/dist/lib/lang.js.map +1 -0
- package/dist/lib/lint.d.ts +3 -0
- package/dist/lib/lint.d.ts.map +1 -1
- package/dist/lib/lint.js +22 -12
- package/dist/lib/lint.js.map +1 -1
- package/dist/lib/locale.d.ts +9 -0
- package/dist/lib/locale.d.ts.map +1 -0
- package/dist/lib/locale.js +32 -0
- package/dist/lib/locale.js.map +1 -0
- package/dist/lib/server.d.ts +3 -0
- package/dist/lib/server.d.ts.map +1 -1
- package/dist/lib/server.js +44 -27
- package/dist/lib/server.js.map +1 -1
- package/dist/lib/templates.d.ts +7 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +30 -0
- package/dist/lib/templates.js.map +1 -0
- package/docs/02-convention.md +10 -5
- package/docs/03-cli.md +59 -14
- package/docs/04-agents.md +10 -2
- package/package.json +9 -19
- package/templates/{AGENTS.md → en/AGENTS.md} +8 -3
- package/templates/ja/AGENTS.md +38 -0
- package/templates/ja/room/BEHAVIOUR.md +18 -0
- package/templates/ja/room/BRIEF.md +16 -0
- package/templates/ja/room/SPEC.md +9 -0
- package/templates/ja/room/index.html +53 -0
- package/templates/modelroom.json +3 -1
- package/ui/assets/app.js +120 -47
- package/ui/dashboard.html +11 -7
- package/ui/kit.html +13 -9
- package/ui/modelroom.css +1 -2
- package/ui/room.html +11 -7
- package/ui/settings.html +11 -7
- /package/templates/{room → en/room}/BEHAVIOUR.md +0 -0
- /package/templates/{room → en/room}/BRIEF.md +0 -0
- /package/templates/{room → en/room}/SPEC.md +0 -0
- /package/templates/{room → en/room}/index.html +0 -0
package/dist/lib/agents/index.js
CHANGED
|
@@ -11,12 +11,13 @@
|
|
|
11
11
|
// run(options) child handle streams stdout/stderr
|
|
12
12
|
import { spawn } from 'node:child_process';
|
|
13
13
|
import { randomUUID } from 'node:crypto';
|
|
14
|
+
import { t } from '../i18n.js';
|
|
14
15
|
// eslint-disable-next-line no-control-regex -- the escape byte is the point
|
|
15
16
|
const stripAnsiRe = /\u001b\[[0-9;?]*[ -/]*[@-~]/g;
|
|
16
17
|
export const stripAnsi = (s) => s.replace(stripAnsiRe, '');
|
|
17
18
|
// Session ids are not secrets, but they are identifiers: keep them unpredictable.
|
|
18
19
|
const random = () => randomUUID().replaceAll('-', '').slice(0, 8);
|
|
19
|
-
function spawnStreaming({ command, args, cwd, env, onChunk, onExit, }) {
|
|
20
|
+
function spawnStreaming({ command, args, cwd, env, lang, onChunk, onExit, }) {
|
|
20
21
|
const child = spawn(command, args, {
|
|
21
22
|
cwd,
|
|
22
23
|
// Close stdin: agents that read stdin will hang forever if it stays open.
|
|
@@ -34,7 +35,7 @@ function spawnStreaming({ command, args, cwd, env, onChunk, onExit, }) {
|
|
|
34
35
|
};
|
|
35
36
|
child.stdout?.on('data', (b) => onChunk('stdout', String(b)));
|
|
36
37
|
child.stderr?.on('data', (b) => onChunk('stderr', String(b)));
|
|
37
|
-
child.on('error', (err) => finish(-1,
|
|
38
|
+
child.on('error', (err) => finish(-1, t(lang, 'server.cannotStart', { command, message: err.message })));
|
|
38
39
|
child.on('close', (code) => finish(code ?? -1));
|
|
39
40
|
return child;
|
|
40
41
|
}
|
|
@@ -52,7 +53,14 @@ export const opencode = {
|
|
|
52
53
|
if (a.model)
|
|
53
54
|
args.push('--model', a.model);
|
|
54
55
|
args.push('--session', sessionId, '--auto', prompt);
|
|
55
|
-
return spawnStreaming({
|
|
56
|
+
return spawnStreaming({
|
|
57
|
+
command: a.command || 'opencode',
|
|
58
|
+
args,
|
|
59
|
+
cwd,
|
|
60
|
+
lang: cfg.lang,
|
|
61
|
+
onChunk,
|
|
62
|
+
onExit,
|
|
63
|
+
});
|
|
56
64
|
},
|
|
57
65
|
};
|
|
58
66
|
export const command = {
|
|
@@ -63,7 +71,14 @@ export const command = {
|
|
|
63
71
|
const a = cfg.agent;
|
|
64
72
|
const template = Array.isArray(a.args) && a.args.length ? a.args : ['{prompt}'];
|
|
65
73
|
const args = template.map((s) => String(s).replaceAll('{prompt}', prompt).replaceAll('{session}', sessionId));
|
|
66
|
-
return spawnStreaming({
|
|
74
|
+
return spawnStreaming({
|
|
75
|
+
command: a.command,
|
|
76
|
+
args,
|
|
77
|
+
cwd,
|
|
78
|
+
lang: cfg.lang,
|
|
79
|
+
onChunk,
|
|
80
|
+
onExit,
|
|
81
|
+
});
|
|
67
82
|
},
|
|
68
83
|
};
|
|
69
84
|
export const adapters = { opencode, command };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/agents/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,6EAA6E;AAC7E,kEAAkE;AAClE,oFAAoF;AACpF,EAAE;AACF,6CAA6C;AAC7C,sCAAsC;AACtC,oFAAoF;AACpF,gFAAgF;AAChF,mEAAmE;AAEnE,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/agents/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/artifact.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type RenderResult = {
|
|
|
14
14
|
* Render `rooms/<room>/<artifact>` to `<artifact>.png` next to it.
|
|
15
15
|
*/
|
|
16
16
|
export declare function renderArtifact({ cfg, room, device, scale, }: {
|
|
17
|
-
cfg: Pick<Config, 'rooms' | 'roomsDir' | 'artifact'>;
|
|
17
|
+
cfg: Pick<Config, 'rooms' | 'roomsDir' | 'artifact' | 'lang'>;
|
|
18
18
|
room: string;
|
|
19
19
|
device?: string;
|
|
20
20
|
scale?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../lib/artifact.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../lib/artifact.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO5D;AAED,eAAO,MAAM,YAAY,QAAgC,CAAC;AAE1D,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAIjC;;GAEG;AACH,wBAAsB,cAAc,CAAC,EACnC,GAAG,EACH,IAAI,EACJ,MAAiB,EACjB,KAAS,GACV,EAAE;IACD,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyCxB"}
|
package/dist/lib/artifact.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// there, modelroom still works — the room just has no thumbnail.
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { stat } from 'node:fs/promises';
|
|
7
|
+
import { t } from './i18n.js';
|
|
7
8
|
export async function playwrightAvailable() {
|
|
8
9
|
try {
|
|
9
10
|
await import('playwright');
|
|
@@ -13,9 +14,7 @@ export async function playwrightAvailable() {
|
|
|
13
14
|
return false;
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
|
-
export const INSTALL_HINT = '
|
|
17
|
-
' npm install --include=dev playwright && npx playwright install chromium\n' +
|
|
18
|
-
'(modelroom works without it — the room just has no thumbnail.)';
|
|
17
|
+
export const INSTALL_HINT = t('en', 'server.installHint');
|
|
19
18
|
const WIDTHS = { sp: 390, tablet: 1024, pc: 1280 };
|
|
20
19
|
/**
|
|
21
20
|
* Render `rooms/<room>/<artifact>` to `<artifact>.png` next to it.
|
|
@@ -26,7 +25,7 @@ export async function renderArtifact({ cfg, room, device = 'tablet', scale = 2,
|
|
|
26
25
|
({ chromium } = await import('playwright'));
|
|
27
26
|
}
|
|
28
27
|
catch {
|
|
29
|
-
return { ok: false, error:
|
|
28
|
+
return { ok: false, error: t(cfg.lang, 'server.installHint') };
|
|
30
29
|
}
|
|
31
30
|
const width = WIDTHS[device] ?? 1024;
|
|
32
31
|
const src = join(cfg.roomsDir, room, cfg.artifact);
|
|
@@ -35,7 +34,12 @@ export async function renderArtifact({ cfg, room, device = 'tablet', scale = 2,
|
|
|
35
34
|
await stat(src);
|
|
36
35
|
}
|
|
37
36
|
catch {
|
|
38
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
error: t(cfg.lang, 'server.artifactNotFound', {
|
|
40
|
+
path: `${cfg.rooms}/${room}/${cfg.artifact}`,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
39
43
|
}
|
|
40
44
|
const browser = await chromium.launch();
|
|
41
45
|
try {
|
package/dist/lib/artifact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../lib/artifact.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,oFAAoF;AACpF,iEAAiE;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../lib/artifact.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type Lang } from './lang.ts';
|
|
2
|
+
export type { Lang } from './lang.ts';
|
|
3
|
+
export { isLang, LANGS } from './lang.ts';
|
|
1
4
|
export type AdapterName = 'opencode' | 'command';
|
|
2
5
|
export interface AgentConfig {
|
|
3
6
|
adapter: AdapterName;
|
|
@@ -13,15 +16,20 @@ export interface AgentConfig {
|
|
|
13
16
|
export interface Config {
|
|
14
17
|
root: string;
|
|
15
18
|
rooms: string;
|
|
19
|
+
/** Where local state lives, relative to the config file. */
|
|
20
|
+
state: string;
|
|
16
21
|
artifact: string;
|
|
17
22
|
docs: string[];
|
|
18
23
|
port: number;
|
|
19
24
|
host: string;
|
|
25
|
+
/** The language of the tool UI, the CLI and the templates. */
|
|
26
|
+
lang: Lang;
|
|
20
27
|
agent: AgentConfig;
|
|
21
|
-
/** Resolved at load time. */
|
|
28
|
+
/** Resolved at load time, all relative to the config file's directory. */
|
|
22
29
|
rootDir: string;
|
|
23
30
|
roomsDir: string;
|
|
24
31
|
configPath: string;
|
|
32
|
+
configDir: string;
|
|
25
33
|
stateDir: string;
|
|
26
34
|
statePath: string;
|
|
27
35
|
}
|
|
@@ -32,10 +40,12 @@ export interface State {
|
|
|
32
40
|
export declare const DEFAULTS: {
|
|
33
41
|
readonly root: '.';
|
|
34
42
|
readonly rooms: 'rooms';
|
|
43
|
+
readonly state: '.modelroom';
|
|
35
44
|
readonly artifact: 'index.html';
|
|
36
45
|
readonly docs: readonly ['BRIEF.md', 'SPEC.md', 'BEHAVIOUR.md'];
|
|
37
46
|
readonly port: 4321;
|
|
38
47
|
readonly host: '127.0.0.1';
|
|
48
|
+
readonly lang: Lang;
|
|
39
49
|
readonly agent: {
|
|
40
50
|
readonly adapter: 'opencode';
|
|
41
51
|
readonly command: 'opencode';
|
|
@@ -45,6 +55,12 @@ export declare const DEFAULTS: {
|
|
|
45
55
|
readonly args: readonly [];
|
|
46
56
|
};
|
|
47
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Find the committed config. The old layout keeps `modelroom.json` at the
|
|
60
|
+
* project root; a new install puts it inside `modelroom/`. The old path wins,
|
|
61
|
+
* so an existing project never changes shape underneath itself.
|
|
62
|
+
*/
|
|
63
|
+
export declare function findConfigPath(cwd?: string): Promise<string | null>;
|
|
48
64
|
export declare function loadConfig(cwd?: string): Promise<Config>;
|
|
49
65
|
export declare function loadState(cfg: Config): Promise<State>;
|
|
50
66
|
export declare function saveState(cfg: Config, state: State): Promise<void>;
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAQA,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAG9C,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,QAAQ;aACnB,IAAI,EAAE,GAAG;aACT,KAAK,EAAE,OAAO;aACd,KAAK,EAAE,YAAY;aACnB,QAAQ,EAAE,YAAY;aACtB,IAAI,YAAG,UAAU,EAAE,SAAS,EAAE,cAAc;aAC5C,IAAI,EAAE,IAAI;aACV,IAAI,EAAE,WAAW;aACjB,IAAI,EAAU,IAAI;aAClB,KAAK;iBACH,OAAO,EAAE,UAAU;iBACnB,OAAO,EAAE,UAAU;iBACnB,KAAK;iBACL,KAAK,EAAE,OAAO;iBACd,UAAU;iBACV,IAAI;;CAEE,CAAC;AAaX;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxF;AAED,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC7E;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAO3D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxE;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzB"}
|
package/dist/lib/config.js
CHANGED
|
@@ -2,15 +2,21 @@
|
|
|
2
2
|
//
|
|
3
3
|
// Config (`modelroom.json`) is committed. State (`.modelroom/state.json`) is local:
|
|
4
4
|
// chat sessions per room, and any settings changed from the UI.
|
|
5
|
-
import { readFile, writeFile, mkdir, rename } from 'node:fs/promises';
|
|
5
|
+
import { access, readFile, writeFile, mkdir, rename } from 'node:fs/promises';
|
|
6
|
+
import { constants } from 'node:fs';
|
|
6
7
|
import { dirname, join, resolve } from 'node:path';
|
|
8
|
+
import { isLang } from './lang.js';
|
|
9
|
+
import { detectLang } from './locale.js';
|
|
10
|
+
export { isLang, LANGS } from './lang.js';
|
|
7
11
|
export const DEFAULTS = {
|
|
8
12
|
root: '.',
|
|
9
13
|
rooms: 'rooms',
|
|
14
|
+
state: '.modelroom',
|
|
10
15
|
artifact: 'index.html',
|
|
11
16
|
docs: ['BRIEF.md', 'SPEC.md', 'BEHAVIOUR.md'],
|
|
12
17
|
port: 4321,
|
|
13
18
|
host: '127.0.0.1',
|
|
19
|
+
lang: 'en',
|
|
14
20
|
agent: {
|
|
15
21
|
adapter: 'opencode',
|
|
16
22
|
command: 'opencode',
|
|
@@ -20,8 +26,34 @@ export const DEFAULTS = {
|
|
|
20
26
|
args: [],
|
|
21
27
|
},
|
|
22
28
|
};
|
|
29
|
+
async function exists(path) {
|
|
30
|
+
try {
|
|
31
|
+
await access(path, constants.F_OK);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Find the committed config. The old layout keeps `modelroom.json` at the
|
|
40
|
+
* project root; a new install puts it inside `modelroom/`. The old path wins,
|
|
41
|
+
* so an existing project never changes shape underneath itself.
|
|
42
|
+
*/
|
|
43
|
+
export async function findConfigPath(cwd = process.cwd()) {
|
|
44
|
+
for (const path of [
|
|
45
|
+
resolve(cwd, 'modelroom.json'),
|
|
46
|
+
resolve(cwd, 'modelroom', 'modelroom.json'),
|
|
47
|
+
]) {
|
|
48
|
+
if (await exists(path))
|
|
49
|
+
return path;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
23
53
|
export async function loadConfig(cwd = process.cwd()) {
|
|
24
|
-
const
|
|
54
|
+
const discovered = await findConfigPath(cwd);
|
|
55
|
+
const path = discovered ?? resolve(cwd, 'modelroom.json');
|
|
56
|
+
const configDir = dirname(path);
|
|
25
57
|
let file = {};
|
|
26
58
|
try {
|
|
27
59
|
file = JSON.parse(await readFile(path, 'utf8'));
|
|
@@ -32,20 +64,24 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
32
64
|
const cfg = {
|
|
33
65
|
root: file.root ?? DEFAULTS.root,
|
|
34
66
|
rooms: file.rooms ?? DEFAULTS.rooms,
|
|
67
|
+
state: typeof file.state === 'string' && file.state ? file.state : DEFAULTS.state,
|
|
35
68
|
artifact: file.artifact ?? DEFAULTS.artifact,
|
|
36
69
|
docs: Array.isArray(file.docs) && file.docs.length ? file.docs : [...DEFAULTS.docs],
|
|
37
70
|
port: file.port ?? DEFAULTS.port,
|
|
38
71
|
host: file.host ?? DEFAULTS.host,
|
|
72
|
+
// No `lang` in the config means auto: the environment and the OS decide.
|
|
73
|
+
lang: isLang(file.lang) ? file.lang : detectLang().lang,
|
|
39
74
|
agent: { ...DEFAULTS.agent, ...file.agent },
|
|
40
75
|
rootDir: '',
|
|
41
76
|
roomsDir: '',
|
|
42
77
|
configPath: path,
|
|
78
|
+
configDir,
|
|
43
79
|
stateDir: '',
|
|
44
80
|
statePath: '',
|
|
45
81
|
};
|
|
46
|
-
cfg.rootDir = resolve(
|
|
82
|
+
cfg.rootDir = resolve(configDir, cfg.root);
|
|
47
83
|
cfg.roomsDir = resolve(cfg.rootDir, cfg.rooms);
|
|
48
|
-
cfg.stateDir =
|
|
84
|
+
cfg.stateDir = resolve(configDir, cfg.state);
|
|
49
85
|
cfg.statePath = join(cfg.stateDir, 'state.json');
|
|
50
86
|
return cfg;
|
|
51
87
|
}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,oFAAoF;AACpF,gEAAgE;AAEhE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ export type Frontmatter = Record<string, FrontmatterValue>;
|
|
|
4
4
|
export interface FrontmatterIssue {
|
|
5
5
|
code: string;
|
|
6
6
|
key?: string | null;
|
|
7
|
+
/** Values the message needs, so a reader can translate it without parsing it. */
|
|
8
|
+
params?: Record<string, string | number>;
|
|
7
9
|
message: string;
|
|
8
10
|
}
|
|
9
11
|
export interface ParsedDocument {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../lib/frontmatter.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU,OAAO,CAAC;AAI/B,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,gBAAgB,EAAE,CAAC;AACrF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAY7E;AA4DD,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,CAe5E;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAC7D,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../lib/frontmatter.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU,OAAO,CAAC;AAI/B,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,gBAAgB,EAAE,CAAC;AACrF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAY7E;AA4DD,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,CAe5E;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAC7D,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAyEA;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,CAchF;AAMD,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,EAAE,IAAiB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,OAAO,CAAC,eAAe,CAAC,CAc1B"}
|
package/dist/lib/frontmatter.js
CHANGED
|
@@ -152,13 +152,22 @@ export function parseYamlLite(raw) {
|
|
|
152
152
|
continue;
|
|
153
153
|
const m = /^([^:]+):(.*)$/.exec(line);
|
|
154
154
|
if (!m) {
|
|
155
|
-
issues.push({
|
|
155
|
+
issues.push({
|
|
156
|
+
code: 'syntax',
|
|
157
|
+
params: { line },
|
|
158
|
+
message: `not a key: value line — ${line}`,
|
|
159
|
+
});
|
|
156
160
|
continue;
|
|
157
161
|
}
|
|
158
162
|
const key = m[1].trim();
|
|
159
163
|
const value = m[2].trim();
|
|
160
164
|
if (Object.prototype.hasOwnProperty.call(data, key) || pending === key) {
|
|
161
|
-
issues.push({
|
|
165
|
+
issues.push({
|
|
166
|
+
code: 'duplicate-key',
|
|
167
|
+
key,
|
|
168
|
+
params: { key },
|
|
169
|
+
message: `duplicate key: ${key}`,
|
|
170
|
+
});
|
|
162
171
|
}
|
|
163
172
|
if (value === '') {
|
|
164
173
|
pending = key;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../lib/frontmatter.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,wBAAwB;AACxB,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,iDAAiD;AAEjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,KAAK,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../lib/frontmatter.ts"],"names":[],"mappings":"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"}
|