autonomous-sdlc-harness 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/commands/docs.js +219 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/doctor.js +5 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +138 -44
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/registry.js +2 -0
- package/dist/commands/registry.js.map +1 -1
- package/dist/config/check.js +25 -5
- package/dist/config/check.js.map +1 -1
- package/dist/config/model.js +18 -1
- package/dist/config/model.js.map +1 -1
- package/dist/core/layerGapRemedy.js +3 -2
- package/dist/core/layerGapRemedy.js.map +1 -1
- package/dist/core/pluginIdentity.js +33 -0
- package/dist/core/pluginIdentity.js.map +1 -0
- package/dist/core/report.js +9 -0
- package/dist/core/report.js.map +1 -1
- package/dist/core/writer.js +22 -5
- package/dist/core/writer.js.map +1 -1
- package/dist/detect/presets.js +35 -26
- package/dist/detect/presets.js.map +1 -1
- package/dist/detect/signals.js +13 -9
- package/dist/detect/signals.js.map +1 -1
- package/dist/doctor/checks.js +141 -11
- package/dist/doctor/checks.js.map +1 -1
- package/dist/generators/claudeContext.js +4 -5
- package/dist/generators/claudeContext.js.map +1 -1
- package/dist/generators/harnessConfig.js +13 -5
- package/dist/generators/harnessConfig.js.map +1 -1
- package/dist/generators/outerLoopScripts.js +13 -0
- package/dist/generators/outerLoopScripts.js.map +1 -1
- package/dist/generators/permissionProfile.js +51 -9
- package/dist/generators/permissionProfile.js.map +1 -1
- package/dist/generators/projectSettings.js +5 -15
- package/dist/generators/projectSettings.js.map +1 -1
- package/dist/generators/repoRoot.js +130 -23
- package/dist/generators/repoRoot.js.map +1 -1
- package/dist/generators/scripts.js +4 -1
- package/dist/generators/scripts.js.map +1 -1
- package/dist/machine/paths.js +16 -4
- package/dist/machine/paths.js.map +1 -1
- package/dist/machine/plugins.js +2 -1
- package/dist/machine/plugins.js.map +1 -1
- package/dist/retrieval/chunk.js +158 -0
- package/dist/retrieval/chunk.js.map +1 -0
- package/dist/retrieval/corpus.js +75 -0
- package/dist/retrieval/corpus.js.map +1 -0
- package/dist/retrieval/models.js +175 -0
- package/dist/retrieval/models.js.map +1 -0
- package/dist/retrieval/queryLog.js +68 -0
- package/dist/retrieval/queryLog.js.map +1 -0
- package/dist/retrieval/refresh.js +55 -0
- package/dist/retrieval/refresh.js.map +1 -0
- package/dist/retrieval/runtime.js +171 -0
- package/dist/retrieval/runtime.js.map +1 -0
- package/dist/retrieval/search.js +118 -0
- package/dist/retrieval/search.js.map +1 -0
- package/dist/retrieval/server.js +197 -0
- package/dist/retrieval/server.js.map +1 -0
- package/dist/retrieval/session.js +41 -0
- package/dist/retrieval/session.js.map +1 -0
- package/dist/retrieval/setup.js +120 -0
- package/dist/retrieval/setup.js.map +1 -0
- package/dist/retrieval/store.js +170 -0
- package/dist/retrieval/store.js.map +1 -0
- package/package.json +22 -3
- package/templates/claude/CLAUDE.md +4 -4
- package/templates/claude/README.md +3 -1
- package/templates/claude/settings.autonomous.json +1 -1
- package/templates/claude/settings.autonomous.retrieval.json +9 -0
- package/templates/repo/README.md +2 -0
- package/templates/repo/gitignore +1 -0
- package/templates/repo/gitignore.retrieval +2 -0
- package/templates/repo/mcp.retrieval.json +11 -0
- package/templates/scripts/README.md +1 -1
- package/templates/scripts/autonomous-notify.sh +10 -4
- package/templates/scripts/autonomous-watcher.sh +336 -110
- package/templates/scripts/cleanup-merged-worktrees.sh +126 -8
- package/templates/scripts/docs-search-server.sh +64 -0
- package/templates/scripts/lib/harness-run-lib.sh +19 -3
- package/templates/scripts/restart-watcher.sh +4 -3
- package/templates/state-dir/business_parity_reviews/README.md +1 -1
- package/templates/state-dir/clarification_digests/README.md +1 -1
- package/templates/state-dir/clarifications/README.md +4 -4
package/README.md
CHANGED
|
@@ -5,13 +5,14 @@ npx autonomous-sdlc-harness init # wire a repositor
|
|
|
5
5
|
npx autonomous-sdlc-harness doctor # re-check a wired one; the exit status is the contract
|
|
6
6
|
npx autonomous-sdlc-harness config list | get <key> | set <key> <value>
|
|
7
7
|
npx autonomous-sdlc-harness daemon <install|start|stop|list>
|
|
8
|
+
npx autonomous-sdlc-harness docs <index|search <query>|serve|fetch-models> # opt-in; needs docs.retrieval on
|
|
8
9
|
```
|
|
9
10
|
|
|
10
11
|
Node `>=20.11.0`. Licence Apache-2.0 — `LICENSE` and `NOTICE` ship beside this file. Every command takes `-h`, `-v`, `--dry-run`, `--force`, `--quiet` (progress narration only — results, warnings and failures still print), `--non-interactive` and `--cwd <path>`, and exits `0` (did what it was asked), `1` (a refusal or a failed check, `doctor` FAIL included) or `2` (an internal fault). What each command writes, the `init` re-run contract, the stack-detection table, the enumerated `doctor` checks and the failure modes the generated permission profile encodes are in [`docs/cli.md`](https://github.com/firu-daniel/autonomous-sdlc-harness/blob/main/docs/cli.md) — which the published tarball does not carry, so every repository link on this page is an absolute URL.
|
|
11
12
|
|
|
12
|
-
The npm package that carries the harness's **outer loop** — `init`, `doctor`, `config` and `daemon
|
|
13
|
+
The npm package that carries the harness's **outer loop** — `init`, `doctor`, `config` and `daemon` — and `docs`, the opt-in docs-retrieval search over the docs catalog and conventions documents. The process assets those runs execute — agents, slash commands, hooks, instructions and samples — are not here; they ship as the sibling `plugin/` Claude Code plugin. This package exists at all because a plugin cannot write a repository's `settings.json`, and getting that permission profile right is the highest-friction part of adoption. Installing that plugin is a step of its own, separate from installing this package — see the harness root [`README.md`](https://github.com/firu-daniel/autonomous-sdlc-harness/blob/main/README.md) `## Quick start` for the lettered sequence an adopter runs.
|
|
13
14
|
|
|
14
|
-
**What the
|
|
15
|
+
**What the five subcommands do.** `init` wires an adopting repository in one deterministic pass: it detects the stack, then writes the configuration, the wrapper scripts, the run-artifact tree, the conventions stubs, the permission profile, the committable project settings, the repository-root files and the pre-push hook — creating what is absent and keeping what the adopter has edited. `doctor` re-checks a wired repository — git and worktrees, that the configured default branch still resolves, the daemon backend, the configuration, the state directory, the ignore rules, which notification settings file the notifier resolves, whether this checkout is in the machine-local registry of installed daemons, the plugin wiring and the permission profile — and reports every finding, with the exit status as the contract; [`docs/cli.md`](https://github.com/firu-daniel/autonomous-sdlc-harness/blob/main/docs/cli.md) §7 is the enumerated list and the severity each check carries. `config` reads and updates one dotted key of `harness.config.json` at a time, refusing a key the file may not carry and backing the file up before each write. `daemon` installs, starts and stops this repository's run daemon on whichever service manager the host has, and lists the repositories on this machine one has been installed for. `docs` builds and queries a local search index over `docs.root` and the conventions documents, and serves it over stdio MCP as `search_docs` when `docs.retrieval` is on. It is **off by default, and not yet measured** against index-first navigation; the verb is in [`docs/cli.md`](https://github.com/firu-daniel/autonomous-sdlc-harness/blob/main/docs/cli.md) and the design in [`docs/retrieval.md`](https://github.com/firu-daniel/autonomous-sdlc-harness/blob/main/docs/retrieval.md).
|
|
15
16
|
|
|
16
17
|
Five decisions are recorded here so they are not re-litigated later:
|
|
17
18
|
|
|
@@ -21,4 +22,4 @@ Five decisions are recorded here so they are not re-litigated later:
|
|
|
21
22
|
- **Never shell out to `rm -rf`.** A user-level `permissions.deny` rule on it is realistic, deny is evaluated before any allow and cannot be overridden, so a teardown implemented as a shelled-out `rm -rf` is silently blocked with no useful error. Use Node's in-process `fs.rm` for every removal.
|
|
22
23
|
- **The run watcher's path is derived from `scriptsDir`, not a config key of its own.** `init` writes the watcher into the configured scripts directory with the rest of the outer-loop set, so `daemon` resolves it as `<repoRoot>/<scriptsDir>/autonomous-watcher.sh`: `scriptsDir` is the one key that moves it, and a second key naming the same location could only ever disagree with it. That also keeps the unit's `ExecStart` inside the repository its `WorkingDirectory` names — a CLI run through `npx` lives in a cache directory that can be evicted under a long-running service. `--watcher` overrides the resolution for developing against a watcher that is not the written one. (This decision replaces an earlier package-relative one; `scripts/README.md` records why.)
|
|
23
24
|
|
|
24
|
-
TypeScript in `src/` compiles with `tsc` to `dist/`, which is what `bin` points at; `templates/` holds generator templates and is deliberately outside the compiler's `include`. Two families live there: the **wrapper** scripts `init` renders from a detected command line, and the **outer-loop** shell assets — the run watcher, its restart wrapper, the notifier and its stream formatter, the commit / push / branch-refresh / worktree / cleanup wrappers and the library they share — which `init` copies verbatim into the same `scriptsDir` because each reads `harness.config.json` at run time. `scripts/` keeps only the daemon unit templates the `daemon` subcommand renders into the account's home directory; it is likewise uncompiled and carried into the published tarball by `files` alongside `templates/` (`scripts/README.md` records why the outer-loop set is not there). A watcher that is missing — deleted, or left behind when `scriptsDir` moved — is a `doctor` warning and a `daemon install` refusal, repaired by re-running `init`.
|
|
25
|
+
TypeScript in `src/` compiles with `tsc` to `dist/`, which is what `bin` points at; `templates/` holds generator templates and is deliberately outside the compiler's `include`. Two families live there: the **wrapper** scripts `init` renders from a detected command line, and the **outer-loop** shell assets — the run watcher, its restart wrapper, the notifier and its stream formatter, the commit / push / branch-refresh / worktree / cleanup wrappers, the docs-retrieval server launcher and the library they share — which `init` copies verbatim into the same `scriptsDir` because each reads `harness.config.json` at run time. `scripts/` keeps only the daemon unit templates the `daemon` subcommand renders into the account's home directory; it is likewise uncompiled and carried into the published tarball by `files` alongside `templates/` (`scripts/README.md` records why the outer-loop set is not there). A watcher that is missing — deleted, or left behind when `scriptsDir` moved — is a `doctor` warning and a `daemon install` refusal, repaired by re-running `init`.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command: `docs` — search the docs catalog and the conventions documents: build the index, query it,
|
|
3
|
+
* serve it over MCP, and fetch the models it runs on. Its sub-verbs are `index`, `search`, `serve` and
|
|
4
|
+
* `fetch-models`.
|
|
5
|
+
*
|
|
6
|
+
* **The rule this module exists to enforce: the sub-verb table is the one declaration of the
|
|
7
|
+
* sub-verbs.** The usage lines, the refusal naming the legal sub-verbs and the dispatch all read
|
|
8
|
+
* {@link SUB_VERBS}, so a sub-verb added there cannot be missing from any of them. Every sub-verb that
|
|
9
|
+
* reads the index opens it through `retrieval/session.ts` → `openRetrieval`, which owns the refusals
|
|
10
|
+
* that precede any load.
|
|
11
|
+
*
|
|
12
|
+
* **`--dry-run` never persists the index.** The global flag promises that nothing is written, and the
|
|
13
|
+
* only thing a sub-verb writes is the per-checkout index: `index` and `search` build it in memory, the
|
|
14
|
+
* same path as `--in-memory`, and `serve` refuses the flag before opening anything.
|
|
15
|
+
*/
|
|
16
|
+
import { requireConfig } from '../config/io.js';
|
|
17
|
+
import { EXIT, HarnessError } from '../core/errors.js';
|
|
18
|
+
import { resolveRepoRoot } from '../core/git.js';
|
|
19
|
+
import { DEFAULT_RESULTS, MAX_RESULTS, renderResults, SEARCH_MODES, searchDocs, } from '../retrieval/search.js';
|
|
20
|
+
import { EMBEDDING_MODEL, fetchModels, modelFilesPresent, RERANK_MODEL, RETRIEVAL_STUB_ENV, stubModelsSelected, } from '../retrieval/models.js';
|
|
21
|
+
import { ownManifestString, retrievalModelCacheDir } from '../retrieval/runtime.js';
|
|
22
|
+
import { serveDocs } from '../retrieval/server.js';
|
|
23
|
+
import { openRetrieval } from '../retrieval/session.js';
|
|
24
|
+
const SUMMARY = 'Search the docs catalog and conventions: build the index, query it, serve it over MCP';
|
|
25
|
+
const CLI = 'npx autonomous-sdlc-harness';
|
|
26
|
+
const IN_MEMORY_FLAG = '--in-memory';
|
|
27
|
+
/** The refusal suffix every bad invocation carries. */
|
|
28
|
+
function helpHint() {
|
|
29
|
+
return `run \`${CLI} docs --help\` for the usage`;
|
|
30
|
+
}
|
|
31
|
+
/** The boolean flags `args` sets, refusing any token not in `allowed`. */
|
|
32
|
+
function parseFlags(verb, args, allowed) {
|
|
33
|
+
const set = new Set();
|
|
34
|
+
for (const token of args) {
|
|
35
|
+
if (!allowed.includes(token)) {
|
|
36
|
+
const what = token.startsWith('-') ? 'unknown option' : 'unexpected argument';
|
|
37
|
+
throw new HarnessError(`docs ${verb}: ${what} ${JSON.stringify(token)}; ${helpHint()}`);
|
|
38
|
+
}
|
|
39
|
+
set.add(token);
|
|
40
|
+
}
|
|
41
|
+
return set;
|
|
42
|
+
}
|
|
43
|
+
/** `docs index [--in-memory]`: refresh the checkout's index, or build one in memory. */
|
|
44
|
+
async function index(ctx, args) {
|
|
45
|
+
const flags = parseFlags('index', args, [IN_MEMORY_FLAG]);
|
|
46
|
+
const repoRoot = resolveRepoRoot(ctx.cwd);
|
|
47
|
+
const config = requireConfig(repoRoot);
|
|
48
|
+
const session = await openRetrieval({ repoRoot, config, inMemory: flags.has(IN_MEMORY_FLAG) || ctx.flags.dryRun });
|
|
49
|
+
try {
|
|
50
|
+
const result = await session.refresh();
|
|
51
|
+
for (const warning of result.warnings)
|
|
52
|
+
ctx.report.warn(warning);
|
|
53
|
+
ctx.report.result(`docs index: ${result.files} files, ${result.chunks} chunks; embedded ${result.embedded}, unchanged ${result.unchanged}, deleted ${result.deleted}${result.rebuilt ? '; rebuilt for a new embedder' : ''}`);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await session.close();
|
|
57
|
+
}
|
|
58
|
+
return EXIT.OK;
|
|
59
|
+
}
|
|
60
|
+
const K_FLAG = '--k';
|
|
61
|
+
const MODE_FLAG = '--mode';
|
|
62
|
+
const DEFAULT_MODE = 'fused-rerank';
|
|
63
|
+
/**
|
|
64
|
+
* `docs search <query> [--k <n>] [--mode <mode>]`: refresh the checkout's index, then answer the query.
|
|
65
|
+
* An abstention exits 0; it is an answer, not an error.
|
|
66
|
+
*/
|
|
67
|
+
async function search(ctx, args) {
|
|
68
|
+
const modes = SEARCH_MODES.join(', ');
|
|
69
|
+
let query;
|
|
70
|
+
let k = DEFAULT_RESULTS;
|
|
71
|
+
let mode = DEFAULT_MODE;
|
|
72
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
73
|
+
const token = args[i] ?? '';
|
|
74
|
+
if (token === K_FLAG || token === MODE_FLAG) {
|
|
75
|
+
const value = args[i + 1];
|
|
76
|
+
if (value === undefined)
|
|
77
|
+
throw new HarnessError(`docs search: ${token} needs a value; ${helpHint()}`);
|
|
78
|
+
i += 1;
|
|
79
|
+
if (token === K_FLAG) {
|
|
80
|
+
if (!/^[0-9]+$/.test(value)) {
|
|
81
|
+
throw new HarnessError(`docs search: ${K_FLAG} takes a whole number, not ${JSON.stringify(value)}; ${helpHint()}`);
|
|
82
|
+
}
|
|
83
|
+
k = Number(value);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const found = SEARCH_MODES.find((candidate) => candidate === value);
|
|
87
|
+
if (found === undefined) {
|
|
88
|
+
throw new HarnessError(`docs search: unknown mode ${JSON.stringify(value)}; expected ${modes}; ${helpHint()}`);
|
|
89
|
+
}
|
|
90
|
+
mode = found;
|
|
91
|
+
}
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (token.startsWith('-') || query !== undefined) {
|
|
95
|
+
const what = token.startsWith('-') ? 'unknown option' : 'unexpected argument';
|
|
96
|
+
throw new HarnessError(`docs search: ${what} ${JSON.stringify(token)}; ${helpHint()}`);
|
|
97
|
+
}
|
|
98
|
+
query = token;
|
|
99
|
+
}
|
|
100
|
+
if (query === undefined || query.trim() === '') {
|
|
101
|
+
throw new HarnessError(`docs search: no query given; ${helpHint()}`);
|
|
102
|
+
}
|
|
103
|
+
const repoRoot = resolveRepoRoot(ctx.cwd);
|
|
104
|
+
const config = requireConfig(repoRoot);
|
|
105
|
+
const session = await openRetrieval({ repoRoot, config, inMemory: ctx.flags.dryRun });
|
|
106
|
+
try {
|
|
107
|
+
const refreshed = await session.refresh();
|
|
108
|
+
for (const warning of refreshed.warnings)
|
|
109
|
+
ctx.report.warn(warning);
|
|
110
|
+
const result = await searchDocs({
|
|
111
|
+
store: session.store,
|
|
112
|
+
embedder: session.embedder,
|
|
113
|
+
reranker: session.reranker,
|
|
114
|
+
query,
|
|
115
|
+
k,
|
|
116
|
+
mode,
|
|
117
|
+
});
|
|
118
|
+
ctx.report.result(renderResults(result));
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
await session.close();
|
|
122
|
+
}
|
|
123
|
+
return EXIT.OK;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* `docs serve`: the stdio MCP server, through `retrieval/server.ts` → `serveDocs`. **Nothing but the
|
|
127
|
+
* transport may write to stdout** — a stray byte corrupts the JSON-RPC stream and an agent sees a tool
|
|
128
|
+
* that never loads — so this sub-verb writes no `result` line and sends every warning to stderr
|
|
129
|
+
* through `report.warn`. A refusal before the transport starts exits non-zero with its message on
|
|
130
|
+
* stderr.
|
|
131
|
+
*/
|
|
132
|
+
async function serve(ctx, args) {
|
|
133
|
+
parseFlags('serve', args, []);
|
|
134
|
+
if (ctx.flags.dryRun) {
|
|
135
|
+
throw new HarnessError(`docs serve: --dry-run is not supported, because a server persists the index it refreshes; ${helpHint()}`);
|
|
136
|
+
}
|
|
137
|
+
const repoRoot = resolveRepoRoot(ctx.cwd);
|
|
138
|
+
const config = requireConfig(repoRoot);
|
|
139
|
+
await serveDocs({ repoRoot, config, version: ownManifestString('version'), report: ctx.report });
|
|
140
|
+
return EXIT.OK;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* `docs fetch-models`: download both models into the shared model cache. **The one command that reaches
|
|
144
|
+
* the network.** `init` runs it at setup time (`retrieval/setup.ts`), and a person may run it by hand.
|
|
145
|
+
* It refuses under {@link RETRIEVAL_STUB_ENV} before loading anything, because a stub run must never
|
|
146
|
+
* download.
|
|
147
|
+
*/
|
|
148
|
+
async function fetchModelsVerb(ctx, args) {
|
|
149
|
+
parseFlags('fetch-models', args, []);
|
|
150
|
+
if (stubModelsSelected()) {
|
|
151
|
+
throw new HarnessError(`docs fetch-models: refusing to download while ${RETRIEVAL_STUB_ENV} is set, because a stub run never downloads; unset it to fetch the real models`);
|
|
152
|
+
}
|
|
153
|
+
await fetchModels();
|
|
154
|
+
const dir = retrievalModelCacheDir();
|
|
155
|
+
const { present, missing } = modelFilesPresent(dir);
|
|
156
|
+
if (!present) {
|
|
157
|
+
throw new HarnessError(`docs fetch-models: the download finished but ${dir} is missing ${missing.join(', ')}`);
|
|
158
|
+
}
|
|
159
|
+
ctx.report.result(`docs fetch-models: ${EMBEDDING_MODEL} and ${RERANK_MODEL} cached in ${dir}`);
|
|
160
|
+
return EXIT.OK;
|
|
161
|
+
}
|
|
162
|
+
const SUB_VERBS = [
|
|
163
|
+
{
|
|
164
|
+
name: 'index',
|
|
165
|
+
synopsis: `index [${IN_MEMORY_FLAG}]`,
|
|
166
|
+
summary: `Refresh this checkout's index; ${IN_MEMORY_FLAG} builds one in memory and writes nothing`,
|
|
167
|
+
run: index,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'search',
|
|
171
|
+
synopsis: `search <query> [${K_FLAG} <n>] [${MODE_FLAG} <${SEARCH_MODES.join('|')}>]`,
|
|
172
|
+
summary: `Refresh the index and search it; ${K_FLAG} defaults to ${DEFAULT_RESULTS} (at most ${MAX_RESULTS}), ${MODE_FLAG} to ${DEFAULT_MODE}`,
|
|
173
|
+
run: search,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'serve',
|
|
177
|
+
synopsis: 'serve',
|
|
178
|
+
summary: 'Serve search_docs over stdio MCP; stdout carries the protocol and nothing else',
|
|
179
|
+
run: serve,
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'fetch-models',
|
|
183
|
+
synopsis: 'fetch-models',
|
|
184
|
+
summary: 'Download both models into the shared model cache; the one sub-verb that reaches the network',
|
|
185
|
+
run: fetchModelsVerb,
|
|
186
|
+
},
|
|
187
|
+
];
|
|
188
|
+
function usage() {
|
|
189
|
+
const width = Math.max(...SUB_VERBS.map((verb) => verb.synopsis.length));
|
|
190
|
+
return [
|
|
191
|
+
`The sub-verb is required: ${CLI} docs <${SUB_VERBS.map((verb) => verb.name).join('|')}>`,
|
|
192
|
+
'',
|
|
193
|
+
'Sub-verbs:',
|
|
194
|
+
...SUB_VERBS.map((verb) => ` ${verb.synopsis.padEnd(width)} ${verb.summary}`),
|
|
195
|
+
'',
|
|
196
|
+
'Retrieval must be on (phases.docs and docs.retrieval true) and the model cache present;',
|
|
197
|
+
'init sets both up. --dry-run builds the index in memory for index and search and writes',
|
|
198
|
+
'nothing; serve refuses it.',
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
async function run(ctx) {
|
|
202
|
+
const [name, ...args] = ctx.argv;
|
|
203
|
+
const names = SUB_VERBS.map((verb) => verb.name).join(', ');
|
|
204
|
+
if (name === undefined)
|
|
205
|
+
throw new HarnessError(`docs: no sub-verb given; expected ${names}; ${helpHint()}`);
|
|
206
|
+
const verb = SUB_VERBS.find((candidate) => candidate.name === name);
|
|
207
|
+
if (verb === undefined) {
|
|
208
|
+
const what = name.startsWith('-') ? 'unknown option' : 'unknown sub-verb';
|
|
209
|
+
throw new HarnessError(`docs: ${what} ${JSON.stringify(name)}; expected ${names}; ${helpHint()}`);
|
|
210
|
+
}
|
|
211
|
+
return verb.run(ctx, args);
|
|
212
|
+
}
|
|
213
|
+
export const DOCS_COMMAND = {
|
|
214
|
+
name: 'docs',
|
|
215
|
+
summary: SUMMARY,
|
|
216
|
+
usage: usage(),
|
|
217
|
+
run,
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -74,10 +74,10 @@ const OWN_FLAGS = Object.freeze([TEST_NOTIFICATION_FLAG, CHECK_REGISTRY_FLAG]);
|
|
|
74
74
|
/**
|
|
75
75
|
* The event word the test send carries.
|
|
76
76
|
*
|
|
77
|
-
* Deliberately **not** one of the notifier's
|
|
78
|
-
* by the watcher — `completed`, `parked`, `paused`, `failed`, `launched`, `resumed
|
|
79
|
-
* from here would put a message an operator reads as a real run's
|
|
80
|
-
* ones arrive in. The script's header states that an unrecognized word is still delivered, under a
|
|
77
|
+
* Deliberately **not** one of the notifier's seven lifecycle words. That vocabulary is a contract
|
|
78
|
+
* owned by the watcher — `completed`, `parked`, `paused`, `failed`, `launched`, `resumed`,
|
|
79
|
+
* `park_loop` — and sending one from here would put a message an operator reads as a real run's
|
|
80
|
+
* outcome into the same stream real ones arrive in. The script's header states that an unrecognized word is still delivered, under a
|
|
81
81
|
* generic title, and its dispatcher's `*)` branch is where this one lands: the message reads
|
|
82
82
|
* `Run '<branch>': doctor-test.` and cannot be mistaken for a lifecycle event.
|
|
83
83
|
*/
|
|
@@ -113,7 +113,7 @@ const DOCTOR_USAGE = Object.freeze([
|
|
|
113
113
|
'',
|
|
114
114
|
'A default run sends nothing: the notifications check reads which settings file the notifier',
|
|
115
115
|
`resolves and prints no value from it, and only ${TEST_NOTIFICATION_FLAG} delivers a message. The`,
|
|
116
|
-
`test send carries the event word ${TEST_NOTIFICATION_EVENT}, which is none of the watcher's
|
|
116
|
+
`test send carries the event word ${TEST_NOTIFICATION_EVENT}, which is none of the watcher's seven`,
|
|
117
117
|
"lifecycle words, so it cannot be read as a real run's outcome. It does not change the exit status:",
|
|
118
118
|
'a best-effort notifier that could not reach an endpoint is not a failed check. Under --dry-run it',
|
|
119
119
|
'reports the invocation it would make and sends nothing, after every refusal a real run would make.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,SAAS,GAGV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAG5F,8FAA8F;AAC9F,MAAM,OAAO,GACX,6GAA6G,CAAC;AAEhH,4EAA4E;AAC5E,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,uEAAuE;AACvE,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,SAAS,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAElG;;;;;;;;;GASG;AACH,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,sGAAsG;AACtG,MAAM,YAAY,GAA0C;IAC1D,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,YAAY,GAAsB,MAAM,CAAC,MAAM,CAAC;IACpD,sDAAsD;IACtD,KAAK,sBAAsB,4DAA4D;IACvF,+DAA+D;IAC/D,KAAK,mBAAmB,qEAAqE;IAC7F,iEAAiE;IACjE,EAAE;IACF,6FAA6F;IAC7F,kDAAkD,sBAAsB,0BAA0B;IAClG,oCAAoC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|