@tech-leads-club/harness-toolkit 0.3.0 → 0.3.2

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 (44) hide show
  1. package/README.md +46 -11
  2. package/bin/tlc-build.mjs +35 -6
  3. package/config.example.json +1 -1
  4. package/dist/chunks/compact-before-1e4qg1qt.mjs +1185 -0
  5. package/dist/chunks/compact-before-2hpbfxm5.mjs +5782 -0
  6. package/dist/chunks/compact-before-49j320yp.mjs +1283 -0
  7. package/dist/chunks/compact-before-4jrq0sqs.mjs +61 -0
  8. package/dist/chunks/compact-before-6w8n1vh1.mjs +186 -0
  9. package/dist/chunks/compact-before-7sdmwswh.mjs +52 -0
  10. package/dist/chunks/compact-before-beqpmqrm.mjs +187 -0
  11. package/dist/chunks/compact-before-j9y4jgn4.mjs +845 -0
  12. package/dist/chunks/compact-before-pk86tqx2.mjs +118 -0
  13. package/dist/chunks/compact-before-pkqk5v29.mjs +137 -0
  14. package/dist/chunks/compact-before-w1293m4n.mjs +315 -0
  15. package/dist/chunks/compact-before-wnnds45y.mjs +26 -0
  16. package/dist/chunks/compact-before-wt2c3nh4.mjs +551 -0
  17. package/dist/compact-before.mjs +13 -7961
  18. package/dist/doctor.mjs +33 -8480
  19. package/dist/help-topic.mjs +6 -14
  20. package/dist/init-project.mjs +36 -793
  21. package/dist/install-runtime.mjs +18 -1039
  22. package/dist/lessons-cli.mjs +25 -7043
  23. package/dist/obs-cli.mjs +27 -7037
  24. package/dist/price-lookup.mjs +11 -201
  25. package/dist/prompt-submit.mjs +14 -7974
  26. package/dist/refresh-model-prices.mjs +26 -7061
  27. package/dist/response-after.mjs +11 -7961
  28. package/dist/run.mjs +10 -7960
  29. package/dist/session-end.mjs +14 -8029
  30. package/dist/session-start.mjs +20 -8075
  31. package/dist/shim.mjs +18 -7024
  32. package/dist/stop.mjs +29 -8042
  33. package/dist/subagent-start.mjs +13 -7983
  34. package/dist/subagent-stop.mjs +11 -7961
  35. package/dist/support.mjs +21 -7168
  36. package/dist/tlc-cli.mjs +65 -8200
  37. package/dist/tool-after.mjs +20 -8176
  38. package/dist/tool-before.mjs +15 -7990
  39. package/dist/tool-failure.mjs +14 -7961
  40. package/dist/uninstall-runtime.mjs +61 -1008
  41. package/docs/log.md +4 -0
  42. package/package.json +2 -2
  43. package/src/core/release/release.version.ts +10 -4
  44. package/tools/install-runtime.ts +21 -1
package/docs/log.md CHANGED
@@ -13,6 +13,10 @@ Generated from `docs/decisions/` — do not edit by hand. Run `node tools/render
13
13
  A reserved file of the [OKF v0.1](/decisions/ad-013.md) bundle: entries grouped under ISO 8601 headings,
14
14
  newest first. For what landed in which npm release, see `CHANGELOG.md` at the repository root.
15
15
 
16
+ ## 2026-08-20
17
+
18
+ - **AD-098** — One copy of the core, not twenty-four ([/decisions/ad-098.md](/decisions/ad-098.md))
19
+
16
20
  ## 2026-08-19
17
21
 
18
22
  - **AD-081** — The manifest npm publishes is checked here, because the release runner was the only thing reading it ([/decisions/ad-081.md](/decisions/ad-081.md))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tech-leads-club/harness-toolkit",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "description": "Multi-provider agent steering: gates, follow-up, handoff, policy",
6
6
  "keywords": [
@@ -51,7 +51,7 @@
51
51
  },
52
52
  "homepage": "https://github.com/tech-leads-club/harness-toolkit#readme",
53
53
  "devDependencies": {
54
- "@biomejs/biome": "^2.5.6",
54
+ "@biomejs/biome": "^2.5.9",
55
55
  "@types/node": "^24.13.3",
56
56
  "typescript": "^7.0.2"
57
57
  }
@@ -54,12 +54,18 @@ const SUBJECT = /^(?<type>[a-z]+)(?:\((?<scope>[^)]*)\))?(?<breaking>!)?:\s*(?<r
54
54
  const BREAKING_FOOTER = /^BREAKING[ -]CHANGE:/m;
55
55
 
56
56
  /**
57
- * invariant: `feat` and `fix` are the only types that release. Everything else — `docs`, `chore`, `refactor`,
58
- * `test`, `ci`, `build`, `perf`, `style` — lands without moving the version. That is what stops the release's own
59
- * commit from earning the next version and looping, which this pipeline did six times in nine minutes.
57
+ * invariant: `feat`, `fix` and `perf` release. Everything else — `docs`, `chore`, `refactor`, `test`, `ci`,
58
+ * `build`, `style` — lands without moving the version, which together with the inert scopes is what stops the
59
+ * release's own `chore(release):` commit from earning the next version and looping, as this pipeline did six times
60
+ * in nine minutes ([/decisions/ad-087.md](/decisions/ad-087.md)).
61
+ *
62
+ * hazard: `perf` was excluded with the loop as the stated reason, and the loop had nothing to do with it — `chore`
63
+ * and the inert scopes cover that on their own. The cost was measured: a change that cut the published package
64
+ * from 1.6 MB to 426 kB and about 4 ms from every hook sat on `main` unreleased, waiting for an unrelated `fix` to
65
+ * carry it to anybody ([/decisions/ad-098.md](/decisions/ad-098.md)).
60
66
  */
61
67
  export const MINOR_TYPES: ReadonlySet<string> = new Set(["feat"]);
62
- export const PATCH_TYPES: ReadonlySet<string> = new Set(["fix"]);
68
+ export const PATCH_TYPES: ReadonlySet<string> = new Set(["fix", "perf"]);
63
69
 
64
70
  /**
65
71
  * invariant: a scope on this list never releases, whatever the type. `fix(ci)` and `fix(gate)` are repository
@@ -1,7 +1,7 @@
1
1
  import { spawnSync } from "node:child_process";
2
2
  import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
3
3
  import { join, relative, resolve, sep } from "node:path";
4
- import { NPM_MARKER, NPM_PACKAGE } from "../bin/tlc-cli.ts";
4
+ import { NPM_MARKER, NPM_PACKAGE, wireRuntime } from "../bin/tlc-cli.ts";
5
5
  import { linkDir } from "../src/platform/links.ts";
6
6
  import { conventionalRuntimeHome, runtimeHome, runtimeHomeWasChosen } from "../src/platform/paths.ts";
7
7
  import { type Row, render, type Screen } from "../src/platform/screen.ts";
@@ -242,6 +242,26 @@ if (import.meta.main) {
242
242
  if (report.kind === "refused") {
243
243
  process.exit(1);
244
244
  }
245
+
246
+ /**
247
+ * hazard: this command put the code in place and wired nothing. The provider hooks and the skill links came
248
+ * from the tail of `install.sh`, so deleting that script left a fresh `npm i -g` followed by
249
+ * `tlc harness install` with two empty provider directories and a harness that does nothing at all until
250
+ * `update` happens to run. Found by installing the published package on a clean machine and reading the output
251
+ * ([/decisions/ad-034.md](/decisions/ad-034.md), [/decisions/ad-097.md](/decisions/ad-097.md)).
252
+ *
253
+ * invariant: install and update wire through the same function. There is no third copy of this.
254
+ */
255
+ const wired = wireRuntime(dest, dest);
256
+ for (const line of wired.lines) {
257
+ console.log(`install: ${line}`);
258
+ }
259
+ if (wired.missingSkill) {
260
+ console.error(`install: missing skill at ${join(dest, "skills", "harness-init")}`);
261
+ process.exit(1);
262
+ }
263
+
245
264
  fetchPrices(dest);
265
+ console.log("install: ok — restart Cursor or Claude Code, then run `tlc harness doctor`");
246
266
  process.exit(report.missing.length > 0 ? 1 : 0);
247
267
  }