@brainpilot/app 0.0.5 → 0.0.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.
@@ -19,7 +19,8 @@ import { isMockMode } from "@brainpilot/runtime";
19
19
  import pc from "picocolors";
20
20
  import { resolveDataDir, dataPaths } from "../paths.js";
21
21
  import { scaffold, isScaffolded, DEFAULT_PORT } from "../scaffold.js";
22
- import { writePid } from "../process-control.js";
22
+ import { detectPromptDrift } from "./template.js";
23
+ import { writePid, writeServerState } from "../process-control.js";
23
24
  import { resolveWebDist } from "../web-dist.js";
24
25
  /** Build the StartServerOptions from resolved config — exposed for tests. */
25
26
  export function buildStartServerOptions(cfg) {
@@ -33,11 +34,26 @@ export function buildStartServerOptions(cfg) {
33
34
  // The backend creates a LocalProcessOrchestrator from env (BP_MODE=single).
34
35
  };
35
36
  }
37
+ /** Pick the right CLI invocation hint based on how the process was launched.
38
+ *
39
+ * Direct binary call → `brainpilot up --port <n>`.
40
+ *
41
+ * npm script call → `npm run <script> -- up --port <n>`. The `--` is required
42
+ * to stop npm from swallowing flags (otherwise it warns "Unknown cli config
43
+ * '--port'" and never passes them through), and the `up` subcommand has to
44
+ * follow it because the script itself only invokes `node bin.js`. */
45
+ export function portFlagHint(env = process.env) {
46
+ const script = env.npm_lifecycle_event;
47
+ if (script && script !== "npx") {
48
+ return `npm run ${script} -- up --port <n>`;
49
+ }
50
+ return "brainpilot up --port <n>";
51
+ }
36
52
  export class PortInUseError extends Error {
37
53
  port;
38
- constructor(port) {
54
+ constructor(port, hint = portFlagHint()) {
39
55
  super(`Port ${port} is already in use.\n` +
40
- " Choose another with `brainpilot up --port <n>` " +
56
+ ` Choose another with \`${hint}\` ` +
41
57
  "(the runtime uses port+1).");
42
58
  this.port = port;
43
59
  this.name = "PortInUseError";
@@ -81,6 +97,23 @@ export async function up(options = {}, deps = {}) {
81
97
  log(pc.dim(`Scaffolding ${dataDir} ...`));
82
98
  await scaffold(dataDir, { port });
83
99
  }
100
+ // 2b. Non-blocking banner if any on-disk prompt overrides have drifted from
101
+ // the in-code built-in (#102). The runtime still loads the on-disk file
102
+ // verbatim — we just surface the divergence so users notice when
103
+ // `git pull` updated a prompt they previously customised.
104
+ try {
105
+ const drift = await detectPromptDrift(dataDir);
106
+ if (drift.length > 0) {
107
+ const names = drift.map((d) => d.name).join(", ");
108
+ log(pc.yellow(`ℹ Detected ${drift.length} on-disk agent prompt override(s) diverging from built-ins: ${names}`));
109
+ log(pc.dim(" inspect: npm run bp -- template diff"));
110
+ log(pc.dim(" refresh: npm run bp -- template reset"));
111
+ log(pc.dim(" keep: ignore this notice (overrides take precedence)"));
112
+ }
113
+ }
114
+ catch {
115
+ // banner is best-effort — never fail `up` over template introspection
116
+ }
84
117
  // 3. Resolve provider key. Skipped under BP_MOCK=1 — the mock agent replaces
85
118
  // the whole Pi layer and never makes a real LLM call, so no key is needed.
86
119
  // A missing key no longer blocks launch: the backend/runtime boot lazily
@@ -112,7 +145,16 @@ export async function up(options = {}, deps = {}) {
112
145
  throw new Error("Detached `up` requires a spawnDetached hook (none provided).");
113
146
  }
114
147
  const pid = await deps.spawnDetached(cfg);
115
- await writePid(dataPaths(dataDir).backendPid, pid);
148
+ const paths = dataPaths(dataDir);
149
+ await writePid(paths.backendPid, pid);
150
+ // issue #41: persist the resolved ports so `status` (which has no --port)
151
+ // probes the real backend rather than the default. `down` removes this.
152
+ await writeServerState(paths.serverState, {
153
+ pid,
154
+ port: cfg.port,
155
+ runtimePort: cfg.runtimePort,
156
+ host: cfg.host,
157
+ });
116
158
  log(pc.green(`BrainPilot backend started (pid ${pid}) at ${pc.bold(url)}`));
117
159
  if (open)
118
160
  await maybeOpen(deps, url);
@@ -1 +1 @@
1
- {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"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"}
package/dist/paths.d.ts CHANGED
@@ -32,6 +32,8 @@ export interface DataPaths {
32
32
  runtimeLog: string;
33
33
  backendPid: string;
34
34
  runtimePid: string;
35
+ /** Runtime state for a detached server (resolved ports/pid) — issue #41. */
36
+ serverState: string;
35
37
  }
36
38
  /** Build all derived paths from a data dir. Pure — no filesystem access. */
37
39
  export declare function dataPaths(dataDir: string): DataPaths;
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAQ1E;AAED,2DAA2D;AAC3D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAuBpD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,OAAO,GAAE,qBAA0B,GAAG,SAAS,CAE3E"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAQ1E;AAED,2DAA2D;AAC3D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAwBpD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,OAAO,GAAE,qBAA0B,GAAG,SAAS,CAE3E"}
package/dist/paths.js CHANGED
@@ -44,6 +44,7 @@ export function dataPaths(dataDir) {
44
44
  runtimeLog: join(logsDir, "runtime.log"),
45
45
  backendPid: join(runtimeDir, "backend.pid"),
46
46
  runtimePid: join(runtimeDir, "runtime.pid"),
47
+ serverState: join(runtimeDir, "server.json"),
47
48
  };
48
49
  }
49
50
  /** Convenience: resolve data dir + derived paths in one call. */
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAW1C,qEAAqE;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AAC7C,CAAC;AAuBD,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO;QACL,OAAO;QACP,UAAU;QACV,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5C,kBAAkB,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;QACrD,mBAAmB,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC;QACvD,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAC1D,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5C,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACxB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QACvC,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;QACzD,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAC7B,UAAU;QACV,OAAO;QACP,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACxC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACxC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;QAC3C,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,UAAiC,EAAE;IAC9D,OAAO,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAW1C,qEAAqE;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AAC7C,CAAC;AAyBD,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO;QACL,OAAO;QACP,UAAU;QACV,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5C,kBAAkB,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;QACrD,mBAAmB,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC;QACvD,oBAAoB,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAC1D,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5C,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QACxB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QACvC,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;QACzD,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAC7B,UAAU;QACV,OAAO;QACP,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACxC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACxC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;QAC3C,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,UAAiC,EAAE;IAC9D,OAAO,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -12,6 +12,23 @@ export declare function writePid(pidFile: string, pid: number): Promise<void>;
12
12
  export declare function readPid(pidFile: string): Promise<number | null>;
13
13
  /** Remove a pid file (no error if absent). */
14
14
  export declare function removePid(pidFile: string): Promise<void>;
15
+ /**
16
+ * Persisted runtime state for a detached server (issue #41). Written by `up`,
17
+ * read by `status` so it reports the actual ports without a repeated `--port`,
18
+ * removed by `down`.
19
+ */
20
+ export interface ServerState {
21
+ pid: number;
22
+ port: number;
23
+ runtimePort: number;
24
+ host: string;
25
+ }
26
+ /** Write the detached server state file, creating parent dirs. */
27
+ export declare function writeServerState(stateFile: string, state: ServerState): Promise<void>;
28
+ /** Read the detached server state, or null if missing/unparseable. */
29
+ export declare function readServerState(stateFile: string): Promise<ServerState | null>;
30
+ /** Remove the detached server state file (no error if absent). */
31
+ export declare function removeServerState(stateFile: string): Promise<void>;
15
32
  /** Is the process recorded in `pidFile` currently alive? */
16
33
  export declare function isRunning(pidFile: string, deps?: ProcessControlDeps): Promise<boolean>;
17
34
  export interface StopResult {
@@ -1 +1 @@
1
- {"version":3,"file":"process-control.d.ts","sourceRoot":"","sources":["../src/process-control.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACpD,yCAAyC;IACzC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAmBD,mDAAmD;AACnD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,8DAA8D;AAC9D,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQrE;AAED,8CAA8C;AAC9C,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,4DAA4D;AAC5D,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAuB,GACzE,OAAO,CAAC,UAAU,CAAC,CA2CrB"}
1
+ {"version":3,"file":"process-control.d.ts","sourceRoot":"","sources":["../src/process-control.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACpD,yCAAyC;IACzC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAmBD,mDAAmD;AACnD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1E;AAED,8DAA8D;AAC9D,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQrE;AAED,8CAA8C;AAC9C,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kEAAkE;AAClE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,sEAAsE;AACtE,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgB7B;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE;AAED,4DAA4D;AAC5D,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAuB,GACzE,OAAO,CAAC,UAAU,CAAC,CA2CrB"}
@@ -39,6 +39,32 @@ export async function readPid(pidFile) {
39
39
  export async function removePid(pidFile) {
40
40
  await rm(pidFile, { force: true });
41
41
  }
42
+ /** Write the detached server state file, creating parent dirs. */
43
+ export async function writeServerState(stateFile, state) {
44
+ await mkdir(dirname(stateFile), { recursive: true });
45
+ await writeFile(stateFile, JSON.stringify(state), "utf8");
46
+ }
47
+ /** Read the detached server state, or null if missing/unparseable. */
48
+ export async function readServerState(stateFile) {
49
+ try {
50
+ const raw = await readFile(stateFile, "utf8");
51
+ const parsed = JSON.parse(raw);
52
+ if (typeof parsed.port === "number" &&
53
+ typeof parsed.runtimePort === "number" &&
54
+ typeof parsed.host === "string" &&
55
+ typeof parsed.pid === "number") {
56
+ return parsed;
57
+ }
58
+ return null;
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ /** Remove the detached server state file (no error if absent). */
65
+ export async function removeServerState(stateFile) {
66
+ await rm(stateFile, { force: true });
67
+ }
42
68
  /** Is the process recorded in `pidFile` currently alive? */
43
69
  export async function isRunning(pidFile, deps = {}) {
44
70
  const pid = await readPid(pidFile);
@@ -1 +1 @@
1
- {"version":3,"file":"process-control.js","sourceRoot":"","sources":["../src/process-control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-control.js","sourceRoot":"","sources":["../src/process-control.ts"],"names":[],"mappings":"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"}
package/dist/program.d.ts CHANGED
@@ -9,6 +9,7 @@ import { down } from "./commands/down.js";
9
9
  import { status } from "./commands/status.js";
10
10
  import { init } from "./commands/init.js";
11
11
  import { logs } from "./commands/logs.js";
12
+ import { runList, runDiff, runReset } from "./commands/template.js";
12
13
  /** Hooks injectable for tests so `run()` never touches a real server/process. */
13
14
  export interface ProgramDeps {
14
15
  upFn?: typeof up;
@@ -16,6 +17,9 @@ export interface ProgramDeps {
16
17
  statusFn?: typeof status;
17
18
  initFn?: typeof init;
18
19
  logsFn?: typeof logs;
20
+ templateListFn?: typeof runList;
21
+ templateDiffFn?: typeof runDiff;
22
+ templateResetFn?: typeof runReset;
19
23
  log?: (msg: string) => void;
20
24
  /** Override process.exit (tests). */
21
25
  onError?: (err: Error) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAiBD,wBAAgB,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAqF5D;AAED;;;;GAIG;AACH,wBAAsB,GAAG,CACvB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGpE,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,QAAQ,CAAC;IAClC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAiBD,wBAAgB,YAAY,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAqH5D;AAED;;;;GAIG;AACH,wBAAsB,GAAG,CACvB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
package/dist/program.js CHANGED
@@ -11,6 +11,7 @@ import { down } from "./commands/down.js";
11
11
  import { status } from "./commands/status.js";
12
12
  import { init } from "./commands/init.js";
13
13
  import { logs } from "./commands/logs.js";
14
+ import { runList, runDiff, runReset } from "./commands/template.js";
14
15
  import { spawnDetachedBackend } from "./spawn-backend.js";
15
16
  function parsePort(value) {
16
17
  const n = Number.parseInt(value, 10);
@@ -32,6 +33,9 @@ export function buildProgram(deps = {}) {
32
33
  const statusFn = deps.statusFn ?? status;
33
34
  const initFn = deps.initFn ?? init;
34
35
  const logsFn = deps.logsFn ?? logs;
36
+ const templateListFn = deps.templateListFn ?? runList;
37
+ const templateDiffFn = deps.templateDiffFn ?? runDiff;
38
+ const templateResetFn = deps.templateResetFn ?? runReset;
35
39
  program
36
40
  .name("brainpilot")
37
41
  .description("BrainPilot — Docker-free local launcher (§11A)")
@@ -84,6 +88,31 @@ export function buildProgram(deps = {}) {
84
88
  model: opts.model,
85
89
  });
86
90
  });
91
+ const template = program
92
+ .command("template")
93
+ .description("Inspect and manage on-disk agent prompt overrides (bp_template/agents/<name>/prompt.md)");
94
+ template
95
+ .command("list")
96
+ .description("Show drift status of every built-in agent's prompt")
97
+ .option("-d, --dir <path>", "data directory (default ./brainpilot)")
98
+ .action(async (opts) => {
99
+ await templateListFn({ dir: opts.dir });
100
+ });
101
+ template
102
+ .command("diff [agent]")
103
+ .description("Show local-vs-built-in diff for drifted agents (or one named agent)")
104
+ .option("-d, --dir <path>", "data directory (default ./brainpilot)")
105
+ .action(async (agent, opts) => {
106
+ await templateDiffFn({ dir: opts.dir, agent });
107
+ });
108
+ template
109
+ .command("reset [agent]")
110
+ .description("Overwrite local prompt(s) with the built-in version (backs up any existing file)")
111
+ .option("-d, --dir <path>", "data directory (default ./brainpilot)")
112
+ .option("-y, --yes", "skip the confirmation prompt", false)
113
+ .action(async (agent, opts) => {
114
+ await templateResetFn({ dir: opts.dir, agent, yes: opts.yes });
115
+ });
87
116
  program
88
117
  .command("logs")
89
118
  .description("Tail the backend/runtime logs")
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface AssertRepoCwdOptions {
2
+ /** argv slice (no node + script). */
3
+ argv?: readonly string[];
4
+ /** Environment (defaults to `process.env`). */
5
+ env?: Record<string, string | undefined>;
6
+ /** Override for tests. */
7
+ cwd?: string;
8
+ /** Absolute path to the running bin.js (defaults to import.meta.url resolver). */
9
+ binPath?: string;
10
+ /** Sink for the error message (defaults to console.error). */
11
+ stderr?: (msg: string) => void;
12
+ /** Exit hook (defaults to process.exit). */
13
+ exit?: (code: number) => never;
14
+ }
15
+ /**
16
+ * Verify cwd is the BrainPilot repo root. Exits the process (code 2) with a
17
+ * Chinese-language explanation when it isn't. Returns normally on success or
18
+ * when an escape-hatch condition applies.
19
+ */
20
+ export declare function assertRepoCwd(options?: AssertRepoCwdOptions): void;
21
+ //# sourceMappingURL=repo-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-mode.d.ts","sourceRoot":"","sources":["../src/repo-mode.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAChC;AAcD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,IAAI,CAkCtE"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * repo-mode.ts — assert the CLI is being run from the BrainPilot repo root.
3
+ *
4
+ * The supported launch shape today is `npm run bp -- <cmd>` from the cloned
5
+ * repo's root directory. Running from any other cwd is rejected because:
6
+ *
7
+ * - `paths.resolveDataDir` defaults to `<cwd>/brainpilot`, so a foreign cwd
8
+ * would silently spawn an isolated data dir nowhere near the repo (#102 had
9
+ * a sibling-of: configs and prompts that were supposed to update with
10
+ * `git pull` instead live next to wherever the user happened to cd to).
11
+ * - Doc/CLAUDE.md says "must run from <repo>", and we want that to be a
12
+ * hard contract, not a hope.
13
+ *
14
+ * Detection is "the bin.js you are currently running came from $cwd/packages/
15
+ * cli/dist/bin.js" — comparing realpaths defeats symlinks and ./node_modules/
16
+ * .bin hoisting. The check is conservatively skipped when the caller has
17
+ * pinned the data dir explicitly (`--dir` / `BP_DATA_DIR` / `BP_DATA_ROOT`)
18
+ * or set the env escape hatch `BP_ALLOW_FOREIGN_CWD=1`; those paths are
19
+ * dev/CI/test scenarios where the cwd-is-repo assumption legitimately doesn't
20
+ * hold.
21
+ */
22
+ import { realpathSync } from "node:fs";
23
+ import { resolve } from "node:path";
24
+ import { fileURLToPath } from "node:url";
25
+ /** Lookup of argv flags that pin the data dir explicitly (skip the cwd guard). */
26
+ const EXPLICIT_DIR_FLAGS = new Set(["-d", "--dir"]);
27
+ function hasExplicitDirFlag(argv) {
28
+ for (let i = 0; i < argv.length; i++) {
29
+ const a = argv[i];
30
+ if (EXPLICIT_DIR_FLAGS.has(a))
31
+ return true;
32
+ if (a.startsWith("--dir=") || a.startsWith("-d="))
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ /**
38
+ * Compare two paths via realpath; returns false if either side is missing.
39
+ * `realpathSync` is sync to keep this off any startup-async race.
40
+ */
41
+ function samePath(a, b) {
42
+ try {
43
+ return realpathSync(a) === realpathSync(b);
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Verify cwd is the BrainPilot repo root. Exits the process (code 2) with a
51
+ * Chinese-language explanation when it isn't. Returns normally on success or
52
+ * when an escape-hatch condition applies.
53
+ */
54
+ export function assertRepoCwd(options = {}) {
55
+ const argv = options.argv ?? process.argv.slice(2);
56
+ const env = options.env ?? process.env;
57
+ const cwd = options.cwd ?? process.cwd();
58
+ const binPath = options.binPath ?? fileURLToPath(new URL("./bin.js", import.meta.url));
59
+ const stderr = options.stderr ?? ((m) => console.error(m));
60
+ const exit = options.exit ?? ((c) => process.exit(c));
61
+ // Escape hatches: explicit data dir means the user has opted out of the
62
+ // "cwd is the repo" assumption — let them through.
63
+ if (env.BP_ALLOW_FOREIGN_CWD === "1")
64
+ return;
65
+ if (env.BP_DATA_DIR?.trim())
66
+ return;
67
+ if (env.BP_DATA_ROOT?.trim())
68
+ return;
69
+ if (hasExplicitDirFlag(argv))
70
+ return;
71
+ const expected = resolve(cwd, "packages/cli/dist/bin.js");
72
+ if (samePath(expected, binPath))
73
+ return;
74
+ stderr([
75
+ "✗ brainpilot 必须在仓库根目录运行 (当前 cwd 不是 BrainPilotPi 仓库根)",
76
+ ` cwd = ${cwd}`,
77
+ ` bin.js = ${binPath}`,
78
+ "",
79
+ " 请 `cd` 到 BrainPilotPi 仓库根目录后再执行 `npm run bp -- ...`。",
80
+ " 这样配置随 `git pull` 自动更新, 且 dataDir (bp_template/, workspaces/) 不漂移。",
81
+ "",
82
+ " 例外情况 (开发 / CI):",
83
+ " - 用 `--dir <path>` 显式指定数据目录",
84
+ " - 或设置 BP_DATA_DIR=<path> 环境变量",
85
+ " - 或设置 BP_ALLOW_FOREIGN_CWD=1 强制绕过此检查",
86
+ ].join("\n"));
87
+ exit(2);
88
+ }
89
+ //# sourceMappingURL=repo-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-mode.js","sourceRoot":"","sources":["../src/repo-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpD,SAAS,kBAAkB,CAAC,IAAuB;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAiBD;;;GAGG;AACH,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU,CAAC,CAAC;IAEvE,wEAAwE;IACxE,mDAAmD;IACnD,IAAI,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAAE,OAAO;IAC7C,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,OAAO;IACpC,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE;QAAE,OAAO;IACrC,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAE,OAAO;IAExC,MAAM,CACJ;QACE,sDAAsD;QACtD,kBAAkB,GAAG,EAAE;QACvB,kBAAkB,OAAO,EAAE;QAC3B,EAAE;QACF,wDAAwD;QACxD,qEAAqE;QACrE,EAAE;QACF,mBAAmB;QACnB,iCAAiC;QACjC,mCAAmC;QACnC,0CAA0C;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,IAAI,CAAC,CAAC,CAAC,CAAC;AACV,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,OAAO,CAAC;AA8MjC,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA0DzB;AAED,kFAAkF;AAClF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,OAAO,CAAC;AA+KjC,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAwDzB;AAED,kFAAkF;AAClF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE"}