@cogitator-ai/cli 0.5.19 → 0.6.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.
Files changed (105) hide show
  1. package/README.md +105 -44
  2. package/dist/commands/add.d.ts +11 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +79 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/assistant.d.ts.map +1 -1
  7. package/dist/commands/assistant.js +14 -12
  8. package/dist/commands/assistant.js.map +1 -1
  9. package/dist/commands/build.d.ts +16 -1
  10. package/dist/commands/build.d.ts.map +1 -1
  11. package/dist/commands/build.js +53 -48
  12. package/dist/commands/build.js.map +1 -1
  13. package/dist/commands/daemon.d.ts.map +1 -1
  14. package/dist/commands/daemon.js +17 -13
  15. package/dist/commands/daemon.js.map +1 -1
  16. package/dist/commands/deploy.d.ts +59 -0
  17. package/dist/commands/deploy.d.ts.map +1 -1
  18. package/dist/commands/deploy.js +181 -99
  19. package/dist/commands/deploy.js.map +1 -1
  20. package/dist/commands/dev.d.ts +14 -0
  21. package/dist/commands/dev.d.ts.map +1 -0
  22. package/dist/commands/dev.js +84 -0
  23. package/dist/commands/dev.js.map +1 -0
  24. package/dist/commands/doctor.d.ts +5 -0
  25. package/dist/commands/doctor.d.ts.map +1 -0
  26. package/dist/commands/doctor.js +52 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/eval.d.ts +12 -0
  29. package/dist/commands/eval.d.ts.map +1 -0
  30. package/dist/commands/eval.js +90 -0
  31. package/dist/commands/eval.js.map +1 -0
  32. package/dist/commands/init.d.ts +10 -33
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +89 -321
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/logs.d.ts.map +1 -1
  37. package/dist/commands/logs.js +9 -6
  38. package/dist/commands/logs.js.map +1 -1
  39. package/dist/commands/mcp.d.ts +18 -0
  40. package/dist/commands/mcp.d.ts.map +1 -0
  41. package/dist/commands/mcp.js +155 -0
  42. package/dist/commands/mcp.js.map +1 -0
  43. package/dist/commands/models.d.ts.map +1 -1
  44. package/dist/commands/models.js +43 -15
  45. package/dist/commands/models.js.map +1 -1
  46. package/dist/commands/run.d.ts +17 -1
  47. package/dist/commands/run.d.ts.map +1 -1
  48. package/dist/commands/run.js +75 -28
  49. package/dist/commands/run.js.map +1 -1
  50. package/dist/commands/skill.d.ts.map +1 -1
  51. package/dist/commands/skill.js +23 -23
  52. package/dist/commands/skill.js.map +1 -1
  53. package/dist/commands/status.d.ts +21 -0
  54. package/dist/commands/status.d.ts.map +1 -1
  55. package/dist/commands/status.js +64 -39
  56. package/dist/commands/status.js.map +1 -1
  57. package/dist/commands/up.d.ts.map +1 -1
  58. package/dist/commands/up.js +26 -24
  59. package/dist/commands/up.js.map +1 -1
  60. package/dist/commands/wizard.d.ts.map +1 -1
  61. package/dist/commands/wizard.js +5 -0
  62. package/dist/commands/wizard.js.map +1 -1
  63. package/dist/index.js +9 -42
  64. package/dist/index.js.map +1 -1
  65. package/dist/program.d.ts +4 -0
  66. package/dist/program.d.ts.map +1 -0
  67. package/dist/program.js +61 -0
  68. package/dist/program.js.map +1 -0
  69. package/dist/utils/add.d.ts +81 -0
  70. package/dist/utils/add.d.ts.map +1 -0
  71. package/dist/utils/add.js +151 -0
  72. package/dist/utils/add.js.map +1 -0
  73. package/dist/utils/cli.d.ts +49 -0
  74. package/dist/utils/cli.d.ts.map +1 -0
  75. package/dist/utils/cli.js +106 -0
  76. package/dist/utils/cli.js.map +1 -0
  77. package/dist/utils/docs.d.ts +39 -0
  78. package/dist/utils/docs.d.ts.map +1 -0
  79. package/dist/utils/docs.js +198 -0
  80. package/dist/utils/docs.js.map +1 -0
  81. package/dist/utils/doctor.d.ts +41 -0
  82. package/dist/utils/doctor.d.ts.map +1 -0
  83. package/dist/utils/doctor.js +378 -0
  84. package/dist/utils/doctor.js.map +1 -0
  85. package/dist/utils/evals.d.ts +50 -0
  86. package/dist/utils/evals.d.ts.map +1 -0
  87. package/dist/utils/evals.js +78 -0
  88. package/dist/utils/evals.js.map +1 -0
  89. package/dist/utils/ollama.d.ts +5 -0
  90. package/dist/utils/ollama.d.ts.map +1 -1
  91. package/dist/utils/ollama.js +13 -5
  92. package/dist/utils/ollama.js.map +1 -1
  93. package/dist/utils/provider-models.d.ts +8 -2
  94. package/dist/utils/provider-models.d.ts.map +1 -1
  95. package/dist/utils/provider-models.js +32 -52
  96. package/dist/utils/provider-models.js.map +1 -1
  97. package/dist/utils/registry-worker.d.ts +2 -0
  98. package/dist/utils/registry-worker.d.ts.map +1 -0
  99. package/dist/utils/registry-worker.js +35 -0
  100. package/dist/utils/registry-worker.js.map +1 -0
  101. package/dist/utils/registry.d.ts +19 -0
  102. package/dist/utils/registry.d.ts.map +1 -0
  103. package/dist/utils/registry.js +58 -0
  104. package/dist/utils/registry.js.map +1 -0
  105. package/package.json +16 -10
@@ -0,0 +1,151 @@
1
+ import chalk from 'chalk';
2
+ import { CHANNELS, CODING_AGENTS, closest, DEPLOY_TARGETS, FEATURES, MEMORIES, VECTOR_STORES, } from 'create-cogitator-app';
3
+ import { UsageError } from './cli.js';
4
+ function oneOf(what, value, allowed) {
5
+ const found = allowed.find((candidate) => candidate === value);
6
+ if (found)
7
+ return found;
8
+ const match = closest(value, allowed);
9
+ throw new UsageError(`Unknown ${what} "${value}".${match ? ` Did you mean "${match}"?` : ''} Use one of: ${allowed.join(', ')}.`);
10
+ }
11
+ /** Values of a repeatable flag, which also takes comma-separated lists. */
12
+ function listOf(values) {
13
+ return (values ?? [])
14
+ .flatMap((value) => value.split(','))
15
+ .map((value) => value.trim())
16
+ .filter(Boolean);
17
+ }
18
+ /** The addition the command line asks for, validated against the scaffolder's catalogs. */
19
+ export function addChangesFrom(features, flags) {
20
+ const changes = {
21
+ features: listOf(features).map((feature) => oneOf('feature', feature, FEATURES)),
22
+ channels: listOf(flags.channel).map((channel) => oneOf('channel', channel, CHANNELS)),
23
+ codingAgents: listOf(flags.agent).map((agent) => oneOf('coding agent', agent, CODING_AGENTS)),
24
+ ...(flags.memory && { memory: oneOf('memory', flags.memory, MEMORIES) }),
25
+ ...(flags.vectorStore && {
26
+ vectorStore: oneOf('vector store', flags.vectorStore, VECTOR_STORES),
27
+ }),
28
+ ...(flags.deploy && { deploy: oneOf('deploy target', flags.deploy, DEPLOY_TARGETS) }),
29
+ };
30
+ const empty = !changes.features?.length &&
31
+ !changes.channels?.length &&
32
+ !changes.codingAgents?.length &&
33
+ !changes.memory &&
34
+ !changes.vectorStore &&
35
+ !changes.deploy;
36
+ if (empty) {
37
+ throw new UsageError(`Name what to add: a feature (${FEATURES.join(', ')}), or --memory, --vector-store, --deploy, --channel, --agent`);
38
+ }
39
+ return changes;
40
+ }
41
+ /** A unified diff with additions in green, removals in red and hunk headers dimmed. */
42
+ export function colorDiff(diff) {
43
+ return diff
44
+ .split('\n')
45
+ .map((line) => {
46
+ if (line.startsWith('+++') || line.startsWith('---'))
47
+ return chalk.bold(line);
48
+ if (line.startsWith('@@'))
49
+ return chalk.cyan(line);
50
+ if (line.startsWith('+'))
51
+ return chalk.green(line);
52
+ if (line.startsWith('-'))
53
+ return chalk.red(line);
54
+ return line;
55
+ })
56
+ .join('\n');
57
+ }
58
+ const MARKS = {
59
+ create: chalk.green('+'),
60
+ update: chalk.yellow('~'),
61
+ delete: chalk.red('-'),
62
+ };
63
+ function indentList(items) {
64
+ return items.map((item) => ` ${item}`);
65
+ }
66
+ /** What the addition does, for the terminal; with `diffs`, every file change in full. */
67
+ export function formatAddPlan(plan, options) {
68
+ const out = [];
69
+ if (plan.upToDate)
70
+ return chalk.green('The project already has everything asked for, nothing to do.');
71
+ out.push(chalk.bold(`Adding ${plan.summary.join(', ')}`), '');
72
+ if (plan.changes.length > 0) {
73
+ out.push(chalk.bold('Files'));
74
+ for (const change of plan.changes) {
75
+ const how = change.source === 'merged' ? chalk.dim(' (merged with your edits)') : '';
76
+ out.push(` ${MARKS[change.kind]} ${change.path}${how}`);
77
+ }
78
+ out.push('');
79
+ }
80
+ const deps = Object.entries({ ...plan.dependencies, ...plan.devDependencies });
81
+ if (deps.length > 0 || plan.removedDependencies.length > 0) {
82
+ out.push(chalk.bold('Dependencies'), ...indentList([
83
+ ...deps.map(([name, range]) => `${chalk.green('+')} ${name} ${chalk.dim(range)}`),
84
+ ...plan.removedDependencies.map((name) => `${chalk.red('-')} ${name}`),
85
+ ]), '');
86
+ }
87
+ if (plan.env.length > 0) {
88
+ out.push(chalk.bold('Environment'), ...indentList(plan.env.map((variable) => `${variable.name}${variable.required ? chalk.yellow(' (required)') : ''} ${chalk.dim(variable.description)}`)), '');
89
+ }
90
+ if (plan.services.length > 0) {
91
+ out.push(chalk.bold('Services'), ...indentList(plan.services), '');
92
+ }
93
+ for (const note of plan.notes) {
94
+ out.push(chalk.dim(`note: ${note.path ? `${note.path} ` : ''}${note.message}`));
95
+ if (options.diffs && note.diff)
96
+ out.push(colorDiff(note.diff));
97
+ }
98
+ for (const warning of plan.warnings)
99
+ out.push(chalk.yellow(`warning: ${warning}`));
100
+ if (options.diffs) {
101
+ for (const change of plan.changes)
102
+ if (change.diff)
103
+ out.push('', colorDiff(change.diff.trimEnd()));
104
+ }
105
+ return out.join('\n').trimEnd();
106
+ }
107
+ /** Why the addition was refused, with the change each conflicting file needs. */
108
+ export function formatConflicts(plan) {
109
+ return [
110
+ chalk.red(`cogitator add would overwrite your changes to ${plan.conflicts.length} file${plan.conflicts.length === 1 ? '' : 's'}, so nothing was written:`),
111
+ ...plan.conflicts.flatMap((conflict) => [
112
+ '',
113
+ `${chalk.bold(conflict.path)}: ${conflict.reason}`,
114
+ colorDiff(conflict.diff.trimEnd()),
115
+ ]),
116
+ '',
117
+ 'Apply these changes by hand, or set your edits aside and restore the generated files, then run cogitator add again.',
118
+ ].join('\n');
119
+ }
120
+ /** The plan as `--json` prints it: no file contents, diffs included. */
121
+ export function addPlanJson(plan, result) {
122
+ const step = (value) => value && (value.status === 'failed' ? { status: 'failed', error: value.error.message } : value);
123
+ return {
124
+ ok: plan.conflicts.length === 0,
125
+ upToDate: plan.upToDate,
126
+ added: plan.summary,
127
+ spec: plan.to,
128
+ command: plan.command,
129
+ changes: plan.changes.map(({ path, kind, source, diff }) => ({ path, kind, source, diff })),
130
+ conflicts: plan.conflicts,
131
+ notes: plan.notes,
132
+ dependencies: plan.dependencies,
133
+ devDependencies: plan.devDependencies,
134
+ removedDependencies: plan.removedDependencies,
135
+ env: plan.env.map(({ name, required, secret, description }) => ({
136
+ name,
137
+ required,
138
+ secret,
139
+ description,
140
+ })),
141
+ services: plan.services,
142
+ warnings: plan.warnings,
143
+ ...(result && {
144
+ written: result.written,
145
+ deleted: result.deleted,
146
+ install: step(result.install),
147
+ format: step(result.format),
148
+ }),
149
+ };
150
+ }
151
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/utils/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,aAAa,EACb,OAAO,EACP,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,aAAa,GAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAUtC,SAAS,KAAK,CAAmB,IAAY,EAAE,KAAa,EAAE,OAAqB;IACjF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;IAC/D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,UAAU,CAClB,WAAW,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5G,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,MAAM,CAAC,MAAqC;IACnD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAClB,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,QAA2B,EAAE,KAAe;IACzE,MAAM,OAAO,GAAe;QAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChF,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrF,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAC7F,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI;YACvB,WAAW,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC;SACrE,CAAC;QACF,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;KACtF,CAAC;IACF,MAAM,KAAK,GACT,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM;QACzB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM;QACzB,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM;QAC7B,CAAC,OAAO,CAAC,MAAM;QACf,CAAC,OAAO,CAAC,WAAW;QACpB,CAAC,OAAO,CAAC,MAAM,CAAC;IAClB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAClB,gCAAgC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,8DAA8D,CAClH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,KAAK,GAAuC;IAChD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;CACvB,CAAC;AAEF,SAAS,UAAU,CAAC,KAAwB;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAA2B;IACtE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,QAAQ;QACf,OAAO,KAAK,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAErF,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CACN,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAC1B,GAAG,UAAU,CAAC;YACZ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjF,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;SACvE,CAAC,EACF,EAAE,CACH,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CACN,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EACzB,GAAG,UAAU,CACX,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,CAAC,QAAQ,EAAE,EAAE,CACX,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAC/G,CACF,EACD,EAAE,CACH,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAC/B,IAAI,MAAM,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO;QACL,KAAK,CAAC,GAAG,CACP,iDAAiD,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2BAA2B,CAChJ;QACD,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtC,EAAE;YACF,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;YAClD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SACnC,CAAC;QACF,EAAE;QACF,qHAAqH;KACtH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,WAAW,CACzB,IAAa,EACb,MAAsE;IAEtE,MAAM,IAAI,GAAG,CAAC,KAAuC,EAAE,EAAE,CACvD,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClG,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,OAAO;QACnB,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI;YACJ,QAAQ;YACR,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;QACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,MAAM,IAAI;YACZ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Exit codes every command uses: 0 when it did what was asked, 1 when it
3
+ * could not (a failed check, a failed deploy, a missing service), 2 when
4
+ * the command line itself is wrong.
5
+ */
6
+ export declare const EXIT: {
7
+ readonly ok: 0;
8
+ readonly failed: 1;
9
+ readonly usage: 2;
10
+ };
11
+ export type ExitCode = (typeof EXIT)[keyof typeof EXIT];
12
+ /** A failure a command reports to the user, with what to do about it. */
13
+ export declare class CommandError extends Error {
14
+ readonly exitCode: ExitCode;
15
+ readonly hints: string[];
16
+ constructor(message: string, options?: {
17
+ hints?: string[];
18
+ exitCode?: ExitCode;
19
+ cause?: unknown;
20
+ });
21
+ }
22
+ /** A command line that cannot work: an unknown value, a missing argument. Exits 2. */
23
+ export declare class UsageError extends CommandError {
24
+ constructor(message: string, hints?: string[]);
25
+ }
26
+ export declare function errorMessage(error: unknown): string;
27
+ /** Whether `COGITATOR_DEBUG` asks for stack traces. */
28
+ export declare function debugEnabled(env?: NodeJS.ProcessEnv): boolean;
29
+ /** The exit code of any error a command ends with. */
30
+ export declare function exitCodeOf(error: unknown): ExitCode;
31
+ /**
32
+ * Prints how a command failed: as `{ ok: false, error }` on stdout with
33
+ * `--json`, otherwise as a message with its hints on stderr, with the stack
34
+ * when COGITATOR_DEBUG is set. Returns the exit code.
35
+ */
36
+ export declare function reportFailure(error: unknown, options: {
37
+ json: boolean;
38
+ env?: NodeJS.ProcessEnv;
39
+ }): ExitCode;
40
+ /** The `Examples:` block of a command's help: each command with what it does. */
41
+ export declare function examplesHelp(examples: ReadonlyArray<readonly [command: string, description: string]>): string;
42
+ /** Prints `value` as the JSON a `--json` command answers with. */
43
+ export declare function printJson(value: unknown): void;
44
+ /**
45
+ * Ends the process with the failure, for code that cannot throw to the
46
+ * command: event handlers of child processes and signal handlers.
47
+ */
48
+ export declare function exitWithFailure(error: unknown): never;
49
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,IAAI;;;;CAA0C,CAAC;AAC5D,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC;AAExD,yEAAyE;AACzE,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBAGvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAO3E;AAED,sFAAsF;AACtF,qBAAa,UAAW,SAAQ,YAAY;gBAC9B,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO;CAIlD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAG1E;AAaD,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAOnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GAClD,QAAQ,CA4BV;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,GACvE,MAAM,CASR;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAErD"}
@@ -0,0 +1,106 @@
1
+ import chalk from 'chalk';
2
+ import { CommanderError } from 'commander';
3
+ /**
4
+ * Exit codes every command uses: 0 when it did what was asked, 1 when it
5
+ * could not (a failed check, a failed deploy, a missing service), 2 when
6
+ * the command line itself is wrong.
7
+ */
8
+ export const EXIT = { ok: 0, failed: 1, usage: 2 };
9
+ /** A failure a command reports to the user, with what to do about it. */
10
+ export class CommandError extends Error {
11
+ exitCode;
12
+ hints;
13
+ constructor(message, options = {}) {
14
+ super(message, options.cause !== undefined ? { cause: options.cause } : undefined);
15
+ this.name = 'CommandError';
16
+ this.exitCode = options.exitCode ?? EXIT.failed;
17
+ this.hints = options.hints ?? [];
18
+ }
19
+ }
20
+ /** A command line that cannot work: an unknown value, a missing argument. Exits 2. */
21
+ export class UsageError extends CommandError {
22
+ constructor(message, hints = []) {
23
+ super(message, { hints, exitCode: EXIT.usage });
24
+ this.name = 'UsageError';
25
+ }
26
+ }
27
+ export function errorMessage(error) {
28
+ return error instanceof Error ? error.message : String(error);
29
+ }
30
+ /** Whether `COGITATOR_DEBUG` asks for stack traces. */
31
+ export function debugEnabled(env = process.env) {
32
+ const value = env.COGITATOR_DEBUG?.trim().toLowerCase();
33
+ return value !== undefined && value !== '' && value !== '0' && value !== 'false';
34
+ }
35
+ const USAGE_CODES = new Set([
36
+ 'commander.unknownOption',
37
+ 'commander.unknownCommand',
38
+ 'commander.missingArgument',
39
+ 'commander.missingMandatoryOptionValue',
40
+ 'commander.optionMissingArgument',
41
+ 'commander.invalidArgument',
42
+ 'commander.excessArguments',
43
+ 'commander.conflictingOption',
44
+ ]);
45
+ /** The exit code of any error a command ends with. */
46
+ export function exitCodeOf(error) {
47
+ if (error instanceof CommandError)
48
+ return error.exitCode;
49
+ if (error instanceof CommanderError) {
50
+ if (error.exitCode === 0)
51
+ return EXIT.ok;
52
+ return USAGE_CODES.has(error.code) ? EXIT.usage : EXIT.failed;
53
+ }
54
+ return EXIT.failed;
55
+ }
56
+ /**
57
+ * Prints how a command failed: as `{ ok: false, error }` on stdout with
58
+ * `--json`, otherwise as a message with its hints on stderr, with the stack
59
+ * when COGITATOR_DEBUG is set. Returns the exit code.
60
+ */
61
+ export function reportFailure(error, options) {
62
+ const code = exitCodeOf(error);
63
+ const hints = error instanceof CommandError ? error.hints : [];
64
+ if (options.json) {
65
+ console.log(JSON.stringify({
66
+ ok: false,
67
+ error: {
68
+ message: errorMessage(error),
69
+ exitCode: code,
70
+ ...(hints.length > 0 && { hints }),
71
+ },
72
+ }, null, 2));
73
+ return code;
74
+ }
75
+ console.error(chalk.red('✗'), errorMessage(error));
76
+ for (const hint of hints)
77
+ console.error(chalk.dim(` ${hint}`));
78
+ if (debugEnabled(options.env) && error instanceof Error && error.stack) {
79
+ console.error(chalk.dim(error.stack));
80
+ }
81
+ else if (!(error instanceof CommandError)) {
82
+ console.error(chalk.dim(' Set COGITATOR_DEBUG=1 for the stack trace.'));
83
+ }
84
+ return code;
85
+ }
86
+ /** The `Examples:` block of a command's help: each command with what it does. */
87
+ export function examplesHelp(examples) {
88
+ const width = Math.max(...examples.map(([command]) => command.length));
89
+ return [
90
+ '',
91
+ 'Examples:',
92
+ ...examples.map(([command, description]) => ` $ ${command.padEnd(width)} ${chalk.dim(description)}`),
93
+ ].join('\n');
94
+ }
95
+ /** Prints `value` as the JSON a `--json` command answers with. */
96
+ export function printJson(value) {
97
+ console.log(JSON.stringify(value, null, 2));
98
+ }
99
+ /**
100
+ * Ends the process with the failure, for code that cannot throw to the
101
+ * command: event handlers of child processes and signal handlers.
102
+ */
103
+ export function exitWithFailure(error) {
104
+ process.exit(reportFailure(error, { json: false }));
105
+ }
106
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface DocsLocation {
2
+ dir: string;
3
+ version: string;
4
+ }
5
+ export interface DocEntry {
6
+ /** Path inside the docs, such as `core/agents.md`. */
7
+ path: string;
8
+ title: string;
9
+ description: string;
10
+ section: string;
11
+ }
12
+ export interface DocsIndex extends DocsLocation {
13
+ entries: DocEntry[];
14
+ }
15
+ export interface DocHit extends DocEntry {
16
+ /** The heading of the part of the page that matched best. */
17
+ heading?: string;
18
+ snippet: string;
19
+ score: number;
20
+ }
21
+ /**
22
+ * The docs bundled with the @cogitator-ai/core a project installed, falling
23
+ * back to the one the CLI itself depends on.
24
+ */
25
+ export declare function locateDocs(projectDir: string): DocsLocation;
26
+ /** The catalog of pages, read from the `index.md` the docs ship with. */
27
+ export declare function loadDocsIndex(location: DocsLocation): DocsIndex;
28
+ /** Reads a page; `path#heading` returns only that part of the page. */
29
+ export declare function readDoc(index: DocsIndex, reference: string): string;
30
+ /** The anchor GitHub and Fumadocs give a heading. */
31
+ export declare function slugOf(heading: string): string;
32
+ /**
33
+ * Pages that answer `query`, best first. Titles weigh most, then the page
34
+ * descriptions, headings and body text; every term has to appear somewhere on
35
+ * a page for it to count, so `approval tool` finds the approvals guide rather
36
+ * than every page that mentions tools.
37
+ */
38
+ export declare function searchDocs(index: DocsIndex, query: string, limit?: number): DocHit[];
39
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAkB3D;AAKD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAe/D;AAED,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAO9C;AA2ED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CA0C/E"}
@@ -0,0 +1,198 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, join, normalize, sep } from 'node:path';
4
+ const CORE = '@cogitator-ai/core';
5
+ function packageRoot(entry) {
6
+ let dir = dirname(entry);
7
+ for (;;) {
8
+ const manifest = join(dir, 'package.json');
9
+ if (existsSync(manifest)) {
10
+ const parsed = JSON.parse(readFileSync(manifest, 'utf-8'));
11
+ if (typeof parsed === 'object' &&
12
+ parsed !== null &&
13
+ 'name' in parsed &&
14
+ parsed.name === CORE) {
15
+ return dir;
16
+ }
17
+ }
18
+ const parent = dirname(dir);
19
+ if (parent === dir)
20
+ return undefined;
21
+ dir = parent;
22
+ }
23
+ }
24
+ /**
25
+ * The docs bundled with the @cogitator-ai/core a project installed, falling
26
+ * back to the one the CLI itself depends on.
27
+ */
28
+ export function locateDocs(projectDir) {
29
+ for (const base of [join(projectDir, 'package.json'), import.meta.url]) {
30
+ let entry;
31
+ try {
32
+ entry = createRequire(base).resolve(CORE);
33
+ }
34
+ catch {
35
+ continue;
36
+ }
37
+ const root = packageRoot(entry);
38
+ if (!root || !existsSync(join(root, 'docs', 'index.md')))
39
+ continue;
40
+ const manifest = JSON.parse(readFileSync(join(root, 'package.json'), 'utf-8'));
41
+ return { dir: join(root, 'docs'), version: manifest.version };
42
+ }
43
+ throw new Error(`No bundled docs found: install ${CORE} in the project (they ship in node_modules/${CORE}/docs)`);
44
+ }
45
+ const SECTION = /^## (.+)$/;
46
+ const ENTRY = /^- \[(.+?)\]\(([^)]+\.md)\)(?::\s*(.*))?$/;
47
+ /** The catalog of pages, read from the `index.md` the docs ship with. */
48
+ export function loadDocsIndex(location) {
49
+ const entries = [];
50
+ let section = '';
51
+ for (const line of readFileSync(join(location.dir, 'index.md'), 'utf-8').split('\n')) {
52
+ const heading = SECTION.exec(line);
53
+ if (heading) {
54
+ section = heading[1];
55
+ continue;
56
+ }
57
+ const entry = ENTRY.exec(line);
58
+ if (entry) {
59
+ entries.push({ title: entry[1], path: entry[2], description: entry[3] ?? '', section });
60
+ }
61
+ }
62
+ return { ...location, entries };
63
+ }
64
+ /** Reads a page; `path#heading` returns only that part of the page. */
65
+ export function readDoc(index, reference) {
66
+ const [rawPath, anchor] = reference.split('#', 2);
67
+ const path = normalize(rawPath.replace(/^\/+/, '')).split(sep).join('/');
68
+ const known = path === 'index.md' || index.entries.some((entry) => entry.path === path);
69
+ if (!known) {
70
+ throw new Error(`There is no doc page ${rawPath}: search the docs, or read index.md for the list`);
71
+ }
72
+ const text = readFileSync(join(index.dir, path), 'utf-8');
73
+ return anchor ? (sectionOf(text, anchor) ?? text) : text;
74
+ }
75
+ /** The anchor GitHub and Fumadocs give a heading. */
76
+ export function slugOf(heading) {
77
+ return heading
78
+ .toLowerCase()
79
+ .replace(/[`*_~]/g, '')
80
+ .replace(/[^\p{L}\p{N}\s-]/gu, '')
81
+ .trim()
82
+ .replace(/\s+/g, '-');
83
+ }
84
+ function sectionOf(text, anchor) {
85
+ const lines = text.split('\n');
86
+ let inFence = false;
87
+ let start = -1;
88
+ let level = 0;
89
+ for (let i = 0; i < lines.length; i++) {
90
+ if (lines[i].startsWith('```'))
91
+ inFence = !inFence;
92
+ if (inFence)
93
+ continue;
94
+ const heading = /^(#{1,6})\s+(.+)$/.exec(lines[i]);
95
+ if (!heading)
96
+ continue;
97
+ if (start === -1 && slugOf(heading[2]) === anchor.toLowerCase()) {
98
+ start = i;
99
+ level = heading[1].length;
100
+ }
101
+ else if (start !== -1 && heading[1].length <= level) {
102
+ return lines.slice(start, i).join('\n').trimEnd();
103
+ }
104
+ }
105
+ return start === -1 ? undefined : lines.slice(start).join('\n').trimEnd();
106
+ }
107
+ function terms(query) {
108
+ return [...new Set(query.toLowerCase().match(/[\p{L}\p{N}_.-]{2,}/gu) ?? [])];
109
+ }
110
+ function occurrences(haystack, term) {
111
+ let count = 0;
112
+ for (let at = haystack.indexOf(term); at !== -1; at = haystack.indexOf(term, at + term.length)) {
113
+ count++;
114
+ }
115
+ return count;
116
+ }
117
+ function blocksOf(text) {
118
+ const blocks = [];
119
+ let heading;
120
+ let current = [];
121
+ const flush = () => {
122
+ const joined = current.join('\n').trim();
123
+ if (joined)
124
+ blocks.push({ heading, text: joined });
125
+ current = [];
126
+ };
127
+ for (const line of text.split('\n')) {
128
+ const match = /^#{2,6}\s+(.+)$/.exec(line);
129
+ if (match) {
130
+ flush();
131
+ heading = match[1].trim();
132
+ }
133
+ else if (line.trim() === '') {
134
+ flush();
135
+ }
136
+ else {
137
+ current.push(line);
138
+ }
139
+ }
140
+ flush();
141
+ return blocks;
142
+ }
143
+ function snippetOf(text, needles, width = 280) {
144
+ const flat = text.replace(/\s+/g, ' ').trim();
145
+ const lower = flat.toLowerCase();
146
+ const at = Math.min(...needles.map((needle) => lower.indexOf(needle)).filter((index) => index !== -1), flat.length);
147
+ const start = Math.max(0, Math.min(at - 60, flat.length - width));
148
+ const slice = flat.slice(start, start + width);
149
+ return `${start > 0 ? '...' : ''}${slice}${start + width < flat.length ? '...' : ''}`;
150
+ }
151
+ /**
152
+ * Pages that answer `query`, best first. Titles weigh most, then the page
153
+ * descriptions, headings and body text; every term has to appear somewhere on
154
+ * a page for it to count, so `approval tool` finds the approvals guide rather
155
+ * than every page that mentions tools.
156
+ */
157
+ export function searchDocs(index, query, limit = 8) {
158
+ const needles = terms(query);
159
+ if (needles.length === 0)
160
+ return [];
161
+ const hits = [];
162
+ for (const entry of index.entries) {
163
+ const text = readFileSync(join(index.dir, entry.path), 'utf-8');
164
+ const lower = text.toLowerCase();
165
+ if (!needles.every((needle) => lower.includes(needle)))
166
+ continue;
167
+ const title = entry.title.toLowerCase();
168
+ const description = entry.description.toLowerCase();
169
+ let score = 0;
170
+ for (const needle of needles) {
171
+ score += (title.includes(needle) ? 12 : 0) + (description.includes(needle) ? 5 : 0);
172
+ score += Math.min(occurrences(lower, needle), 15);
173
+ }
174
+ const blocks = blocksOf(text);
175
+ let best;
176
+ let bestScore = 0;
177
+ for (const block of blocks) {
178
+ const blockLower = block.text.toLowerCase();
179
+ const headingLower = block.heading?.toLowerCase() ?? '';
180
+ const blockScore = needles.reduce((sum, needle) => sum +
181
+ Math.min(occurrences(blockLower, needle), 5) +
182
+ (headingLower.includes(needle) ? 4 : 0), 0);
183
+ if (blockScore > bestScore) {
184
+ best = block;
185
+ bestScore = blockScore;
186
+ }
187
+ }
188
+ score += bestScore;
189
+ hits.push({
190
+ ...entry,
191
+ ...(best?.heading && { heading: best.heading }),
192
+ snippet: snippetOf(best?.text ?? entry.description, needles),
193
+ score,
194
+ });
195
+ }
196
+ return hits.sort((a, b) => b.score - a.score).slice(0, limit);
197
+ }
198
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export type CheckStatus = 'pass' | 'warn' | 'fail';
2
+ export interface DoctorCheck {
3
+ id: string;
4
+ label: string;
5
+ status: CheckStatus;
6
+ detail: string;
7
+ /** What to do about a warning or failure. */
8
+ fix?: string;
9
+ }
10
+ export interface DoctorContext {
11
+ projectDir: string;
12
+ /** The environment as the project sees it, `.env` loaded. */
13
+ env: Record<string, string | undefined>;
14
+ nodeVersion: string;
15
+ /** Network and service probes; off in tests that only check the project files. */
16
+ probe: boolean;
17
+ fetch?: typeof fetch;
18
+ }
19
+ /** Fills `env` with the variables of the project's `.env` that it does not set already. */
20
+ export declare function loadProjectEnv(projectDir: string, env?: Record<string, string | undefined>): void;
21
+ /** Whether `version` (like `v22.23.1`) satisfies a `>=x.y.z` range, the only form engines use here. */
22
+ export declare function satisfiesMinimum(version: string, range: string): boolean;
23
+ /** Variables `.env.example` lists without a leading `#`: the ones the project requires. */
24
+ export declare function requiredVariables(projectDir: string): string[];
25
+ /**
26
+ * The version of `name` the project resolves, `undefined` when it is not
27
+ * installed. Plug'n'Play installs are read through Yarn's own API, others the
28
+ * way Node looks packages up: node_modules of the project and every directory
29
+ * above it, so hoisted packages of a monorepo count.
30
+ */
31
+ export declare function installedVersion(projectDir: string, name: string): string | undefined;
32
+ /** Host and port of a service URL such as `redis://localhost:6379`, with the scheme's default port. */
33
+ export declare function endpointOf(url: string, defaultPort: number): {
34
+ host: string;
35
+ port: number;
36
+ } | undefined;
37
+ /** Whether a TCP connection to `host:port` opens within `timeoutMs`. */
38
+ export declare function canConnect(host: string, port: number, timeoutMs?: number): Promise<boolean>;
39
+ /** Everything `cogitator doctor` checks, in the order it shows them. */
40
+ export declare function runDoctor(context: DoctorContext): Promise<DoctorCheck[]>;
41
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/utils/doctor.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAmBD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,IAAI,CAMN;AAED,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUxE;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAwDD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBrF;AAmKD,uGAAuG;AACvG,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAU5C;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAWzF;AA+CD,wEAAwE;AACxE,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA0B9E"}