@doxbrix/doxloop 0.1.2 → 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.
Files changed (55) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +96 -41
  3. package/assets/doxbrix-preview.css +8 -0
  4. package/dist/agents.d.ts +4 -0
  5. package/dist/agents.d.ts.map +1 -1
  6. package/dist/agents.js +9 -0
  7. package/dist/agents.js.map +1 -1
  8. package/dist/args.d.ts.map +1 -1
  9. package/dist/args.js +2 -1
  10. package/dist/args.js.map +1 -1
  11. package/dist/auth.js +47 -4
  12. package/dist/auth.js.map +1 -1
  13. package/dist/author.d.ts +7 -5
  14. package/dist/author.d.ts.map +1 -1
  15. package/dist/author.js +49 -21
  16. package/dist/author.js.map +1 -1
  17. package/dist/cli.js +346 -72
  18. package/dist/cli.js.map +1 -1
  19. package/dist/doxbrix-markdown.js +39 -1
  20. package/dist/doxbrix-markdown.js.map +1 -1
  21. package/dist/interactive.d.ts +17 -0
  22. package/dist/interactive.d.ts.map +1 -0
  23. package/dist/interactive.js +345 -0
  24. package/dist/interactive.js.map +1 -0
  25. package/dist/preview.d.ts +1 -0
  26. package/dist/preview.d.ts.map +1 -1
  27. package/dist/preview.js +238 -1
  28. package/dist/preview.js.map +1 -1
  29. package/dist/project.d.ts +8 -0
  30. package/dist/project.d.ts.map +1 -1
  31. package/dist/project.js +227 -15
  32. package/dist/project.js.map +1 -1
  33. package/dist/prompts.d.ts +41 -0
  34. package/dist/prompts.d.ts.map +1 -0
  35. package/dist/prompts.js +290 -0
  36. package/dist/prompts.js.map +1 -0
  37. package/dist/settings.d.ts +6 -0
  38. package/dist/settings.d.ts.map +1 -0
  39. package/dist/settings.js +519 -0
  40. package/dist/settings.js.map +1 -0
  41. package/dist/sync.d.ts.map +1 -1
  42. package/dist/sync.js +46 -0
  43. package/dist/sync.js.map +1 -1
  44. package/dist/types.d.ts +18 -1
  45. package/dist/types.d.ts.map +1 -1
  46. package/docs/ci-and-automation.md +10 -0
  47. package/docs/doxbrix-http-api.md +2 -1
  48. package/docs/project-format.md +13 -1
  49. package/docs/security-model.md +4 -2
  50. package/package.json +1 -1
  51. package/skills/doxloop-authoring/references/project-format.md +20 -0
  52. package/dist/public-deploy-confirmation.d.ts +0 -5
  53. package/dist/public-deploy-confirmation.d.ts.map +0 -1
  54. package/dist/public-deploy-confirmation.js +0 -22
  55. package/dist/public-deploy-confirmation.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { DoxloopError } from './errors.js';
2
+ import type { ParsedArgs } from './types.js';
3
+ export interface PromptIo {
4
+ input: NodeJS.ReadableStream & {
5
+ isTTY?: boolean;
6
+ setRawMode?: (mode: boolean) => unknown;
7
+ };
8
+ output: NodeJS.WritableStream & {
9
+ isTTY?: boolean;
10
+ };
11
+ }
12
+ export interface PromptChoice<T> {
13
+ value: T;
14
+ label: string;
15
+ hint?: string;
16
+ disabled?: string;
17
+ }
18
+ export declare function promptCanceled(): DoxloopError;
19
+ export declare function isInteractive(args: ParsedArgs, io?: PromptIo): boolean;
20
+ export declare function note(io: PromptIo, lines: string): void;
21
+ export declare function heading(io: PromptIo, text: string): void;
22
+ export declare function promptText(options: {
23
+ message: string;
24
+ initial?: string;
25
+ hint?: string;
26
+ allowEmpty?: boolean;
27
+ validate?: (value: string) => string | undefined | Promise<string | undefined>;
28
+ io?: PromptIo;
29
+ }): Promise<string>;
30
+ export declare function promptConfirm(options: {
31
+ message: string;
32
+ initial?: boolean;
33
+ io?: PromptIo;
34
+ }): Promise<boolean>;
35
+ export declare function promptSelect<T>(options: {
36
+ message: string;
37
+ choices: Array<PromptChoice<T>>;
38
+ initialIndex?: number;
39
+ io?: PromptIo;
40
+ }): Promise<T>;
41
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC,cAAc,GAAG;QAC7B,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;KACxC,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CACpD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAQD,wBAAgB,cAAc,IAAI,YAAY,CAE7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,GAAE,QAAsB,GAAG,OAAO,CAOnF;AAWD,wBAAgB,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAItD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAExD;AAyDD,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9E,EAAE,CAAC,EAAE,QAAQ,CAAA;CACd,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BlB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,EAAE,CAAC,EAAE,QAAQ,CAAA;CACd,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,EAAE,CAAC,EAAE,QAAQ,CAAA;CACd,GAAG,OAAO,CAAC,CAAC,CAAC,CAUb"}
@@ -0,0 +1,290 @@
1
+ import { createInterface } from 'node:readline/promises';
2
+ import { styleText } from 'node:util';
3
+ import { booleanFlag } from './args.js';
4
+ import { DoxloopError } from './errors.js';
5
+ const CANCEL_EXIT_CODE = 130;
6
+ function defaultIo() {
7
+ return { input: process.stdin, output: process.stdout };
8
+ }
9
+ export function promptCanceled() {
10
+ return new DoxloopError('Canceled.', CANCEL_EXIT_CODE);
11
+ }
12
+ export function isInteractive(args, io = defaultIo()) {
13
+ return (io.input.isTTY === true &&
14
+ io.output.isTTY === true &&
15
+ !booleanFlag(args, 'yes') &&
16
+ (process.env.CI === undefined || process.env.CI === ''));
17
+ }
18
+ function color(io, style, text) {
19
+ if (io.output.isTTY !== true || process.env.NO_COLOR)
20
+ return text;
21
+ return styleText(style, text);
22
+ }
23
+ export function note(io, lines) {
24
+ for (const line of lines.split('\n')) {
25
+ io.output.write(`${color(io, 'dim', '│')} ${line}\n`);
26
+ }
27
+ }
28
+ export function heading(io, text) {
29
+ io.output.write(`\n ${color(io, 'bold', text)}\n\n`);
30
+ }
31
+ function renderAnswered(io, message, answer) {
32
+ io.output.write(`${color(io, 'green', '◆')} ${message} ${color(io, 'dim', '·')} ${color(io, 'cyan', answer)}\n`);
33
+ }
34
+ // Reads lines through one readline interface per prompt, buffering lines that
35
+ // arrive between questions so piped and scripted input is never dropped.
36
+ class LineReader {
37
+ queue = [];
38
+ pending;
39
+ canceled = false;
40
+ prompt;
41
+ constructor(io) {
42
+ this.prompt = createInterface({ input: io.input, output: io.output });
43
+ this.prompt.on('line', (line) => {
44
+ if (this.pending) {
45
+ const waiting = this.pending;
46
+ this.pending = undefined;
47
+ waiting.resolve(line);
48
+ }
49
+ else {
50
+ this.queue.push(line);
51
+ }
52
+ });
53
+ const cancel = () => {
54
+ this.canceled = true;
55
+ if (this.pending) {
56
+ const waiting = this.pending;
57
+ this.pending = undefined;
58
+ waiting.reject(promptCanceled());
59
+ }
60
+ };
61
+ this.prompt.on('SIGINT', cancel);
62
+ this.prompt.on('close', cancel);
63
+ }
64
+ next(io, query) {
65
+ io.output.write(query);
66
+ const buffered = this.queue.shift();
67
+ if (buffered !== undefined)
68
+ return Promise.resolve(buffered);
69
+ if (this.canceled)
70
+ return Promise.reject(promptCanceled());
71
+ return new Promise((resolve, reject) => {
72
+ this.pending = { resolve, reject };
73
+ });
74
+ }
75
+ close() {
76
+ this.prompt.removeAllListeners('close');
77
+ this.prompt.close();
78
+ }
79
+ }
80
+ export async function promptText(options) {
81
+ const io = options.io ?? defaultIo();
82
+ const suffix = options.initial
83
+ ? ` ${color(io, 'dim', `(${options.initial})`)}`
84
+ : options.allowEmpty
85
+ ? ` ${color(io, 'dim', '(Enter to skip)')}`
86
+ : '';
87
+ io.output.write(`${color(io, 'cyan', '◆')} ${options.message}${suffix}\n`);
88
+ if (options.hint)
89
+ note(io, color(io, 'dim', options.hint));
90
+ const reader = new LineReader(io);
91
+ try {
92
+ while (true) {
93
+ const raw = await reader.next(io, `${color(io, 'dim', '│')} `);
94
+ const value = raw.trim() || options.initial?.trim() || '';
95
+ if (value === '' && !options.allowEmpty) {
96
+ note(io, color(io, 'yellow', 'A value is required.'));
97
+ continue;
98
+ }
99
+ const problem = value === '' ? undefined : await options.validate?.(value);
100
+ if (problem) {
101
+ note(io, color(io, 'yellow', problem));
102
+ continue;
103
+ }
104
+ return value;
105
+ }
106
+ }
107
+ finally {
108
+ reader.close();
109
+ }
110
+ }
111
+ export async function promptConfirm(options) {
112
+ const io = options.io ?? defaultIo();
113
+ const fallback = options.initial ?? true;
114
+ const marks = fallback ? 'Y/n' : 'y/N';
115
+ const reader = new LineReader(io);
116
+ try {
117
+ while (true) {
118
+ const raw = (await reader.next(io, `${color(io, 'cyan', '◆')} ${options.message} ${color(io, 'dim', `(${marks})`)} `))
119
+ .trim()
120
+ .toLowerCase();
121
+ if (raw === '')
122
+ return fallback;
123
+ if (raw === 'y' || raw === 'yes')
124
+ return true;
125
+ if (raw === 'n' || raw === 'no')
126
+ return false;
127
+ note(io, color(io, 'yellow', 'Answer y or n.'));
128
+ }
129
+ }
130
+ finally {
131
+ reader.close();
132
+ }
133
+ }
134
+ export async function promptSelect(options) {
135
+ const io = options.io ?? defaultIo();
136
+ const enabled = options.choices.filter((choice) => !choice.disabled);
137
+ if (enabled.length === 0) {
138
+ throw new DoxloopError('No selectable choices are available.');
139
+ }
140
+ if (typeof io.input.setRawMode !== 'function' || io.input.isTTY !== true) {
141
+ return numberedSelect(io, options);
142
+ }
143
+ return rawSelect(io, options);
144
+ }
145
+ function choiceLine(io, choice, active) {
146
+ const marker = choice.disabled
147
+ ? color(io, 'dim', '○')
148
+ : active
149
+ ? color(io, 'cyan', '●')
150
+ : '○';
151
+ const label = choice.disabled
152
+ ? color(io, 'dim', choice.label)
153
+ : active
154
+ ? color(io, 'cyan', choice.label)
155
+ : choice.label;
156
+ const hint = choice.disabled ?? choice.hint;
157
+ return `${color(io, 'dim', '│')} ${marker} ${label}${hint ? ` ${color(io, 'dim', hint)}` : ''}`;
158
+ }
159
+ async function rawSelect(io, options) {
160
+ const { choices } = options;
161
+ let index = firstEnabled(choices, options.initialIndex ?? 0);
162
+ const renderedLines = choices.length + 2;
163
+ const render = (first) => {
164
+ if (!first)
165
+ io.output.write(`\u001b[${renderedLines}A`);
166
+ io.output.write(`\u001b[0J${color(io, 'cyan', '◆')} ${options.message}\n`);
167
+ for (const [position, choice] of choices.entries()) {
168
+ io.output.write(`${choiceLine(io, choice, position === index)}\n`);
169
+ }
170
+ io.output.write(`${color(io, 'dim', '│')} ${color(io, 'dim', '↑/↓ move · Enter select · Esc cancel')}\n`);
171
+ };
172
+ render(true);
173
+ const input = io.input;
174
+ const wasRaw = input.isRaw === true;
175
+ input.setRawMode?.(true);
176
+ input.resume?.();
177
+ try {
178
+ return await new Promise((resolveChoice, reject) => {
179
+ let settled = false;
180
+ const move = (step) => {
181
+ for (let hops = 0; hops < choices.length; hops += 1) {
182
+ index = (index + step + choices.length) % choices.length;
183
+ if (!choices[index]?.disabled)
184
+ break;
185
+ }
186
+ render(false);
187
+ };
188
+ const handleKey = (key) => {
189
+ if (key === '\u0003' || key === '\u001b') {
190
+ finish();
191
+ reject(promptCanceled());
192
+ return;
193
+ }
194
+ if (key === '\u001b[A' || key === 'k')
195
+ move(-1);
196
+ else if (key === '\u001b[B' || key === 'j')
197
+ move(1);
198
+ else if (key === '\r' || key === '\n') {
199
+ const chosen = choices[index];
200
+ if (!chosen || chosen.disabled)
201
+ return;
202
+ finish();
203
+ io.output.write(`\u001b[${renderedLines}A\u001b[0J`);
204
+ renderAnswered(io, options.message, chosen.label);
205
+ resolveChoice(chosen.value);
206
+ }
207
+ else if (/^[1-9]$/.test(key)) {
208
+ const target = Number(key) - 1;
209
+ if (target < choices.length && !choices[target]?.disabled) {
210
+ index = target;
211
+ render(false);
212
+ }
213
+ }
214
+ };
215
+ // One chunk can hold several keystrokes (paste, scripted input); split
216
+ // it into keys, keeping three-byte arrow sequences together.
217
+ const onData = (data) => {
218
+ const chunk = data.toString('utf8');
219
+ let position = 0;
220
+ while (position < chunk.length && !settled) {
221
+ const arrow = chunk.slice(position, position + 3);
222
+ if (arrow === '\u001b[A' || arrow === '\u001b[B') {
223
+ handleKey(arrow);
224
+ position += 3;
225
+ }
226
+ else {
227
+ handleKey(chunk[position] ?? '');
228
+ position += 1;
229
+ }
230
+ }
231
+ };
232
+ const onEnd = () => {
233
+ finish();
234
+ reject(promptCanceled());
235
+ };
236
+ const finish = () => {
237
+ if (settled)
238
+ return;
239
+ settled = true;
240
+ input.removeListener('data', onData);
241
+ input.removeListener('end', onEnd);
242
+ input.removeListener('close', onEnd);
243
+ if (!wasRaw)
244
+ input.setRawMode?.(false);
245
+ input.pause?.();
246
+ };
247
+ input.on('data', onData);
248
+ input.once('end', onEnd);
249
+ input.once('close', onEnd);
250
+ });
251
+ }
252
+ finally {
253
+ if (!wasRaw)
254
+ input.setRawMode?.(false);
255
+ }
256
+ }
257
+ async function numberedSelect(io, options) {
258
+ const { choices } = options;
259
+ const initial = firstEnabled(choices, options.initialIndex ?? 0);
260
+ io.output.write(`${color(io, 'cyan', '◆')} ${options.message}\n`);
261
+ for (const [position, choice] of choices.entries()) {
262
+ const hint = choice.disabled ?? choice.hint;
263
+ io.output.write(`${color(io, 'dim', '│')} ${position + 1}. ${choice.label}${hint ? ` ${color(io, 'dim', hint)}` : ''}\n`);
264
+ }
265
+ const reader = new LineReader(io);
266
+ try {
267
+ while (true) {
268
+ const raw = (await reader.next(io, `${color(io, 'dim', '│')} Choose 1-${choices.length} ${color(io, 'dim', `(${initial + 1})`)}: `)).trim();
269
+ const position = raw === '' ? initial : Number(raw) - 1;
270
+ const chosen = Number.isInteger(position) ? choices[position] : undefined;
271
+ if (chosen && !chosen.disabled) {
272
+ renderAnswered(io, options.message, chosen.label);
273
+ return chosen.value;
274
+ }
275
+ note(io, color(io, 'yellow', `Enter a number between 1 and ${choices.length}.`));
276
+ }
277
+ }
278
+ finally {
279
+ reader.close();
280
+ }
281
+ }
282
+ function firstEnabled(choices, start) {
283
+ for (let offset = 0; offset < choices.length; offset += 1) {
284
+ const index = (start + offset) % choices.length;
285
+ if (!choices[index]?.disabled)
286
+ return index;
287
+ }
288
+ return 0;
289
+ }
290
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type PromptIo } from './prompts.js';
2
+ import type { DeploymentConfig, DoxloopProject } from './types.js';
3
+ export declare function runSettingsWizard(root: string, cwd: string, io?: PromptIo): Promise<void>;
4
+ export declare function formatProjectSettings(root: string, project: DoxloopProject): string;
5
+ export declare function effectiveDeployment(project: DoxloopProject, fallbackApiUrl?: string): Required<DeploymentConfig>;
6
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAYA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAGV,gBAAgB,EAEhB,cAAc,EAEf,MAAM,YAAY,CAAA;AAcnB,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,EAAE,GAAE,QAA2D,GAC9D,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAcnF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,MAAM,GACtB,QAAQ,CAAC,gBAAgB,CAAC,CAO5B"}