@nanonets/graft 0.24.1 → 0.25.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 +26 -21
- package/dist/blast/render.js +1 -1
- package/dist/blast/render.js.map +1 -1
- package/dist/brand.js +1 -1
- package/dist/brand.js.map +1 -1
- package/dist/check/learning-edits.d.ts +18 -3
- package/dist/check/learning-edits.d.ts.map +1 -1
- package/dist/check/learning-edits.js +54 -10
- package/dist/check/learning-edits.js.map +1 -1
- package/dist/check/local-check.d.ts +7 -3
- package/dist/check/local-check.d.ts.map +1 -1
- package/dist/check/local-check.js +55 -11
- package/dist/check/local-check.js.map +1 -1
- package/dist/check/types.d.ts +11 -2
- package/dist/check/types.d.ts.map +1 -1
- package/dist/claude/format.d.ts +11 -7
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +50 -28
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-io.js +1 -1
- package/dist/claude/hook-io.js.map +1 -1
- package/dist/claude/hook-layers.d.ts +4 -2
- package/dist/claude/hook-layers.d.ts.map +1 -1
- package/dist/claude/hook-layers.js +21 -4
- package/dist/claude/hook-layers.js.map +1 -1
- package/dist/claude/hooks.d.ts +9 -32
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +154 -350
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +56 -18
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +6 -0
- package/dist/claude/note-signals.d.ts.map +1 -1
- package/dist/claude/note-signals.js +14 -3
- package/dist/claude/note-signals.js.map +1 -1
- package/dist/claude/post-bash.d.ts +26 -0
- package/dist/claude/post-bash.d.ts.map +1 -0
- package/dist/claude/post-bash.js +191 -0
- package/dist/claude/post-bash.js.map +1 -0
- package/dist/claude/pre-bash-skills.d.ts +21 -0
- package/dist/claude/pre-bash-skills.d.ts.map +1 -0
- package/dist/claude/pre-bash-skills.js +253 -0
- package/dist/claude/pre-bash-skills.js.map +1 -0
- package/dist/claude/pre-bash.d.ts +50 -0
- package/dist/claude/pre-bash.d.ts.map +1 -0
- package/dist/claude/pre-bash.js +245 -0
- package/dist/claude/pre-bash.js.map +1 -0
- package/dist/claude/prompt-consent.d.ts +19 -0
- package/dist/claude/prompt-consent.d.ts.map +1 -0
- package/dist/claude/prompt-consent.js +14 -0
- package/dist/claude/prompt-consent.js.map +1 -0
- package/dist/claude/prompt-hook.d.ts +76 -0
- package/dist/claude/prompt-hook.d.ts.map +1 -0
- package/dist/claude/prompt-hook.js +303 -0
- package/dist/claude/prompt-hook.js.map +1 -0
- package/dist/claude/prompt-skills.d.ts +19 -0
- package/dist/claude/prompt-skills.d.ts.map +1 -0
- package/dist/claude/prompt-skills.js +305 -0
- package/dist/claude/prompt-skills.js.map +1 -0
- package/dist/claude/session-metrics.js +4 -4
- package/dist/claude/session-metrics.js.map +1 -1
- package/dist/claude/settings-merge.d.ts +10 -0
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +46 -17
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +86 -28
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts +2 -0
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +53 -34
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/skill-use.d.ts +16 -0
- package/dist/claude/skill-use.d.ts.map +1 -0
- package/dist/claude/skill-use.js +78 -0
- package/dist/claude/skill-use.js.map +1 -0
- package/dist/claude/skills-wiring.d.ts +26 -0
- package/dist/claude/skills-wiring.d.ts.map +1 -0
- package/dist/claude/skills-wiring.js +110 -0
- package/dist/claude/skills-wiring.js.map +1 -0
- package/dist/claude/start-init.d.ts +13 -0
- package/dist/claude/start-init.d.ts.map +1 -0
- package/dist/claude/start-init.js +75 -0
- package/dist/claude/start-init.js.map +1 -0
- package/dist/claude/start-skills.d.ts +31 -0
- package/dist/claude/start-skills.d.ts.map +1 -0
- package/dist/claude/start-skills.js +274 -0
- package/dist/claude/start-skills.js.map +1 -0
- package/dist/claude/state.d.ts +19 -7
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js +59 -4
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/stop-skills.d.ts +23 -0
- package/dist/claude/stop-skills.d.ts.map +1 -0
- package/dist/claude/stop-skills.js +233 -0
- package/dist/claude/stop-skills.js.map +1 -0
- package/dist/claude/stop.d.ts +23 -0
- package/dist/claude/stop.d.ts.map +1 -0
- package/dist/claude/stop.js +219 -0
- package/dist/claude/stop.js.map +1 -0
- package/dist/claude/tally.d.ts +29 -41
- package/dist/claude/tally.d.ts.map +1 -1
- package/dist/claude/tally.js +111 -165
- package/dist/claude/tally.js.map +1 -1
- package/dist/claude/walls-hook.d.ts +52 -0
- package/dist/claude/walls-hook.d.ts.map +1 -0
- package/dist/claude/walls-hook.js +279 -0
- package/dist/claude/walls-hook.js.map +1 -0
- package/dist/cli-epilogue.d.ts.map +1 -1
- package/dist/cli-epilogue.js +24 -14
- package/dist/cli-epilogue.js.map +1 -1
- package/dist/cli-meta.js +3 -3
- package/dist/cli-meta.js.map +1 -1
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +8 -6
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +238 -402
- package/dist/cli.js.map +1 -1
- package/dist/cloud/head-learnings.d.ts +13 -0
- package/dist/cloud/head-learnings.d.ts.map +1 -0
- package/dist/cloud/head-learnings.js +84 -0
- package/dist/cloud/head-learnings.js.map +1 -0
- package/dist/cloud/lookup-activity.d.ts +5 -3
- package/dist/cloud/lookup-activity.d.ts.map +1 -1
- package/dist/cloud/lookup-activity.js +8 -8
- package/dist/cloud/lookup-activity.js.map +1 -1
- package/dist/cloud/nudge.d.ts +15 -7
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +42 -33
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +37 -1
- package/dist/cloud/onboarding.d.ts.map +1 -1
- package/dist/cloud/onboarding.js +77 -1
- package/dist/cloud/onboarding.js.map +1 -1
- package/dist/cloud/other-repos.d.ts +39 -0
- package/dist/cloud/other-repos.d.ts.map +1 -0
- package/dist/cloud/other-repos.js +137 -0
- package/dist/cloud/other-repos.js.map +1 -0
- package/dist/cloud/pair.d.ts +17 -7
- package/dist/cloud/pair.d.ts.map +1 -1
- package/dist/cloud/pair.js +81 -60
- package/dist/cloud/pair.js.map +1 -1
- package/dist/cloud/workspace-sync.d.ts +67 -11
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +299 -55
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +74 -10
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +96 -8
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/hosts/claude-global.js +1 -1
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/hosts/codex-hooks.d.ts +6 -0
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +89 -16
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/codex-trust.d.ts +28 -0
- package/dist/hosts/codex-trust.d.ts.map +1 -0
- package/dist/hosts/codex-trust.js +280 -0
- package/dist/hosts/codex-trust.js.map +1 -0
- package/dist/hosts/cursor-hooks.d.ts.map +1 -1
- package/dist/hosts/cursor-hooks.js +3 -1
- package/dist/hosts/cursor-hooks.js.map +1 -1
- package/dist/init/candidates.d.ts +60 -0
- package/dist/init/candidates.d.ts.map +1 -0
- package/dist/init/candidates.js +202 -0
- package/dist/init/candidates.js.map +1 -0
- package/dist/init/claude-call.d.ts +51 -0
- package/dist/init/claude-call.d.ts.map +1 -0
- package/dist/init/claude-call.js +199 -0
- package/dist/init/claude-call.js.map +1 -0
- package/dist/init/discover-worker.d.ts +18 -0
- package/dist/init/discover-worker.d.ts.map +1 -0
- package/dist/init/discover-worker.js +111 -0
- package/dist/init/discover-worker.js.map +1 -0
- package/dist/init/handover.d.ts +16 -0
- package/dist/init/handover.d.ts.map +1 -0
- package/dist/init/handover.js +92 -0
- package/dist/init/handover.js.map +1 -0
- package/dist/init/howtos.d.ts +20 -0
- package/dist/init/howtos.d.ts.map +1 -0
- package/dist/init/howtos.js +90 -0
- package/dist/init/howtos.js.map +1 -0
- package/dist/init/init-record.d.ts +134 -0
- package/dist/init/init-record.d.ts.map +1 -0
- package/dist/init/init-record.js +339 -0
- package/dist/init/init-record.js.map +1 -0
- package/dist/init/install-paths.d.ts +6 -0
- package/dist/init/install-paths.d.ts.map +1 -0
- package/dist/init/install-paths.js +87 -0
- package/dist/init/install-paths.js.map +1 -0
- package/dist/init/keep-answer.d.ts +43 -0
- package/dist/init/keep-answer.d.ts.map +1 -0
- package/dist/init/keep-answer.js +118 -0
- package/dist/init/keep-answer.js.map +1 -0
- package/dist/init/keep-gate.d.ts +30 -0
- package/dist/init/keep-gate.d.ts.map +1 -0
- package/dist/init/keep-gate.js +178 -0
- package/dist/init/keep-gate.js.map +1 -0
- package/dist/init/keep-list.d.ts +67 -0
- package/dist/init/keep-list.d.ts.map +1 -0
- package/dist/init/keep-list.js +232 -0
- package/dist/init/keep-list.js.map +1 -0
- package/dist/init/keep.d.ts +52 -0
- package/dist/init/keep.d.ts.map +1 -0
- package/dist/init/keep.js +393 -0
- package/dist/init/keep.js.map +1 -0
- package/dist/init/look-back-mine.d.ts +37 -0
- package/dist/init/look-back-mine.d.ts.map +1 -0
- package/dist/init/look-back-mine.js +215 -0
- package/dist/init/look-back-mine.js.map +1 -0
- package/dist/init/look-back.d.ts +81 -0
- package/dist/init/look-back.d.ts.map +1 -0
- package/dist/init/look-back.js +170 -0
- package/dist/init/look-back.js.map +1 -0
- package/dist/init/miners.d.ts +46 -0
- package/dist/init/miners.d.ts.map +1 -0
- package/dist/init/miners.js +141 -0
- package/dist/init/miners.js.map +1 -0
- package/dist/init/name-call.d.ts +37 -0
- package/dist/init/name-call.d.ts.map +1 -0
- package/dist/init/name-call.js +151 -0
- package/dist/init/name-call.js.map +1 -0
- package/dist/init/plain-file.d.ts.map +1 -1
- package/dist/init/plain-file.js +3 -0
- package/dist/init/plain-file.js.map +1 -1
- package/dist/init/prefs.d.ts +70 -0
- package/dist/init/prefs.d.ts.map +1 -0
- package/dist/init/prefs.js +282 -0
- package/dist/init/prefs.js.map +1 -0
- package/dist/init/relay.d.ts +15 -0
- package/dist/init/relay.d.ts.map +1 -0
- package/dist/init/relay.js +15 -0
- package/dist/init/relay.js.map +1 -0
- package/dist/init/replay-runs.d.ts +121 -0
- package/dist/init/replay-runs.d.ts.map +1 -0
- package/dist/init/replay-runs.js +457 -0
- package/dist/init/replay-runs.js.map +1 -0
- package/dist/init/replay-tamper.d.ts +18 -0
- package/dist/init/replay-tamper.d.ts.map +1 -0
- package/dist/init/replay-tamper.js +87 -0
- package/dist/init/replay-tamper.js.map +1 -0
- package/dist/init/review-screen.d.ts +74 -0
- package/dist/init/review-screen.d.ts.map +1 -0
- package/dist/init/review-screen.js +258 -0
- package/dist/init/review-screen.js.map +1 -0
- package/dist/init/review-tty.d.ts +29 -0
- package/dist/init/review-tty.d.ts.map +1 -0
- package/dist/init/review-tty.js +218 -0
- package/dist/init/review-tty.js.map +1 -0
- package/dist/init/review.d.ts +12 -0
- package/dist/init/review.d.ts.map +1 -0
- package/dist/init/review.js +12 -0
- package/dist/init/review.js.map +1 -0
- package/dist/init/run.d.ts +87 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +347 -0
- package/dist/init/run.js.map +1 -0
- package/dist/init/sessions.d.ts +63 -0
- package/dist/init/sessions.d.ts.map +1 -0
- package/dist/init/sessions.js +377 -0
- package/dist/init/sessions.js.map +1 -0
- package/dist/init/transcript.d.ts +81 -0
- package/dist/init/transcript.d.ts.map +1 -0
- package/dist/init/transcript.js +216 -0
- package/dist/init/transcript.js.map +1 -0
- package/dist/init/types.d.ts +139 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +2 -0
- package/dist/init/types.js.map +1 -0
- package/dist/notes/cold-start.d.ts +5 -213
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +5 -654
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/edit-overlap.d.ts.map +1 -1
- package/dist/notes/edit-overlap.js +4 -1
- package/dist/notes/edit-overlap.js.map +1 -1
- package/dist/notes/notes.d.ts +8 -4
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +9 -7
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +4 -0
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +6 -5
- package/dist/notes/pr-reviews.js.map +1 -1
- package/dist/notes/repo-trail.d.ts +1 -1
- package/dist/notes/repo-trail.d.ts.map +1 -1
- package/dist/notes/repo-trail.js +24 -4
- package/dist/notes/repo-trail.js.map +1 -1
- package/dist/search/grep.d.ts.map +1 -1
- package/dist/search/grep.js +4 -2
- package/dist/search/grep.js.map +1 -1
- package/dist/search/user-regexp.d.ts +26 -0
- package/dist/search/user-regexp.d.ts.map +1 -0
- package/dist/search/user-regexp.js +150 -0
- package/dist/search/user-regexp.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +5 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -1
- package/dist/skills/anchors-cli.js +7 -2
- package/dist/skills/anchors-cli.js.map +1 -1
- package/dist/skills/anchors-wide.js +2 -2
- package/dist/skills/anchors-wide.js.map +1 -1
- package/dist/skills/cli-skills-1b.d.ts +17 -0
- package/dist/skills/cli-skills-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-1b.js +166 -0
- package/dist/skills/cli-skills-1b.js.map +1 -0
- package/dist/skills/cli-skills-2.d.ts +35 -0
- package/dist/skills/cli-skills-2.d.ts.map +1 -0
- package/dist/skills/cli-skills-2.js +129 -0
- package/dist/skills/cli-skills-2.js.map +1 -0
- package/dist/skills/cli-skills-report-1b.d.ts +49 -0
- package/dist/skills/cli-skills-report-1b.d.ts.map +1 -0
- package/dist/skills/cli-skills-report-1b.js +191 -0
- package/dist/skills/cli-skills-report-1b.js.map +1 -0
- package/dist/skills/cli-skills-report.d.ts +86 -0
- package/dist/skills/cli-skills-report.d.ts.map +1 -0
- package/dist/skills/cli-skills-report.js +121 -0
- package/dist/skills/cli-skills-report.js.map +1 -0
- package/dist/skills/cli-skills.d.ts +30 -0
- package/dist/skills/cli-skills.d.ts.map +1 -0
- package/dist/skills/cli-skills.js +379 -0
- package/dist/skills/cli-skills.js.map +1 -0
- package/dist/skills/compile-split.d.ts.map +1 -1
- package/dist/skills/compile-split.js +18 -0
- package/dist/skills/compile-split.js.map +1 -1
- package/dist/skills/compile-words.d.ts +4 -1
- package/dist/skills/compile-words.d.ts.map +1 -1
- package/dist/skills/compile-words.js +68 -8
- package/dist/skills/compile-words.js.map +1 -1
- package/dist/skills/compile.d.ts +7 -0
- package/dist/skills/compile.d.ts.map +1 -1
- package/dist/skills/compile.js +17 -0
- package/dist/skills/compile.js.map +1 -1
- package/dist/skills/credit.d.ts +86 -0
- package/dist/skills/credit.d.ts.map +1 -0
- package/dist/skills/credit.js +259 -0
- package/dist/skills/credit.js.map +1 -0
- package/dist/skills/fold-gated.d.ts +3 -0
- package/dist/skills/fold-gated.d.ts.map +1 -0
- package/dist/skills/fold-gated.js +78 -0
- package/dist/skills/fold-gated.js.map +1 -0
- package/dist/skills/fold.d.ts +87 -0
- package/dist/skills/fold.d.ts.map +1 -0
- package/dist/skills/fold.js +348 -0
- package/dist/skills/fold.js.map +1 -0
- package/dist/skills/follow-learnings.d.ts +128 -0
- package/dist/skills/follow-learnings.d.ts.map +1 -0
- package/dist/skills/follow-learnings.js +278 -0
- package/dist/skills/follow-learnings.js.map +1 -0
- package/dist/skills/learning-steps.d.ts +43 -0
- package/dist/skills/learning-steps.d.ts.map +1 -0
- package/dist/skills/learning-steps.js +294 -0
- package/dist/skills/learning-steps.js.map +1 -0
- package/dist/skills/lesson-gate.d.ts +25 -0
- package/dist/skills/lesson-gate.d.ts.map +1 -0
- package/dist/skills/lesson-gate.js +316 -0
- package/dist/skills/lesson-gate.js.map +1 -0
- package/dist/skills/offer-drift.d.ts +35 -0
- package/dist/skills/offer-drift.d.ts.map +1 -0
- package/dist/skills/offer-drift.js +98 -0
- package/dist/skills/offer-drift.js.map +1 -0
- package/dist/skills/offer-lesson.d.ts +31 -0
- package/dist/skills/offer-lesson.d.ts.map +1 -0
- package/dist/skills/offer-lesson.js +123 -0
- package/dist/skills/offer-lesson.js.map +1 -0
- package/dist/skills/offer-lines.d.ts +40 -0
- package/dist/skills/offer-lines.d.ts.map +1 -0
- package/dist/skills/offer-lines.js +80 -0
- package/dist/skills/offer-lines.js.map +1 -0
- package/dist/skills/offer-moment.d.ts +102 -0
- package/dist/skills/offer-moment.d.ts.map +1 -0
- package/dist/skills/offer-moment.js +260 -0
- package/dist/skills/offer-moment.js.map +1 -0
- package/dist/skills/offer-repair.d.ts +36 -0
- package/dist/skills/offer-repair.d.ts.map +1 -0
- package/dist/skills/offer-repair.js +212 -0
- package/dist/skills/offer-repair.js.map +1 -0
- package/dist/skills/offer-retire.d.ts +53 -0
- package/dist/skills/offer-retire.d.ts.map +1 -0
- package/dist/skills/offer-retire.js +149 -0
- package/dist/skills/offer-retire.js.map +1 -0
- package/dist/skills/offer-update.d.ts +54 -0
- package/dist/skills/offer-update.d.ts.map +1 -0
- package/dist/skills/offer-update.js +115 -0
- package/dist/skills/offer-update.js.map +1 -0
- package/dist/skills/offer-words-1b.d.ts +32 -0
- package/dist/skills/offer-words-1b.d.ts.map +1 -0
- package/dist/skills/offer-words-1b.js +80 -0
- package/dist/skills/offer-words-1b.js.map +1 -0
- package/dist/skills/offer-words-2.d.ts +123 -0
- package/dist/skills/offer-words-2.d.ts.map +1 -0
- package/dist/skills/offer-words-2.js +194 -0
- package/dist/skills/offer-words-2.js.map +1 -0
- package/dist/skills/offer-words.d.ts +65 -0
- package/dist/skills/offer-words.d.ts.map +1 -0
- package/dist/skills/offer-words.js +205 -0
- package/dist/skills/offer-words.js.map +1 -0
- package/dist/skills/offers.d.ts +66 -0
- package/dist/skills/offers.d.ts.map +1 -0
- package/dist/skills/offers.js +284 -0
- package/dist/skills/offers.js.map +1 -0
- package/dist/skills/runblock.d.ts +2 -0
- package/dist/skills/runblock.d.ts.map +1 -1
- package/dist/skills/runblock.js +11 -6
- package/dist/skills/runblock.js.map +1 -1
- package/dist/skills/save-gate.d.ts +64 -0
- package/dist/skills/save-gate.d.ts.map +1 -0
- package/dist/skills/save-gate.js +354 -0
- package/dist/skills/save-gate.js.map +1 -0
- package/dist/skills/save-verify.d.ts +59 -0
- package/dist/skills/save-verify.d.ts.map +1 -0
- package/dist/skills/save-verify.js +390 -0
- package/dist/skills/save-verify.js.map +1 -0
- package/dist/skills/settings.d.ts +12 -2
- package/dist/skills/settings.d.ts.map +1 -1
- package/dist/skills/settings.js +24 -2
- package/dist/skills/settings.js.map +1 -1
- package/dist/skills/skills.d.ts +26 -8
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +105 -52
- package/dist/skills/skills.js.map +1 -1
- package/dist/skills/types.d.ts +8 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/update-gate.d.ts +36 -0
- package/dist/skills/update-gate.d.ts.map +1 -0
- package/dist/skills/update-gate.js +357 -0
- package/dist/skills/update-gate.js.map +1 -0
- package/dist/skills/update-plan.d.ts +40 -0
- package/dist/skills/update-plan.d.ts.map +1 -0
- package/dist/skills/update-plan.js +196 -0
- package/dist/skills/update-plan.js.map +1 -0
- package/dist/skills/value-line.d.ts +94 -0
- package/dist/skills/value-line.d.ts.map +1 -0
- package/dist/skills/value-line.js +355 -0
- package/dist/skills/value-line.js.map +1 -0
- package/dist/telemetry/contract.d.ts +15 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +80 -11
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/gate.js +4 -4
- package/dist/telemetry/gate.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/notice.js +5 -5
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/telemetry/queue.d.ts.map +1 -1
- package/dist/telemetry/queue.js +7 -7
- package/dist/telemetry/queue.js.map +1 -1
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +4 -3
- package/dist/telemetry/track.js.map +1 -1
- package/dist/trace/checks.d.ts.map +1 -1
- package/dist/trace/checks.js +10 -2
- package/dist/trace/checks.js.map +1 -1
- package/dist/trace/gate-file.d.ts +1 -1
- package/dist/trace/gate-file.d.ts.map +1 -1
- package/dist/trace/gate-file.js +3 -3
- package/dist/trace/gate-file.js.map +1 -1
- package/dist/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +2 -23
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +2 -3
- package/dist/upkeep.js.map +1 -1
- package/dist/util/private-fs.d.ts +6 -0
- package/dist/util/private-fs.d.ts.map +1 -1
- package/dist/util/private-fs.js +9 -1
- package/dist/util/private-fs.js.map +1 -1
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +17 -3
- package/dist/util/state.js.map +1 -1
- package/package.json +1 -1
- package/dist/skills/found-skill.d.ts +0 -35
- package/dist/skills/found-skill.d.ts.map +0 -1
- package/dist/skills/found-skill.js +0 -66
- package/dist/skills/found-skill.js.map +0 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init's look-back without a model (design 4.1 to 4.5, P3, R60): discovery,
|
|
3
|
+
* replay through 1a's fold, the miners, Claude Code's how-to files and the
|
|
4
|
+
* candidates, in one pass. `lookBackOffThread` (discover-worker.ts) runs it
|
|
5
|
+
* in a worker; it runs here when a worker can't start.
|
|
6
|
+
*
|
|
7
|
+
* Sessions are read newest first, one at a time, each dropped once mined:
|
|
8
|
+
* at most 4 sheets per job and only preference-shaped typed lines are held
|
|
9
|
+
* across sessions (R36). It stops reading new sessions at `capMs` and says
|
|
10
|
+
* how many it read.
|
|
11
|
+
*
|
|
12
|
+
* What it writes: wall facts to walls.json (classes, programs, days, session
|
|
13
|
+
* hashes; counted once per session through `read`, R45, R57), and the pool
|
|
14
|
+
* days of skills the screen won't show (P10). Never a typed word, a command
|
|
15
|
+
* or a how-to's text. The typed lines it read go when it returns: the
|
|
16
|
+
* candidates hold pointers, and a preference's lead words in memory only.
|
|
17
|
+
*/
|
|
18
|
+
import { spawnSync } from 'node:child_process';
|
|
19
|
+
import { readdirSync } from 'node:fs';
|
|
20
|
+
import { homedir } from 'node:os';
|
|
21
|
+
import { basename, dirname, join } from 'node:path';
|
|
22
|
+
import { everyRepoLearnings } from '../notes/every-repo.js';
|
|
23
|
+
import { repoPlace } from '../notes/home.js';
|
|
24
|
+
import { parseNote } from '../notes/notes.js';
|
|
25
|
+
import { learningsDir } from '../notes/repo-trail.js';
|
|
26
|
+
import { trailHome } from '../notes/trail-home.js';
|
|
27
|
+
import { timeoutOnPath } from '../trace/guard-fast.js';
|
|
28
|
+
import { noteWalls, readWalls } from '../trace/wall-state.js';
|
|
29
|
+
import { buildCandidates, pickFive, seedNeverShown } from './candidates.js';
|
|
30
|
+
import { readPlain } from './plain-file.js';
|
|
31
|
+
import { readHowtos } from './howtos.js';
|
|
32
|
+
import { JobMiner, mineWalls } from './miners.js';
|
|
33
|
+
import { isPreferenceShape, MAX_PREF_LINES, minePreferences, repoWordsOf } from './prefs.js';
|
|
34
|
+
import { replaySession, sessionHashOf } from './replay-runs.js';
|
|
35
|
+
import { discoverSessions } from './sessions.js';
|
|
36
|
+
import { dayOf } from './transcript.js';
|
|
37
|
+
const PROGRESS_MS = 2000;
|
|
38
|
+
/** What earlier inits decided, read tolerantly from `init/<key>.json`: v2 ids, or a phase 0 file's quote hashes (R33). */
|
|
39
|
+
function decisionsOf(repoKey, env) {
|
|
40
|
+
const out = { closed: new Set(), closedV1: new Set(), kept: new Set(), deferred: new Set() };
|
|
41
|
+
const ids = (v, into, re) => {
|
|
42
|
+
if (Array.isArray(v))
|
|
43
|
+
for (const x of v)
|
|
44
|
+
if (typeof x === 'string' && re.test(x))
|
|
45
|
+
into.add(x);
|
|
46
|
+
};
|
|
47
|
+
const ID = /^i-[0-9a-f]{10}$/;
|
|
48
|
+
const V1 = /^[0-9a-f]{16}$/;
|
|
49
|
+
try {
|
|
50
|
+
const parts = repoKey.split('/').filter((p) => p && p !== '.' && p !== '..');
|
|
51
|
+
// Never a link or a FIFO planted at the record (b5 review).
|
|
52
|
+
const raw = JSON.parse(readPlain(join(trailHome(env), 'init', ...parts) + '.json', 1024 * 1024) ?? 'null');
|
|
53
|
+
if (raw.v === 2) {
|
|
54
|
+
ids(raw.closed, out.closed, ID);
|
|
55
|
+
ids(raw.closedV1, out.closedV1, V1);
|
|
56
|
+
ids(raw.deferred, out.deferred, ID);
|
|
57
|
+
if (Array.isArray(raw.runs))
|
|
58
|
+
for (const r of raw.runs)
|
|
59
|
+
ids(r?.kept, out.kept, ID);
|
|
60
|
+
}
|
|
61
|
+
else if (Array.isArray(raw.closed)) {
|
|
62
|
+
for (const c of raw.closed)
|
|
63
|
+
ids(c?.quotes, out.closedV1, V1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch { /* none yet */ }
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/** An https origin with no credential helper: git-https-auth is still true here (4.5). */
|
|
70
|
+
function httpsNoHelper(checkout) {
|
|
71
|
+
const git = (...args) => spawnSync('git', ['-C', checkout, ...args], { encoding: 'utf8', timeout: 5000 });
|
|
72
|
+
const url = git('remote', 'get-url', 'origin');
|
|
73
|
+
if (url.status !== 0 || !/^https:\/\//.test(url.stdout.trim()))
|
|
74
|
+
return false;
|
|
75
|
+
const helper = git('config', '--get-all', 'credential.helper');
|
|
76
|
+
return !helper.stdout.trim();
|
|
77
|
+
}
|
|
78
|
+
/** Kept learnings' titles and bodies, here and in every repo: a preference one of them says is not offered again. */
|
|
79
|
+
function keptLearnings(checkout, env) {
|
|
80
|
+
const out = [];
|
|
81
|
+
try {
|
|
82
|
+
for (const n of everyRepoLearnings(env))
|
|
83
|
+
out.push(`${n.title}\n${n.body}`);
|
|
84
|
+
}
|
|
85
|
+
catch { /* none */ }
|
|
86
|
+
// This repo's learnings and this machine's personal ones for it, through `env` (never a home path, 0 rule 11).
|
|
87
|
+
for (const dir of [learningsDir(checkout), join(repoPlace(checkout, env).dir, 'notes')]) {
|
|
88
|
+
let names = [];
|
|
89
|
+
try {
|
|
90
|
+
names = readdirSync(dir).filter((f) => f.endsWith('.md')).slice(0, 500);
|
|
91
|
+
}
|
|
92
|
+
catch { /* none */ }
|
|
93
|
+
for (const f of names) {
|
|
94
|
+
try {
|
|
95
|
+
const text = readPlain(join(dir, f), 64 * 1024);
|
|
96
|
+
const n = text === null ? null : parseNote(text, join(dir, f));
|
|
97
|
+
if (n)
|
|
98
|
+
out.push(`${n.title}\n${n.body}`);
|
|
99
|
+
}
|
|
100
|
+
catch { /* unreadable: skip */ }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
/** The look-back, in this thread. Never throws: a part that fails says so in `errors` and gives nothing. */
|
|
106
|
+
export function lookBack(dir, opts) {
|
|
107
|
+
const t0 = Date.now();
|
|
108
|
+
const env = opts.env;
|
|
109
|
+
const now = opts.now ?? new Date();
|
|
110
|
+
const home = env.HOME || homedir();
|
|
111
|
+
const lb = { sessions: [], skipped: [], days: 0, from: null, to: null, parent: 0, candidates: [], alreadyKept: { here: 0, elsewhere: [] }, howtos: [], ms: 0, errors: [] };
|
|
112
|
+
const fail = (what, e) => lb.errors.push(`couldn't read ${what} this time (${e instanceof Error ? e.message.slice(0, 80) : String(e).slice(0, 80)})`);
|
|
113
|
+
const progress = opts.onProgress;
|
|
114
|
+
let lastTick = 0;
|
|
115
|
+
const tick = (phase, done, total, force = false) => {
|
|
116
|
+
if (!progress || (!force && Date.now() - lastTick < PROGRESS_MS))
|
|
117
|
+
return;
|
|
118
|
+
lastTick = Date.now();
|
|
119
|
+
try {
|
|
120
|
+
progress({ phase, done, total });
|
|
121
|
+
}
|
|
122
|
+
catch { /* a progress line never stops the look-back */ }
|
|
123
|
+
};
|
|
124
|
+
try {
|
|
125
|
+
tick('discover', 0, 0, true);
|
|
126
|
+
const place = repoPlace(dir, env);
|
|
127
|
+
const repoKey = place.key;
|
|
128
|
+
const checkout = place.checkout;
|
|
129
|
+
const found = discoverSessions(dir, home, now, env);
|
|
130
|
+
lb.skipped = (found.skipped ?? []).map((s) => ({ sh: sessionHashOf(s.path), why: s.why }));
|
|
131
|
+
lb.parent = found.bySource.ancestor;
|
|
132
|
+
const deadline = t0 + Math.max(0, opts.capMs);
|
|
133
|
+
const walls0 = readWalls(env);
|
|
134
|
+
const miner = new JobMiner();
|
|
135
|
+
const wallsAdd = { seen: [], fixed: [], read: {}, worked: [] };
|
|
136
|
+
const typed = [];
|
|
137
|
+
const programs = new Set();
|
|
138
|
+
const days = new Set();
|
|
139
|
+
const total = found.sessions.length;
|
|
140
|
+
let done = 0;
|
|
141
|
+
for (const s of found.sessions) {
|
|
142
|
+
if (Date.now() >= deadline)
|
|
143
|
+
break;
|
|
144
|
+
tick('read', done, total);
|
|
145
|
+
if (!s.path || !s.stretch)
|
|
146
|
+
continue;
|
|
147
|
+
const r = replaySession(s.path, s.stretch, repoKey, now, { env, maxMs: Math.max(1, Math.min(60_000, deadline - Date.now())) });
|
|
148
|
+
done += 1;
|
|
149
|
+
if (r.headless) {
|
|
150
|
+
lb.skipped.push({ sh: r.sh, why: 'headless' });
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
miner.add(r);
|
|
154
|
+
const w = mineWalls([r], walls0.read);
|
|
155
|
+
wallsAdd.seen.push(...(w.seen ?? []));
|
|
156
|
+
wallsAdd.fixed.push(...(w.fixed ?? []));
|
|
157
|
+
Object.assign(wallsAdd.read, w.read ?? {});
|
|
158
|
+
// Sessions come newest first: past a few times what minePreferences clusters, older lines add nothing but memory.
|
|
159
|
+
for (const t of r.typed)
|
|
160
|
+
if (typed.length < 4 * MAX_PREF_LINES && isPreferenceShape(t.text))
|
|
161
|
+
typed.push(t);
|
|
162
|
+
for (const p of r.programs)
|
|
163
|
+
programs.add(p);
|
|
164
|
+
const sDays = new Set(s.prompts.map((p) => dayOf(p.at ?? s.at)).filter(Boolean));
|
|
165
|
+
for (const d of sDays)
|
|
166
|
+
days.add(d);
|
|
167
|
+
lb.sessions.push({ sh: r.sh, how: s.source ?? 'own', days: sDays.size });
|
|
168
|
+
}
|
|
169
|
+
if (done < total)
|
|
170
|
+
lb.errors.push(`couldn't read ${total - done} of ${total} sessions this time (out of time)`);
|
|
171
|
+
const sorted = [...days].sort();
|
|
172
|
+
lb.days = sorted.length;
|
|
173
|
+
lb.from = sorted[0] ?? null;
|
|
174
|
+
lb.to = sorted[sorted.length - 1] ?? null;
|
|
175
|
+
tick('compile', done, total, true);
|
|
176
|
+
if (wallsAdd.seen.length || wallsAdd.fixed.length || Object.keys(wallsAdd.read).length)
|
|
177
|
+
noteWalls(wallsAdd, env);
|
|
178
|
+
const walls = readWalls(env);
|
|
179
|
+
const jobs = miner.result();
|
|
180
|
+
let howtos = [];
|
|
181
|
+
try {
|
|
182
|
+
const keys = [...new Set(found.sessions.map((s) => (s.path ? basename(dirname(s.path)) : '')).filter(Boolean))];
|
|
183
|
+
howtos = readHowtos(keys, env.CLAUDE_CONFIG_DIR || join(home, '.claude'));
|
|
184
|
+
lb.howtos = [...new Set(howtos.map((h) => h.file))];
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
fail('your Claude Code how-to files', e);
|
|
188
|
+
}
|
|
189
|
+
const d = opts.decisions ?? decisionsOf(repoKey, env);
|
|
190
|
+
const skipped = [];
|
|
191
|
+
lb.candidates = buildCandidates({
|
|
192
|
+
jobs, walls, prefs: minePreferences(typed, now), howtos, reviews: opts.reviews ?? [], repoKey, repoWords: repoWordsOf(checkout, programs),
|
|
193
|
+
skills: opts.skills, closed: d.closed, closedV1: d.closedV1, kept: d.kept, deferred: opts.agent ? d.deferred : new Set(), env, checkout,
|
|
194
|
+
machine: { timeoutMissing: !timeoutOnPath(env), httpsNoHelper: httpsNoHelper(checkout) }, learnings: keptLearnings(checkout, env), skipped,
|
|
195
|
+
}, now);
|
|
196
|
+
if (skipped.length)
|
|
197
|
+
lb.refused = skipped;
|
|
198
|
+
try {
|
|
199
|
+
lb.alreadyKept.here = everyRepoLearnings(env).length;
|
|
200
|
+
}
|
|
201
|
+
catch { /* none */ }
|
|
202
|
+
try {
|
|
203
|
+
seedNeverShown(jobs, lb.candidates, pickFive(lb.candidates), repoKey, env, now);
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
fail('the pool', e);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (e) {
|
|
210
|
+
fail('your past sessions', e);
|
|
211
|
+
}
|
|
212
|
+
lb.ms = Date.now() - t0;
|
|
213
|
+
return lb;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=look-back-mine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look-back-mine.js","sourceRoot":"","sources":["../../src/init/look-back-mine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { PastSession } from "./sessions.js";
|
|
2
|
+
export interface Finding {
|
|
3
|
+
title: string;
|
|
4
|
+
/** `team`: about the code or how the team works here. `you`: this person's own habits or machine. */
|
|
5
|
+
for: "team" | "you";
|
|
6
|
+
/** Markdown under `## Decided` and maybe `## Watch out`, secrets scrubbed. */
|
|
7
|
+
body: string;
|
|
8
|
+
/** Sessions the cited quotes were found in, newest first. */
|
|
9
|
+
sessions: string[];
|
|
10
|
+
/** Different days the cited quotes were typed on: a restart the same morning is not a second time. */
|
|
11
|
+
days: number;
|
|
12
|
+
/** YYYY-MM-DD of the newest of them. */
|
|
13
|
+
last: string;
|
|
14
|
+
quotes: string[];
|
|
15
|
+
/** A quote matched typed words that hold a secret, though the quote as Claude copied it (punctuation and case set aside) doesn't show it. */
|
|
16
|
+
secret?: true;
|
|
17
|
+
}
|
|
18
|
+
/** The model phase 0's look-back used, and the naming call uses (name-call.ts). */
|
|
19
|
+
export declare const COLD_START_MODEL = "claude-sonnet-5-5";
|
|
20
|
+
interface RawFinding {
|
|
21
|
+
title?: string;
|
|
22
|
+
for?: string;
|
|
23
|
+
body?: string;
|
|
24
|
+
evidence?: {
|
|
25
|
+
session?: string;
|
|
26
|
+
quote?: string;
|
|
27
|
+
}[];
|
|
28
|
+
}
|
|
29
|
+
export declare function norm(s: string): string;
|
|
30
|
+
/** Where a finding's quotes can be: one past session's messages, or one PR's review comments. */
|
|
31
|
+
export interface QuoteSource {
|
|
32
|
+
id: string;
|
|
33
|
+
/** ISO time, for newest first. */
|
|
34
|
+
at: string;
|
|
35
|
+
/** What was said there, each through norm(). */
|
|
36
|
+
said: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The sources a finding's quotes really are in, newest first, and the quotes
|
|
40
|
+
* that were found. A quote filed under the wrong source still counts for the
|
|
41
|
+
* one it's in; a quote under three words proves nothing.
|
|
42
|
+
*/
|
|
43
|
+
export declare function placeQuotes(evidence: {
|
|
44
|
+
cited?: QuoteSource;
|
|
45
|
+
quote?: string;
|
|
46
|
+
}[], sources: QuoteSource[]): {
|
|
47
|
+
places: QuoteSource[];
|
|
48
|
+
quotes: string[];
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* The findings whose quotes are really in the person's messages, in two or
|
|
52
|
+
* more sessions, best first. A quote filed under the wrong session still
|
|
53
|
+
* counts for the session it's in.
|
|
54
|
+
*/
|
|
55
|
+
export declare function verify(raw: RawFinding[], sessions: PastSession[], _ids?: Map<string, string>): Finding[];
|
|
56
|
+
/** Email addresses replaced: a learning can be committed, and an address is nobody's business there. */
|
|
57
|
+
export declare function noEmails(text: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* The findings with no secret in their title, body or quotes (or in the typed
|
|
60
|
+
* words a quote was found in), and how many were left out for one. A finding with a secret is refused whole, never
|
|
61
|
+
* scrubbed and kept: a missed shape in a committed file is the worst case.
|
|
62
|
+
*/
|
|
63
|
+
export declare function withoutSecrets<T extends {
|
|
64
|
+
title: string;
|
|
65
|
+
body: string;
|
|
66
|
+
quotes: string[];
|
|
67
|
+
secret?: true;
|
|
68
|
+
}>(findings: T[]): {
|
|
69
|
+
findings: T[];
|
|
70
|
+
leftOut: number;
|
|
71
|
+
};
|
|
72
|
+
/** Anything that looks like a credential, a key or an email address, replaced. Learnings get committed. */
|
|
73
|
+
export declare function scrub(text: string): string;
|
|
74
|
+
/** `TRAIL_NO_LOOK_BACK=1` turns the look-back off. (`TRAIL_NO_FETCH` doesn't: nothing here is fetched.) */
|
|
75
|
+
export declare function lookBackOff(env?: NodeJS.ProcessEnv): boolean;
|
|
76
|
+
/** Whether `trail init` would look back here: on, and not done on this machine before (`--look-back` looks again). */
|
|
77
|
+
export declare function lookBackDue(repo: string, env?: NodeJS.ProcessEnv): boolean;
|
|
78
|
+
/** The person answered what the look-back found here (or it found nothing): plain `trail init` won't look back again. */
|
|
79
|
+
export declare function markLookedBack(repo: string, now?: Date, env?: NodeJS.ProcessEnv): void;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=look-back.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look-back.d.ts","sourceRoot":"","sources":["../../src/init/look-back.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,qGAAqG;IACrG,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IACpB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sGAAsG;IACtG,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6IAA6I;IAC7I,MAAM,CAAC,EAAE,IAAI,CAAC;CACf;AAED,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnD;AAMD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtC;AAED,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBpJ;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,EAAE,CAuCxG;AAwBD,wGAAwG;AACxG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG;IAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAG5J;AAED,2GAA2G;AAC3G,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY1C;AAWD,2GAA2G;AAC3G,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzE;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAMvF;AAED,yHAAyH;AACzH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAI/G"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What stays of phase 0's look-back (design 0 rule 1, R60, D87): the quote
|
|
3
|
+
* checks (a finding's quotes really typed, on two different days, not one
|
|
4
|
+
* sitting), the secret filter, and whether `trail init` looks back here.
|
|
5
|
+
*
|
|
6
|
+
* Phase 0's find call, which sent up to 320k characters of the person's
|
|
7
|
+
* typed messages to the model, is gone for everyone, skills on or off: the
|
|
8
|
+
* no-model look-back (look-back-mine.ts) finds preferences itself, and the
|
|
9
|
+
* only model call left is the naming call over skills (name-call.ts).
|
|
10
|
+
*/
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { readJson, writeJsonAtomic } from "../util/state.js";
|
|
13
|
+
import { ensureRepoHome } from "../notes/home.js";
|
|
14
|
+
import { dayOf } from "./transcript.js";
|
|
15
|
+
import { secretReason } from "../notes/secrets.js";
|
|
16
|
+
/** The model phase 0's look-back used, and the naming call uses (name-call.ts). */
|
|
17
|
+
export const COLD_START_MODEL = "claude-sonnet-5-5";
|
|
18
|
+
/* -------------------------------------------------------------------------- */
|
|
19
|
+
/* Keeping only what's really there */
|
|
20
|
+
/* -------------------------------------------------------------------------- */
|
|
21
|
+
export function norm(s) {
|
|
22
|
+
return s
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.replace(/[“”"'`‘’]/g, "")
|
|
25
|
+
.replace(/[^\p{L}\p{N}]+/gu, " ")
|
|
26
|
+
.trim();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The sources a finding's quotes really are in, newest first, and the quotes
|
|
30
|
+
* that were found. A quote filed under the wrong source still counts for the
|
|
31
|
+
* one it's in; a quote under three words proves nothing.
|
|
32
|
+
*/
|
|
33
|
+
export function placeQuotes(evidence, sources) {
|
|
34
|
+
const found = new Map();
|
|
35
|
+
const quotes = [];
|
|
36
|
+
const cited = evidence
|
|
37
|
+
.map((ev, order) => {
|
|
38
|
+
const q = norm(ev.quote ?? "");
|
|
39
|
+
const has = (x) => x.said.some((w) => w.includes(q));
|
|
40
|
+
return { ev, order, has, in: q.split(" ").length < 3 ? [] : sources.filter(has) };
|
|
41
|
+
})
|
|
42
|
+
.filter((c) => c.in.length);
|
|
43
|
+
// The quote that fits fewest sources picks first, so a looser one can still count somewhere else.
|
|
44
|
+
for (const c of [...cited].sort((a, b) => a.in.length - b.in.length || a.order - b.order)) {
|
|
45
|
+
// Misfiled: the source it's really in, one not counted yet when there is one.
|
|
46
|
+
const hit = c.ev.cited && c.has(c.ev.cited) ? c.ev.cited : (c.in.find((x) => !found.has(x.id)) ?? c.in[0]);
|
|
47
|
+
found.set(hit.id, hit);
|
|
48
|
+
}
|
|
49
|
+
for (const c of cited)
|
|
50
|
+
quotes.push(c.ev.quote.trim());
|
|
51
|
+
return { places: [...found.values()].sort((a, b) => b.at.localeCompare(a.at)), quotes };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The findings whose quotes are really in the person's messages, in two or
|
|
55
|
+
* more sessions, best first. A quote filed under the wrong session still
|
|
56
|
+
* counts for the session it's in.
|
|
57
|
+
*/
|
|
58
|
+
export function verify(raw, sessions, _ids) {
|
|
59
|
+
// One place per session per day, so a quote counts once a day: restarts don't add up, a long session's days do.
|
|
60
|
+
const sources = [];
|
|
61
|
+
for (const s of sessions) {
|
|
62
|
+
const byDay = new Map();
|
|
63
|
+
for (const p of s.prompts) {
|
|
64
|
+
const day = dayOf(p.at) || dayOf(s.at) || `session ${s.id}`;
|
|
65
|
+
const place = byDay.get(day) ?? { said: [], times: [], raw: [] };
|
|
66
|
+
place.said.push(norm(p.text));
|
|
67
|
+
place.times.push(Date.parse(p.at ?? s.at));
|
|
68
|
+
place.raw.push(p.text);
|
|
69
|
+
byDay.set(day, place);
|
|
70
|
+
}
|
|
71
|
+
for (const [day, place] of byDay)
|
|
72
|
+
sources.push({ id: `${s.id} ${day}`, at: day, ...place, session: s.id, day });
|
|
73
|
+
}
|
|
74
|
+
const out = [];
|
|
75
|
+
for (const f of raw) {
|
|
76
|
+
const title = f.title?.trim();
|
|
77
|
+
const body = f.body?.trim();
|
|
78
|
+
if (!title || !body)
|
|
79
|
+
continue;
|
|
80
|
+
// Where a quote really is decides, wherever the model filed it.
|
|
81
|
+
const evidence = (f.evidence ?? []).map((ev) => ({ quote: ev.quote }));
|
|
82
|
+
const { places, quotes } = placeQuotes(evidence, sources);
|
|
83
|
+
const placed = places;
|
|
84
|
+
const days = new Set(placed.map((p) => p.day));
|
|
85
|
+
const typed = typedFor(placed, quotes.map(norm));
|
|
86
|
+
if (days.size < 2 || oneSitting(typed.map((t) => t.time)))
|
|
87
|
+
continue;
|
|
88
|
+
out.push({
|
|
89
|
+
title: noEmails(title).slice(0, 80),
|
|
90
|
+
for: f.for === "you" ? "you" : "team",
|
|
91
|
+
body: noEmails(body),
|
|
92
|
+
sessions: [...new Set(placed.map((p) => p.session))],
|
|
93
|
+
days: days.size,
|
|
94
|
+
last: places[0].at.slice(0, 10),
|
|
95
|
+
quotes,
|
|
96
|
+
...(typed.some((t) => secretReason(t.text) !== null) ? { secret: true } : {}),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return out.sort((a, b) => b.days - a.days || b.last.localeCompare(a.last));
|
|
100
|
+
}
|
|
101
|
+
/** Two dates closer than this are one sitting that crossed midnight, not two days. */
|
|
102
|
+
const SITTING_MS = 8 * 60 * 60 * 1000;
|
|
103
|
+
/** The typed messages in `places` that hold one of the (normalised) quotes. */
|
|
104
|
+
function typedFor(places, quotes) {
|
|
105
|
+
const out = [];
|
|
106
|
+
for (const p of places)
|
|
107
|
+
p.said.forEach((w, i) => quotes.some((q) => q && w.includes(q)) && out.push({ text: p.raw[i], time: p.times[i] }));
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
/** Whether every time the quotes were typed falls within one sitting (a restart at 11:55 pm and 12:05 am). Unknown times don't decide. */
|
|
111
|
+
function oneSitting(times) {
|
|
112
|
+
if (times.length < 2 || times.some((t) => !Number.isFinite(t)))
|
|
113
|
+
return false;
|
|
114
|
+
return Math.max(...times) - Math.min(...times) < SITTING_MS;
|
|
115
|
+
}
|
|
116
|
+
/** Email addresses replaced: a learning can be committed, and an address is nobody's business there. */
|
|
117
|
+
export function noEmails(text) {
|
|
118
|
+
return text.replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g, "[email]");
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The findings with no secret in their title, body or quotes (or in the typed
|
|
122
|
+
* words a quote was found in), and how many were left out for one. A finding with a secret is refused whole, never
|
|
123
|
+
* scrubbed and kept: a missed shape in a committed file is the worst case.
|
|
124
|
+
*/
|
|
125
|
+
export function withoutSecrets(findings) {
|
|
126
|
+
const kept = findings.filter((f) => !f.secret && ![f.title, f.body, ...f.quotes].some((t) => secretReason(t) !== null));
|
|
127
|
+
return { findings: kept, leftOut: findings.length - kept.length };
|
|
128
|
+
}
|
|
129
|
+
/** Anything that looks like a credential, a key or an email address, replaced. Learnings get committed. */
|
|
130
|
+
export function scrub(text) {
|
|
131
|
+
return text
|
|
132
|
+
.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g, "[redacted]")
|
|
133
|
+
.replace(/\b(?:sk|pk|rk)-[A-Za-z0-9_-]{16,}/g, "[redacted]")
|
|
134
|
+
.replace(/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}|\bgithub_pat_[A-Za-z0-9_]{20,}/g, "[redacted]")
|
|
135
|
+
.replace(/\bxox[abposr]-[A-Za-z0-9-]{10,}/g, "[redacted]")
|
|
136
|
+
.replace(/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g, "[redacted]")
|
|
137
|
+
.replace(/\bAIza[0-9A-Za-z_-]{30,}/g, "[redacted]")
|
|
138
|
+
.replace(/\b(?:mb|trl|nn)_[A-Za-z0-9]{16,}/g, "[redacted]")
|
|
139
|
+
.replace(/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g, "[redacted]")
|
|
140
|
+
.replace(/\b(password|passwd|secret|token|api[_-]?key)(\s*[:=]\s*)\S+/gi, "$1$2[redacted]")
|
|
141
|
+
.replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g, "[email]");
|
|
142
|
+
}
|
|
143
|
+
/* -------------------------------------------------------------------------- */
|
|
144
|
+
/* At trail init */
|
|
145
|
+
/* -------------------------------------------------------------------------- */
|
|
146
|
+
/** Where a repo remembers that its past sessions were read, on this machine. */
|
|
147
|
+
function readMark(repo, env) {
|
|
148
|
+
return join(ensureRepoHome(repo, env).place.dir, "past-sessions.json");
|
|
149
|
+
}
|
|
150
|
+
/** `TRAIL_NO_LOOK_BACK=1` turns the look-back off. (`TRAIL_NO_FETCH` doesn't: nothing here is fetched.) */
|
|
151
|
+
export function lookBackOff(env = process.env) {
|
|
152
|
+
return env.TRAIL_NO_LOOK_BACK === "1";
|
|
153
|
+
}
|
|
154
|
+
/** Whether `trail init` would look back here: on, and not done on this machine before (`--look-back` looks again). */
|
|
155
|
+
export function lookBackDue(repo, env = process.env) {
|
|
156
|
+
try {
|
|
157
|
+
return !lookBackOff(env) && !readJson(readMark(repo, env))?.at;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/** The person answered what the look-back found here (or it found nothing): plain `trail init` won't look back again. */
|
|
164
|
+
export function markLookedBack(repo, now = new Date(), env = process.env) {
|
|
165
|
+
try {
|
|
166
|
+
writeJsonAtomic(readMark(repo, env), { at: now.getTime(), v: 2 }, true);
|
|
167
|
+
}
|
|
168
|
+
catch { /* the next init looks again */ }
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=look-back.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look-back.js","sourceRoot":"","sources":["../../src/init/look-back.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAmBnD,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AASpD,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,CAAC;SACL,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,IAAI,EAAE,CAAC;AACZ,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAAmD,EAAE,OAAsB;IACrG,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ;SACnB,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACpF,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9B,kGAAkG;IAClG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1F,8EAA8E;QAC9E,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAC5G,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,GAAiB,EAAE,QAAuB,EAAE,IAA0B;IAC3F,gHAAgH;IAChH,MAAM,OAAO,GAA+D,EAAE,CAAC;IAC/E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE,SAAS;QAC9B,gEAAgE;QAChE,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAoC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,SAAS;QACpE,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACnC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YACrC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM;YACN,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAQtC,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,MAAsC,EAAE,MAAgB;IACxE,MAAM,GAAG,GAAqC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;IAC7I,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0IAA0I;AAC1I,SAAS,UAAU,CAAC,KAAe;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC;AAC9D,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,iDAAiD,EAAE,SAAS,CAAC,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAA6E,QAAa;IACtH,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACxH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,OAAO,CAAC,6EAA6E,EAAE,YAAY,CAAC;SACpG,OAAO,CAAC,oCAAoC,EAAE,YAAY,CAAC;SAC3D,OAAO,CAAC,4EAA4E,EAAE,YAAY,CAAC;SACnG,OAAO,CAAC,kCAAkC,EAAE,YAAY,CAAC;SACzD,OAAO,CAAC,gCAAgC,EAAE,YAAY,CAAC;SACvD,OAAO,CAAC,2BAA2B,EAAE,YAAY,CAAC;SAClD,OAAO,CAAC,mCAAmC,EAAE,YAAY,CAAC;SAC1D,OAAO,CAAC,kEAAkE,EAAE,YAAY,CAAC;SACzF,OAAO,CAAC,+DAA+D,EAAE,gBAAgB,CAAC;SAC1F,OAAO,CAAC,iDAAiD,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,gFAAgF;AAChF,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAsB;IACpD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;AACzE,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC5E,IAAI,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAkB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAAY,IAAI,IAAI,EAAE,EAAE,MAAyB,OAAO,CAAC,GAAG;IACvG,IAAI,CAAC;QACH,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { JobClass, RunSheet, WallClass } from '../trace/types.js';
|
|
2
|
+
import { type noteWalls } from '../trace/wall-state.js';
|
|
3
|
+
import type { Replay, ReplaySheet } from './replay-runs.js';
|
|
4
|
+
import type { SkillSource } from './types.js';
|
|
5
|
+
export interface JobGood {
|
|
6
|
+
sheet: RunSheet;
|
|
7
|
+
/** Where to compile it again. `skillSha` is '' until the candidate is compiled. */
|
|
8
|
+
src: SkillSource;
|
|
9
|
+
/** The checkout the run's repo was in, for relativizing paths. */
|
|
10
|
+
root: string;
|
|
11
|
+
/** The checked run of the same job before it, for params (compile's `prior`). */
|
|
12
|
+
prior: ReplaySheet | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* `days`: session-days as `YYYY-MM-DD|<session hash>`, sorted; `costly`: how many of them cost 5+ tool calls or
|
|
16
|
+
* had a failure (`costlyDays`: which); `good`: newest first, at most 3; `words`: the job's vocabulary words seen.
|
|
17
|
+
*/
|
|
18
|
+
export interface JobFind {
|
|
19
|
+
job: JobClass;
|
|
20
|
+
days: string[];
|
|
21
|
+
costly: number;
|
|
22
|
+
good: JobGood[];
|
|
23
|
+
costlyDays?: string[];
|
|
24
|
+
words?: string[];
|
|
25
|
+
}
|
|
26
|
+
/** Mines one replay at a time; `result()` when every session is read. */
|
|
27
|
+
export declare class JobMiner {
|
|
28
|
+
private days;
|
|
29
|
+
private sheets;
|
|
30
|
+
private words;
|
|
31
|
+
add(r: Replay): this;
|
|
32
|
+
/** Sheets held now, all jobs. */
|
|
33
|
+
held(): number;
|
|
34
|
+
result(): JobFind[];
|
|
35
|
+
}
|
|
36
|
+
export declare function mineJobs(replays: Replay[]): JobFind[];
|
|
37
|
+
/** The program a wall hit is put down to: the catalog's program the command runs (`timeout`, `git`), else its own. */
|
|
38
|
+
export declare function wallProgram(cls: WallClass, cmd: string | null): string;
|
|
39
|
+
type WallsAdd = Parameters<typeof noteWalls>[0];
|
|
40
|
+
/**
|
|
41
|
+
* Wall hits and repairs, shaped for wall-state's noteWalls (no command text), for the sessions not yet in
|
|
42
|
+
* `read` (walls.json's), and those sessions' `read` marks.
|
|
43
|
+
*/
|
|
44
|
+
export declare function mineWalls(replays: Replay[], read?: Record<string, string>): WallsAdd;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=miners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miners.d.ts","sourceRoot":"","sources":["../../src/init/miners.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,QAAQ,CAAC;IAChB,mFAAmF;IACnF,GAAG,EAAE,WAAW,CAAC;IACjB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IAAG,GAAG,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AAIpI,yEAAyE;AACzE,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,KAAK,CAAoC;IAEjD,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAyBpB,iCAAiC;IACjC,IAAI,IAAI,MAAM;IAMd,MAAM,IAAI,OAAO,EAAE;CAiBpB;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAIrD;AAKD,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAWtE;AAED,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,QAAQ,CAyBxF"}
|