@monban-online/cli 0.1.0 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,21 @@
1
1
  import { apiPost } from "../api/client.js";
2
- import { readCounterFiles } from "../workspace/counter-files.js";
2
+ import { ensureCounterFiles } from "../workspace/counter-files.js";
3
3
  export function registerCreateCounterCommand(program) {
4
4
  const create = program.command("create").description("Create monban resources.");
5
5
  create
6
6
  .command("counter")
7
- .description("Create a counter from local settings.yaml, TRIGGERS.md, and SYSTEM_PROMPT.md.")
7
+ .description("Create a counter from local files, creating starter files if none exist.")
8
8
  .argument("<counterId>")
9
9
  .option("--root <path>", "project root", process.cwd())
10
10
  .action(async (counterId, options) => {
11
- const files = await readCounterFiles(counterId, options.root);
11
+ const { files, created } = await ensureCounterFiles(counterId, options.root);
12
12
  await apiPost("/api/cli/counters", {
13
13
  counterId,
14
14
  ...files,
15
15
  });
16
+ if (created) {
17
+ console.log(`Created starter files in monban/counters/${counterId}`);
18
+ }
16
19
  console.log(`Created ${counterId}`);
17
20
  });
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-counter.js","sourceRoot":"","sources":["../../src/commands/create-counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IACjF,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+EAA+E,CAAC;SAC5F,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,OAAO,CAAC,mBAAmB,EAAE;YACjC,SAAS;YACT,GAAG,KAAK;SACT,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"create-counter.js","sourceRoot":"","sources":["../../src/commands/create-counter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IACjF,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC;SACvF,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,OAAO,CAA2B,mBAAmB,EAAE;YAC3D,SAAS;YACT,GAAG,KAAK;SACT,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -14,6 +14,7 @@ export function registerDeleteCounterCommand(program) {
14
14
  }
15
15
  await apiDelete(`/api/cli/counters/${encodeURIComponent(counterId)}`);
16
16
  console.log(`Deleted ${counterId}`);
17
+ console.log(`Local files were not removed. Run \`monban doctor --online\` to find stale local counters.`);
17
18
  });
18
19
  }
19
20
  //# sourceMappingURL=delete-counter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete-counter.js","sourceRoot":"","sources":["../../src/commands/delete-counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,aAAa,GAAG,OAAO;SAC1B,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAC3C,aAAa;SACV,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA0B,EAAE,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,SAAS,CAAC,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"delete-counter.js","sourceRoot":"","sources":["../../src/commands/delete-counter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,aAAa,GAAG,OAAO;SAC1B,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAC3C,aAAa;SACV,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA0B,EAAE,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,SAAS,CACb,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CACrD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,4FAA4F,CAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,273 @@
1
+ import { access, readdir, readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { apiGet } from "../api/client.js";
4
+ import { counterDir, inquiryDir, stateFile, workspaceRoot } from "../workspace/layout.js";
5
+ const COUNTER_FILE_NAMES = [
6
+ "settings.yaml",
7
+ "TRIGGERS.md",
8
+ "SYSTEM_PROMPT.md",
9
+ ];
10
+ export function registerDoctorCommand(program) {
11
+ program
12
+ .command("doctor")
13
+ .description("Diagnose the local Monban workspace and show next steps.")
14
+ .option("--root <path>", "project root", process.cwd())
15
+ .option("--online", "also compare local counters with counters on Monban")
16
+ .action(async (options) => {
17
+ const report = await inspectWorkspace(options.root, { online: options.online });
18
+ console.log(formatDoctorReport(report));
19
+ if (report.checks.some((check) => check.status === "fail")) {
20
+ process.exitCode = 1;
21
+ }
22
+ });
23
+ }
24
+ export async function inspectWorkspace(root = process.cwd(), options = {}) {
25
+ const resolvedRoot = path.resolve(root);
26
+ const checks = [];
27
+ checks.push({
28
+ status: (await pathExists(resolvedRoot)) ? "ok" : "fail",
29
+ title: "project root",
30
+ detail: resolvedRoot,
31
+ });
32
+ const workspace = workspaceRoot(resolvedRoot);
33
+ const hasWorkspace = await pathExists(workspace);
34
+ checks.push({
35
+ status: hasWorkspace ? "ok" : "fail",
36
+ title: "monban workspace",
37
+ detail: workspace,
38
+ next: hasWorkspace ? undefined : "Run: monban init",
39
+ });
40
+ const hasState = await pathExists(stateFile(resolvedRoot));
41
+ checks.push({
42
+ status: hasState ? "ok" : "warn",
43
+ title: "workspace state",
44
+ detail: stateFile(resolvedRoot),
45
+ next: hasState ? undefined : "Run: monban init",
46
+ });
47
+ const counterIds = await listCounterIds(resolvedRoot);
48
+ checks.push(await counterFilesCheck(resolvedRoot, counterIds));
49
+ if (options.online) {
50
+ checks.push(await remoteCountersCheck(counterIds, options.fetchCounters));
51
+ }
52
+ checks.push(await embedCheck(resolvedRoot));
53
+ checks.push(await inquiryCheck(resolvedRoot, counterIds));
54
+ return { root: resolvedRoot, workspace, checks };
55
+ }
56
+ export function formatDoctorReport(report) {
57
+ const lines = [
58
+ "Monban doctor",
59
+ "",
60
+ `Project root: ${report.root}`,
61
+ `Workspace: ${report.workspace}`,
62
+ "",
63
+ "Checks:",
64
+ ];
65
+ for (const check of report.checks) {
66
+ lines.push(` [${check.status}] ${check.title}`);
67
+ if (check.detail)
68
+ lines.push(` ${check.detail}`);
69
+ if (check.next)
70
+ lines.push(` Next: ${check.next}`);
71
+ }
72
+ const nextSteps = report.checks
73
+ .map((check) => check.next)
74
+ .filter((next) => Boolean(next));
75
+ if (nextSteps.length > 0) {
76
+ lines.push("", "Suggested next steps:");
77
+ for (const next of [...new Set(nextSteps)]) {
78
+ lines.push(` - ${next}`);
79
+ }
80
+ }
81
+ return lines.join("\n");
82
+ }
83
+ async function remoteCountersCheck(localCounterIds, fetchCounters = () => apiGet("/api/cli/counters")) {
84
+ let remote;
85
+ try {
86
+ remote = await fetchCounters();
87
+ }
88
+ catch (error) {
89
+ const message = error instanceof Error ? error.message : "remote counter check failed";
90
+ return {
91
+ status: "warn",
92
+ title: "remote counters",
93
+ detail: `Unable to check counters on Monban: ${message}`,
94
+ next: "Run: monban login, then retry: monban doctor --online",
95
+ };
96
+ }
97
+ const remoteIds = new Set(remote.counters.map((counter) => counter.id));
98
+ const missingRemote = localCounterIds.filter((counterId) => !remoteIds.has(counterId));
99
+ if (localCounterIds.length === 0) {
100
+ if (remote.counters.length === 0) {
101
+ return {
102
+ status: "ok",
103
+ title: "remote counters",
104
+ detail: "No counters found locally or on Monban.",
105
+ };
106
+ }
107
+ return {
108
+ status: "warn",
109
+ title: "remote counters",
110
+ detail: `No local counters. Monban account has ${remote.counters.length} counter(s).`,
111
+ next: "Run: monban pull counter <counterId>, or create a new one with: monban create counter <counterId>",
112
+ };
113
+ }
114
+ if (missingRemote.length === 0) {
115
+ return {
116
+ status: "ok",
117
+ title: "remote counters",
118
+ detail: `Local counters exist on Monban: ${localCounterIds.join(", ")}`,
119
+ };
120
+ }
121
+ return {
122
+ status: "warn",
123
+ title: "remote counters",
124
+ detail: `Local counters not found on Monban: ${missingRemote.join(", ")}`,
125
+ next: "Remove stale local counter files, or recreate the counter with: monban create counter <counterId>",
126
+ };
127
+ }
128
+ async function counterFilesCheck(root, counterIds) {
129
+ if (counterIds.length === 0) {
130
+ return {
131
+ status: "warn",
132
+ title: "counter files",
133
+ detail: "No local counters found under monban/counters.",
134
+ next: "Run: monban create counter <counterId>",
135
+ };
136
+ }
137
+ const incomplete = [];
138
+ for (const counterId of counterIds) {
139
+ const missing = [];
140
+ for (const fileName of COUNTER_FILE_NAMES) {
141
+ if (!(await pathExists(path.join(counterDir(counterId, root), fileName)))) {
142
+ missing.push(fileName);
143
+ }
144
+ }
145
+ if (missing.length > 0) {
146
+ incomplete.push(`${counterId}: missing ${missing.join(", ")}`);
147
+ }
148
+ }
149
+ if (incomplete.length > 0) {
150
+ return {
151
+ status: "fail",
152
+ title: "counter files",
153
+ detail: incomplete.join("; "),
154
+ next: "Complete the three counter files, or run: monban pull counter <counterId>",
155
+ };
156
+ }
157
+ return {
158
+ status: "ok",
159
+ title: "counter files",
160
+ detail: `Found complete local files for: ${counterIds.join(", ")}`,
161
+ };
162
+ }
163
+ async function embedCheck(root) {
164
+ const htmlFiles = await findHtmlFiles(root);
165
+ const embedded = [];
166
+ for (const file of htmlFiles) {
167
+ const source = await readFile(file, "utf8");
168
+ if (source.includes("/embed.js") && source.includes("data-counter-id=")) {
169
+ embedded.push(path.relative(root, file));
170
+ }
171
+ }
172
+ if (embedded.length > 0) {
173
+ return {
174
+ status: "ok",
175
+ title: "embed script",
176
+ detail: `Installed in: ${embedded.join(", ")}`,
177
+ };
178
+ }
179
+ const snippetFile = path.join(workspaceRoot(root), "embed-snippet.html");
180
+ if (await pathExists(snippetFile)) {
181
+ return {
182
+ status: "warn",
183
+ title: "embed script",
184
+ detail: `Snippet exists at ${snippetFile}, but no checked HTML file contains it.`,
185
+ next: "Run: monban install script <counterId> --file index.html",
186
+ };
187
+ }
188
+ return {
189
+ status: "warn",
190
+ title: "embed script",
191
+ detail: "No embed script found in local HTML files.",
192
+ next: "Run: monban install script <counterId> --file index.html",
193
+ };
194
+ }
195
+ async function inquiryCheck(root, counterIds) {
196
+ if (counterIds.length === 0) {
197
+ return {
198
+ status: "warn",
199
+ title: "inquiry sync",
200
+ detail: "No local counter exists yet.",
201
+ next: "Create or pull a counter, then run: monban sync inquiries <counterId>",
202
+ };
203
+ }
204
+ const synced = [];
205
+ for (const counterId of counterIds) {
206
+ if (await pathExists(path.join(inquiryDir(counterId, root), "status.json"))) {
207
+ synced.push(counterId);
208
+ }
209
+ }
210
+ if (synced.length === 0) {
211
+ return {
212
+ status: "warn",
213
+ title: "inquiry sync",
214
+ detail: "No status.json files found under monban/inquiries.",
215
+ next: "Run: monban sync inquiries <counterId>",
216
+ };
217
+ }
218
+ return {
219
+ status: "ok",
220
+ title: "inquiry sync",
221
+ detail: "Found status.json for: " +
222
+ synced.join(", ") +
223
+ ". messages.jsonl appears after the first synced message.",
224
+ };
225
+ }
226
+ async function listCounterIds(root) {
227
+ const countersRoot = path.join(workspaceRoot(root), "counters");
228
+ const entries = await readdir(countersRoot, { withFileTypes: true }).catch((error) => {
229
+ if (isNotFound(error))
230
+ return [];
231
+ throw error;
232
+ });
233
+ return entries
234
+ .filter((entry) => entry.isDirectory())
235
+ .map((entry) => entry.name)
236
+ .sort();
237
+ }
238
+ async function findHtmlFiles(root) {
239
+ const output = [];
240
+ await collectHtmlFiles(root, output, 0);
241
+ return output.sort();
242
+ }
243
+ async function collectHtmlFiles(dir, output, depth) {
244
+ if (depth > 4)
245
+ return;
246
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
247
+ for (const entry of entries) {
248
+ if (entry.name === ".git" || entry.name === "node_modules" || entry.name === "monban") {
249
+ continue;
250
+ }
251
+ const file = path.join(dir, entry.name);
252
+ if (entry.isDirectory()) {
253
+ await collectHtmlFiles(file, output, depth + 1);
254
+ continue;
255
+ }
256
+ if (entry.isFile() && entry.name.toLowerCase().endsWith(".html")) {
257
+ output.push(file);
258
+ }
259
+ }
260
+ }
261
+ async function pathExists(file) {
262
+ try {
263
+ await access(file);
264
+ return true;
265
+ }
266
+ catch {
267
+ return false;
268
+ }
269
+ }
270
+ function isNotFound(error) {
271
+ return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
272
+ }
273
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export const guideText = `Monban guide
2
+
3
+ Monban lets you add an AI-assisted contact window to a website with one script
4
+ tag. You manage each window from a local workspace so your coding agent can
5
+ read, edit, sync, and review the files.
6
+
7
+ Core ideas:
8
+ - A counter is one chat window.
9
+ - Bot mode starts first. It does not call an LLM and does not save chat logs.
10
+ - AI mode starts after the visitor signs in. AI-mode messages are saved so you
11
+ can sync inquiries into your local workspace.
12
+ - A counter is managed by three files:
13
+ monban/counters/{counterId}/settings.yaml
14
+ monban/counters/{counterId}/TRIGGERS.md
15
+ monban/counters/{counterId}/SYSTEM_PROMPT.md
16
+ - Inquiry sync writes local files:
17
+ monban/inquiries/{counterId}/messages.jsonl
18
+ monban/inquiries/{counterId}/status.json
19
+ monban/state.json
20
+
21
+ First-run flow:
22
+ If monban is not on PATH, prefix the same commands with:
23
+ npx --yes @monban-online/cli@latest
24
+
25
+ 1. Confirm auth:
26
+ monban whoami
27
+ npx --yes @monban-online/cli@latest whoami
28
+
29
+ 2. Create the local workspace:
30
+ monban init
31
+
32
+ 3. If the counter already exists on Monban, pull its files:
33
+ monban pull counter <counterId>
34
+
35
+ 4. If this is a new counter, create the three local counter files first, then
36
+ create it on Monban:
37
+ monban create counter <counterId>
38
+
39
+ If no local files exist yet, create counter writes starter settings.yaml,
40
+ TRIGGERS.md, and SYSTEM_PROMPT.md first. Review and edit those files with
41
+ your coding agent, then run:
42
+ monban push counter <counterId>
43
+
44
+ 5. Install the script into a site file:
45
+ monban install script <counterId> --file index.html
46
+
47
+ Without --file, Monban writes a copyable snippet to:
48
+ monban/embed-snippet.html
49
+
50
+ 6. Sync new AI-mode inquiry messages:
51
+ monban sync inquiries <counterId>
52
+
53
+ If there are no messages yet, status.json may exist while messages.jsonl
54
+ is still absent. messages.jsonl appears after the first synced message.
55
+
56
+ Useful checks:
57
+ - monban doctor
58
+ - monban doctor --online
59
+ - monban list counters
60
+ - monban status inquiry <inquiryId> resolved --counter <counterId>
61
+
62
+ Cleanup note:
63
+ - monban delete counter <counterId> --yes removes the counter from Monban,
64
+ but it keeps local files so accidental local data loss does not happen.
65
+ Use monban doctor --online to find local counters that no longer exist on
66
+ Monban.
67
+
68
+ Production runtime:
69
+ - Counter page: https://app.monban.online/counters/{counterId}
70
+ - Embed page: https://app.monban.online/embed/{counterId}
71
+ - Script: https://app.monban.online/embed.js
72
+ `;
73
+ export function registerGuideCommand(program) {
74
+ program
75
+ .command("guide")
76
+ .description("Show the Monban onboarding guide for installers and agents.")
77
+ .action(() => {
78
+ console.log(guideText.trimEnd());
79
+ });
80
+ }
81
+ //# sourceMappingURL=guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/commands/guide.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuExB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-counters.js","sourceRoot":"","sources":["../../src/commands/list-counters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAa1C,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3E,IAAI;SACD,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAuB,mBAAmB,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CACT,GAAG,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAC7G,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"list-counters.js","sourceRoot":"","sources":["../../src/commands/list-counters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3E,IAAI;SACD,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAA0B,mBAAmB,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CACT,GAAG,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAC7G,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pull-counter.js","sourceRoot":"","sources":["../../src/commands/pull-counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA6B,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3E,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CACxB,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAC3D,CAAC;QACF,MAAM,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"pull-counter.js","sourceRoot":"","sources":["../../src/commands/pull-counter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3E,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CACxB,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAC3D,CAAC;QACF,MAAM,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"push-counter.js","sourceRoot":"","sources":["../../src/commands/push-counter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAC/E,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,CAAC,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"push-counter.js","sourceRoot":"","sources":["../../src/commands/push-counter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAC/E,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyB,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,CACV,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAC1D,KAAK,CACN,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-inquiries.js","sourceRoot":"","sources":["../../src/commands/sync-inquiries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAgC,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACtE,IAAI;SACD,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,CAAC;SAC1D,MAAM,CACL,KAAK,EACH,SAAiB,EACjB,OAAwC,EACxC,EAAE;QACF,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,GAClB,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,cAAc,IAAI,SAAS,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,cAAc;YAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,qBAAqB,MAAM,EAAE,CAChF,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC;YACxC,SAAS;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,QAAQ,qBAAqB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC,CACF,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"sync-inquiries.js","sourceRoot":"","sources":["../../src/commands/sync-inquiries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACtE,IAAI;SACD,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,aAAa,CAAC;SACvB,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACtD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,CAAC;SAC1D,MAAM,CACL,KAAK,EACH,SAAiB,EACjB,OAAwC,EACxC,EAAE;QACF,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,GAClB,KAAK,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,cAAc,IAAI,SAAS,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,cAAc;YAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,qBAAqB,MAAM,EAAE,CAChF,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC;YACxC,SAAS;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,QAAQ,qBAAqB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAuB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAiB,iBAAiB,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAoB,iBAAiB,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
+ import { registerDoctorCommand } from "./commands/doctor.js";
4
+ import { registerGuideCommand } from "./commands/guide.js";
3
5
  import { registerInitCommand } from "./commands/init.js";
4
6
  import { registerInstallScriptCommand } from "./commands/install-script.js";
5
7
  import { registerListCountersCommand } from "./commands/list-counters.js";
@@ -16,7 +18,9 @@ const program = new Command();
16
18
  program
17
19
  .name("monban")
18
20
  .description("Manage monban counters from a local workspace.")
19
- .version("0.1.0");
21
+ .version("0.1.4");
22
+ registerGuideCommand(program);
23
+ registerDoctorCommand(program);
20
24
  registerLoginCommand(program);
21
25
  registerLogoutCommand(program);
22
26
  registerWhoamiCommand(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAEtC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;IACxC,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAEtC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;IACxC,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,41 @@
1
1
  import { mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { counterDir } from "./layout.js";
3
+ import { counterDir, isNotFound } from "./layout.js";
4
+ const COUNTER_FILE_NAMES = [
5
+ "settings.yaml",
6
+ "TRIGGERS.md",
7
+ "SYSTEM_PROMPT.md",
8
+ ];
9
+ export function starterCounterFiles(counterId) {
10
+ const displayName = counterId
11
+ .split("-")
12
+ .filter(Boolean)
13
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
14
+ .join(" ");
15
+ return {
16
+ settingsYaml: `name: ${displayName || counterId}\n` +
17
+ "model: meta-llama/llama-3.3-70b-instruct:free\n" +
18
+ "monthly_token_limit: 100000\n" +
19
+ "per_conversation_token_limit: 8000\n",
20
+ triggersMd: "# start\n" +
21
+ "Thanks for visiting. Choose how you would like to continue.\n\n" +
22
+ "<Choices>\n" +
23
+ ' <Choice next="request_ai_chat" label="Ask AI" description="Continue in AI mode after Google OAuth." />\n' +
24
+ ' <Choice next="end" label="Close" description="End this chat for now." />\n' +
25
+ "</Choices>\n\n" +
26
+ "# blocklist_match\n" +
27
+ "This contact window is not available right now.\n\n" +
28
+ "# flagged_match\n" +
29
+ "This contact window is temporarily unavailable.\n\n" +
30
+ "# monthly_token_limit_exceeded\n" +
31
+ "This contact window has reached its monthly AI usage limit.\n\n" +
32
+ "# per_conversation_token_limit_exceeded\n" +
33
+ "This conversation has reached its AI usage limit.\n",
34
+ systemPromptMd: "You are a helpful assistant for this website. Answer concisely, " +
35
+ "ask clarifying questions when needed, and avoid making claims that " +
36
+ "are not supported by the site owner.\n",
37
+ };
38
+ }
4
39
  export async function writeCounterFiles(counterId, files, root = process.cwd()) {
5
40
  const dir = counterDir(counterId, root);
6
41
  await mkdir(dir, { recursive: true });
@@ -10,6 +45,27 @@ export async function writeCounterFiles(counterId, files, root = process.cwd())
10
45
  writeFile(path.join(dir, "SYSTEM_PROMPT.md"), files.systemPromptMd),
11
46
  ]);
12
47
  }
48
+ export async function ensureCounterFiles(counterId, root = process.cwd()) {
49
+ const dir = counterDir(counterId, root);
50
+ const existing = await Promise.all(COUNTER_FILE_NAMES.map(async (fileName) => ({
51
+ fileName,
52
+ exists: await fileExists(path.join(dir, fileName)),
53
+ })));
54
+ const existingCount = existing.filter((entry) => entry.exists).length;
55
+ if (existingCount === 0) {
56
+ const files = starterCounterFiles(counterId);
57
+ await writeCounterFiles(counterId, files, root);
58
+ return { files, created: true };
59
+ }
60
+ if (existingCount !== COUNTER_FILE_NAMES.length) {
61
+ const missing = existing
62
+ .filter((entry) => !entry.exists)
63
+ .map((entry) => entry.fileName)
64
+ .join(", ");
65
+ throw new Error(`counter files for ${counterId} are incomplete. Missing: ${missing}`);
66
+ }
67
+ return { files: await readCounterFiles(counterId, root), created: false };
68
+ }
13
69
  export async function readCounterFiles(counterId, root = process.cwd()) {
14
70
  const dir = counterDir(counterId, root);
15
71
  const [settingsYaml, triggersMd, systemPromptMd] = await Promise.all([
@@ -19,4 +75,15 @@ export async function readCounterFiles(counterId, root = process.cwd()) {
19
75
  ]);
20
76
  return { settingsYaml, triggersMd, systemPromptMd };
21
77
  }
78
+ async function fileExists(file) {
79
+ try {
80
+ await readFile(file, "utf8");
81
+ return true;
82
+ }
83
+ catch (error) {
84
+ if (isNotFound(error))
85
+ return false;
86
+ throw error;
87
+ }
88
+ }
22
89
  //# sourceMappingURL=counter-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"counter-files.js","sourceRoot":"","sources":["../../src/workspace/counter-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,KAAmB,EACnB,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAEpB,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;QAC9D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;QAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAEpB,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACrD,CAAC,CAAC;IACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"counter-files.js","sourceRoot":"","sources":["../../src/workspace/counter-files.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
1
+ import { appendFile, mkdir, open, readFile, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { inquiryDir, isNotFound, readWorkspaceState, writeWorkspaceState, } from "./layout.js";
4
4
  export async function appendInquiryMessages(args) {
@@ -95,13 +95,29 @@ async function writeStatuses(file, statuses) {
95
95
  await writeFile(file, `${JSON.stringify(statuses, null, 2)}\n`);
96
96
  }
97
97
  async function appendFileText(file, text) {
98
- const existing = await readFile(file, "utf8").catch((e) => {
98
+ await mkdir(path.dirname(file), { recursive: true });
99
+ const separator = (await needsLeadingNewline(file)) ? "\n" : "";
100
+ await appendFile(file, `${separator}${text}`);
101
+ }
102
+ async function needsLeadingNewline(file) {
103
+ let handle;
104
+ try {
105
+ handle = await open(file, "r");
106
+ const { size } = await handle.stat();
107
+ if (size === 0)
108
+ return false;
109
+ const lastByte = Buffer.alloc(1);
110
+ await handle.read(lastByte, 0, 1, size - 1);
111
+ return lastByte[0] !== 10;
112
+ }
113
+ catch (e) {
99
114
  if (isNotFound(e))
100
- return "";
115
+ return false;
101
116
  throw e;
102
- });
103
- const separator = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
104
- await writeFile(file, `${existing}${separator}${text}`);
117
+ }
118
+ finally {
119
+ await handle?.close();
120
+ }
105
121
  }
106
122
  async function counterIdsWithStatusForInquiry(root, inquiryId) {
107
123
  const inquiriesRoot = path.join(root, "monban", "inquiries");
@@ -1 +1 @@
1
- {"version":3,"file":"inquiry-store.js","sourceRoot":"","sources":["../../src/workspace/inquiry-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAUrB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAK3C;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,cAAc,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC;IACtB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;QAC/B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACzC,cAAc,EAAE,IAAI,CAAC,kBAAkB;KACxC,CAAC;IACF,MAAM,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEvC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAMzC;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAClB,CAAC,CAAC,MAAM,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,EAAE;QACvD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,SAAiB,EACjB,QAA0B,EAC1B,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;gBAC5B,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;YACpD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAG7C,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,QAA4C;IAE5C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QACjE,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,IAAY,EACZ,SAAiB;IAEjB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CACzE,CAAC,CAAU,EAAE,EAAE;QACb,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC;IACV,CAAC,CACF,CAAC;IACF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CACpD,CAAC;QACF,IAAI,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"inquiry-store.js","sourceRoot":"","sources":["../../src/workspace/inquiry-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monban-online/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "monban": "dist/index.js"
@@ -17,6 +17,7 @@
17
17
  "commander": "^14.0.2"
18
18
  },
19
19
  "devDependencies": {
20
+ "@monban/api-contracts": "workspace:*",
20
21
  "@types/node": "^20",
21
22
  "tsx": "^4.21.0",
22
23
  "typescript": "^5"