compounding-loop 0.4.0 → 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 (128) hide show
  1. package/README.md +152 -128
  2. package/dist/cli/draft.js +69 -0
  3. package/dist/cli/draft.js.map +1 -0
  4. package/dist/cli/eval.js +186 -0
  5. package/dist/cli/eval.js.map +1 -0
  6. package/dist/cli/hook.js +92 -0
  7. package/dist/cli/hook.js.map +1 -0
  8. package/dist/cli/index.js +336 -1
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/init.js +41 -4
  11. package/dist/cli/init.js.map +1 -1
  12. package/dist/cli/lanesInit.js +8 -2
  13. package/dist/cli/lanesInit.js.map +1 -1
  14. package/dist/cli/pace.js +41 -0
  15. package/dist/cli/pace.js.map +1 -0
  16. package/dist/cli/pause.js +3 -3
  17. package/dist/cli/pause.js.map +1 -1
  18. package/dist/cli/recipe.js +89 -0
  19. package/dist/cli/recipe.js.map +1 -0
  20. package/dist/cli/recipeDraft.js +64 -0
  21. package/dist/cli/recipeDraft.js.map +1 -0
  22. package/dist/cli/runs.js +49 -11
  23. package/dist/cli/runs.js.map +1 -1
  24. package/dist/cli/schedule.js +177 -0
  25. package/dist/cli/schedule.js.map +1 -0
  26. package/dist/core/brief.js +35 -12
  27. package/dist/core/brief.js.map +1 -1
  28. package/dist/core/draftBrief.js +68 -0
  29. package/dist/core/draftBrief.js.map +1 -0
  30. package/dist/core/eval.js +123 -0
  31. package/dist/core/eval.js.map +1 -0
  32. package/dist/core/hooksInit.js +54 -0
  33. package/dist/core/hooksInit.js.map +1 -0
  34. package/dist/core/laneRound.js +28 -7
  35. package/dist/core/laneRound.js.map +1 -1
  36. package/dist/core/lanes.js +3 -0
  37. package/dist/core/lanes.js.map +1 -1
  38. package/dist/core/lanesInit.js +19 -0
  39. package/dist/core/lanesInit.js.map +1 -1
  40. package/dist/core/parse/index.js +8 -0
  41. package/dist/core/parse/index.js.map +1 -1
  42. package/dist/core/parse/outcomes.js +51 -0
  43. package/dist/core/parse/outcomes.js.map +1 -0
  44. package/dist/core/parse/policy.js +56 -0
  45. package/dist/core/parse/policy.js.map +1 -0
  46. package/dist/core/parse/runs.js +1 -0
  47. package/dist/core/parse/runs.js.map +1 -1
  48. package/dist/core/parse/schedule.js +101 -0
  49. package/dist/core/parse/schedule.js.map +1 -0
  50. package/dist/core/parse/steer.js +68 -0
  51. package/dist/core/parse/steer.js.map +1 -0
  52. package/dist/core/recipeDraft.js +37 -0
  53. package/dist/core/recipeDraft.js.map +1 -0
  54. package/dist/core/recipes.js +185 -0
  55. package/dist/core/recipes.js.map +1 -0
  56. package/dist/core/repo.js +16 -1
  57. package/dist/core/repo.js.map +1 -1
  58. package/dist/core/triggers.js +137 -0
  59. package/dist/core/triggers.js.map +1 -0
  60. package/dist/server/actionBody.js +54 -0
  61. package/dist/server/actionBody.js.map +1 -0
  62. package/dist/server/checkLabels.js +7 -2
  63. package/dist/server/checkLabels.js.map +1 -1
  64. package/dist/server/claude.js +18 -0
  65. package/dist/server/claude.js.map +1 -0
  66. package/dist/server/controls.js +28 -1
  67. package/dist/server/controls.js.map +1 -1
  68. package/dist/server/data.js +8 -3
  69. package/dist/server/data.js.map +1 -1
  70. package/dist/server/draftInputs.js +33 -0
  71. package/dist/server/draftInputs.js.map +1 -0
  72. package/dist/server/health.js +3 -3
  73. package/dist/server/health.js.map +1 -1
  74. package/dist/server/index.js +55 -0
  75. package/dist/server/index.js.map +1 -1
  76. package/dist/server/laneChecks.js +1 -1
  77. package/dist/server/laneChecks.js.map +1 -1
  78. package/dist/server/laneSchedule.js +15 -0
  79. package/dist/server/laneSchedule.js.map +1 -0
  80. package/dist/server/live/build.js +25 -10
  81. package/dist/server/live/build.js.map +1 -1
  82. package/dist/server/live/index.js +4 -2
  83. package/dist/server/live/index.js.map +1 -1
  84. package/dist/server/live/urls.js +3 -1
  85. package/dist/server/live/urls.js.map +1 -1
  86. package/dist/server/loops.js +145 -20
  87. package/dist/server/loops.js.map +1 -1
  88. package/dist/server/memory.js +115 -0
  89. package/dist/server/memory.js.map +1 -0
  90. package/dist/server/memory.json +398 -0
  91. package/dist/server/paceNote.js +13 -0
  92. package/dist/server/paceNote.js.map +1 -0
  93. package/dist/server/roundState.js +26 -2
  94. package/dist/server/roundState.js.map +1 -1
  95. package/dist/server/runs.js +72 -9
  96. package/dist/server/runs.js.map +1 -1
  97. package/dist/server/shipped.js +35 -0
  98. package/dist/server/shipped.js.map +1 -0
  99. package/dist/server/static-export.js +8 -2
  100. package/dist/server/static-export.js.map +1 -1
  101. package/dist/server/this-repo.json +2367 -858
  102. package/dist/web/assets/index-C5q9d5-n.css +2 -0
  103. package/dist/web/assets/index-DDEAcJFt.js +123 -0
  104. package/dist/web/index.html +2 -2
  105. package/method/COMPOUNDING_LOOP.md +33 -6
  106. package/method/operating-card.md +1 -1
  107. package/method/retro.md +4 -3
  108. package/package.json +4 -4
  109. package/plugin/.claude-plugin/plugin.json +1 -1
  110. package/plugin/commands/loop-init.md +1 -0
  111. package/plugin/commands/retro.md +3 -2
  112. package/plugin/hooks/hooks.json +62 -0
  113. package/runners/github-actions/lanes.yml +2 -2
  114. package/runners/routine/README.md +4 -0
  115. package/runners/routine/control-room-prompt.md +4 -14
  116. package/runners/routine/lane-prompt.md +4 -10
  117. package/templates/lanes/README.md +5 -1
  118. package/templates/lanes/claude-section.md +1 -0
  119. package/templates/lanes/control-run.md +37 -0
  120. package/templates/lanes/lane-run.md +33 -0
  121. package/templates/lanes/schedule.json +4 -0
  122. package/templates/lanes/steer.md +3 -0
  123. package/templates/recipe.md +39 -0
  124. package/templates/recipes/cli-command-json.md +47 -0
  125. package/templates/recipes/static-calculator-site.md +50 -0
  126. package/templates/static-site/CLAUDE.md +1 -1
  127. package/dist/web/assets/index-BOPytDNU.js +0 -53
  128. package/dist/web/assets/index-BSHEI7fa.css +0 -2
@@ -0,0 +1,35 @@
1
+ /** Reads npm's package document (`registry.npmjs.org/<name>`); any other shape means the registry could not be read. */
2
+ export function parseNpmPackage(json) {
3
+ if (typeof json !== 'object' || json === null)
4
+ return undefined;
5
+ const { 'dist-tags': tags, versions } = json;
6
+ if (typeof versions !== 'object' || versions === null)
7
+ return undefined;
8
+ const latest = typeof tags === 'object' && tags !== null ? tags.latest : undefined;
9
+ // No `latest` tag (e.g. every version unpublished) is as good as unreadable: the tag alone decides.
10
+ return typeof latest === 'string' ? { latest, versions: Object.keys(versions) } : undefined;
11
+ }
12
+ /** The npm state of one version. */
13
+ export function npmStateOf(version, npm) {
14
+ if (!npm)
15
+ return 'unknown';
16
+ if (npm.latest === version)
17
+ return 'latest';
18
+ return npm.versions.includes(version) ? 'published' : 'not-published';
19
+ }
20
+ /** True once the tag exists (not older than DONE.md, when both dates are known) and npm, if readable, serves this version as `latest`. */
21
+ export function isShipped({ version, tagExists, npm, tagAt, doneAt }) {
22
+ if (!tagExists)
23
+ return false;
24
+ if (tagAt && doneAt && tagAt < doneAt)
25
+ return false;
26
+ return npm === undefined || npm.latest === version;
27
+ }
28
+ /**
29
+ * CHANGELOG releases with their tag and npm state filled in (`Unreleased` has neither). `tags` or `npm` undefined means
30
+ * that source was not checked: the field stays absent so the UI shows no chip instead of a wrong one.
31
+ */
32
+ export function annotateReleases(releases, tags, npm) {
33
+ return releases.map((r) => (/^unreleased$/i.test(r.version) ? r : { ...r, ...(tags && { tag: tags.includes(`v${r.version}`) }), ...(npm && { npm: npmStateOf(r.version, npm) }) }));
34
+ }
35
+ //# sourceMappingURL=shipped.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipped.js","sourceRoot":"","sources":["../../src/server/shipped.ts"],"names":[],"mappings":"AAYA,wHAAwH;AACxH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAqD,CAAC;IAC9F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAE,IAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,oGAAoG;IACpG,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9F,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAyB;IACnE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;AACxE,CAAC;AAYD,0IAA0I;AAC1I,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAgB;IAChF,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,GAAG,MAAM;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgC,EAAE,IAAmC,EAAE,GAAyB;IAC/H,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtL,CAAC"}
@@ -3,9 +3,10 @@ import path from 'node:path';
3
3
  import { DEFAULT_RUNNER } from './settings.js';
4
4
  import { withLabel } from './checkLabels.js';
5
5
  import { sortByAttention, toSummary } from './data.js';
6
+ import { EVAL_COMMAND } from './memory.js';
6
7
  import { CSP } from './static.js';
7
- /** The only two hosts the static site may fetch from, besides itself: the live data path (src/server/live). */
8
- export const LIVE_CONNECT_HOSTS = ['https://api.github.com', 'https://raw.githubusercontent.com'];
8
+ /** The only hosts the static site may fetch from, besides itself: the live data path (src/server/live) and npm's registry (release state). */
9
+ export const LIVE_CONNECT_HOSTS = ['https://api.github.com', 'https://raw.githubusercontent.com', 'https://registry.npmjs.org'];
9
10
  /** The local server's CSP with `connect-src` widened to the live hosts. Everything else stays identical. */
10
11
  export const STATIC_CSP = CSP.replace("connect-src 'self'", `connect-src 'self' ${LIVE_CONNECT_HOSTS.join(' ')}`);
11
12
  export const SELF_LIVE_CONFIG = { repo: 'Minntooos/Compounding-Loop', loop: 'compounding-loop', pages: 'https://minntooos.github.io/Compounding-Loop/' };
@@ -29,6 +30,11 @@ export function staticApiFiles(snapshot, version) {
29
30
  files.set('api/loops.json', sortByAttention(snapshot.loops.map(toSummary)));
30
31
  for (const loop of snapshot.loops)
31
32
  files.set(`api/loops/${loop.id}.json`, loop);
33
+ // Round 6: one knowledge file per loop (an empty report without fixtures), the recipe stores and the eval report.
34
+ for (const loop of snapshot.loops)
35
+ files.set(`api/loops/${loop.id}/knowledge.json`, snapshot.knowledge?.[loop.id] ?? { entries: [], triggers: [], recipes: [] });
36
+ files.set('api/recipes.json', snapshot.recipes ?? { recipes: [] });
37
+ files.set('api/eval.json', snapshot.eval ?? { rows: [], sample: false, command: EVAL_COMMAND });
32
38
  files.set('api/inbox.json', snapshot.inbox);
33
39
  files.set('api/checks.json', snapshot.checks.map(withLabel));
34
40
  // Same body as the demo server's /api/settings; without the file the static site logged a 404 on every visit.
@@ -1 +1 @@
1
- {"version":3,"file":"static-export.js","sourceRoot":"","sources":["../../src/server/static-export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static-export.js","sourceRoot":"","sources":["../../src/server/static-export.ts"],"names":[],"mappings":"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"}