@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,377 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which past Claude Code sessions are a repo's: the input to `trail init`'s
|
|
3
|
+
* look-back.
|
|
4
|
+
*
|
|
5
|
+
* Claude Code keeps each session in `~/.claude/projects/<folder>/<id>.jsonl`,
|
|
6
|
+
* the folder named after where the session started. A repo's sessions are:
|
|
7
|
+
* - its own: started in the checkout or a folder under it;
|
|
8
|
+
* - its worktrees': started in any worktree git still lists;
|
|
9
|
+
* - other clones': started in another checkout whose remote is the same repo
|
|
10
|
+
* (the key `repoPlace` gives every checkout of one remote);
|
|
11
|
+
* - sessions started in a folder above any of those (`~/work`, the home
|
|
12
|
+
* folder) that then worked in the repo: kept when 30% or more of their tool
|
|
13
|
+
* calls touched it, and only the stretch from the ask that led there to the
|
|
14
|
+
* last call in it.
|
|
15
|
+
*
|
|
16
|
+
* A file's own `cwd` decides, never the folder's name alone: Claude Code has
|
|
17
|
+
* named folders more than one way, and a sibling (`api-old`) shares a prefix.
|
|
18
|
+
* Counts are session-days: a months-long session typed into on 30 days is 30,
|
|
19
|
+
* two restarts on one morning are two sessions on one day.
|
|
20
|
+
*/
|
|
21
|
+
import { spawnSync } from "node:child_process";
|
|
22
|
+
import { closeSync, existsSync, lstatSync, readdirSync } from "node:fs";
|
|
23
|
+
import { homedir, tmpdir } from "node:os";
|
|
24
|
+
import { basename, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
25
|
+
import { checkoutRoot, remoteKey, repoPlace } from "../notes/home.js";
|
|
26
|
+
import { claudeProjectDir } from "../notes/session-cost.js";
|
|
27
|
+
import { openPlain } from "./plain-file.js";
|
|
28
|
+
import { dayOf, firstCwd, scanTranscript, sessionOf } from "./transcript.js";
|
|
29
|
+
export { ownWords, readSession } from "./transcript.js";
|
|
30
|
+
/** Share of an above-the-repo session's tool calls that must be in the repo for it to count. */
|
|
31
|
+
export const ANCESTOR_SHARE = 0.3;
|
|
32
|
+
/** A transcript last written longer ago than this is not read (design 4.1). */
|
|
33
|
+
export const TOO_OLD_DAYS = 400;
|
|
34
|
+
/**
|
|
35
|
+
* A scratch folder (/tmp, the OS temp folder, /var/folders, a `/scratchpad/` segment), as 1a's skills gate
|
|
36
|
+
* reads one, unless the checkout itself is in one: then its own sessions are its own.
|
|
37
|
+
*/
|
|
38
|
+
function scratch(cwd, top) {
|
|
39
|
+
// Windows paths ignore case (c:\ and C:\ are one folder) and resolve() gives them '\'.
|
|
40
|
+
const fold = (x) => (process.platform === "win32" ? x.toLowerCase() : x);
|
|
41
|
+
const pad = (path) => `${fold(resolve(path))}${sep}`.includes(`${sep}scratchpad${sep}`);
|
|
42
|
+
const isScratch = (path) => {
|
|
43
|
+
const p = fold(resolve(path));
|
|
44
|
+
if (pad(path))
|
|
45
|
+
return true;
|
|
46
|
+
const roots = [tmpdir(), "/tmp", "/private/tmp", "/var/folders", "/private/var/folders"].map((r) => fold(resolve(r)));
|
|
47
|
+
return roots.some((r) => p === r || p.startsWith(r + sep));
|
|
48
|
+
};
|
|
49
|
+
if (pad(cwd) && !pad(top))
|
|
50
|
+
return true;
|
|
51
|
+
return isScratch(cwd) && !isScratch(top);
|
|
52
|
+
}
|
|
53
|
+
function git(dir, args) {
|
|
54
|
+
const r = spawnSync("git", ["-C", dir, ...args], { encoding: "utf8", timeout: 5000 });
|
|
55
|
+
return r.status === 0 ? r.stdout.trim() : "";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The checkout `repo` belongs to and every worktree of it git still lists:
|
|
59
|
+
* sessions run in any of them, or in a folder under one, are this repo's.
|
|
60
|
+
* Worktrees git has forgotten were usually under the main checkout
|
|
61
|
+
* (`.claude/worktrees/…`), so their sessions are still found under it.
|
|
62
|
+
*/
|
|
63
|
+
export function repoRoots(repo) {
|
|
64
|
+
const roots = new Set([resolve(repo)]);
|
|
65
|
+
const common = git(repo, ["rev-parse", "--path-format=absolute", "--git-common-dir"]);
|
|
66
|
+
if (common && basename(common) === ".git")
|
|
67
|
+
roots.add(dirname(common));
|
|
68
|
+
for (const line of git(repo, ["worktree", "list", "--porcelain"]).split("\n")) {
|
|
69
|
+
if (line.startsWith("worktree "))
|
|
70
|
+
roots.add(resolve(line.slice("worktree ".length)));
|
|
71
|
+
}
|
|
72
|
+
return [...roots];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* {@link repoRoots}, plus every other checkout on this machine whose remote is
|
|
76
|
+
* the same repo: a fresh clone at `~/trail-demo/me` of github.com/acme/api
|
|
77
|
+
* finds the sessions and Claude memory of `~/src/api`. Claude Code keeps each
|
|
78
|
+
* project's folder under ~/.claude/projects; each folder's first transcript
|
|
79
|
+
* says where it ran, and that folder's git config names its remote (#662).
|
|
80
|
+
*/
|
|
81
|
+
export function sameRepoRoots(repo, home = homedir()) {
|
|
82
|
+
const roots = new Set(repoRoots(repo));
|
|
83
|
+
const mine = remoteKey(repo)?.key;
|
|
84
|
+
if (!mine)
|
|
85
|
+
return [...roots];
|
|
86
|
+
const projects = join(home, ".claude", "projects");
|
|
87
|
+
let dirs;
|
|
88
|
+
try {
|
|
89
|
+
dirs = readdirSync(projects);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return [...roots];
|
|
93
|
+
}
|
|
94
|
+
const seen = new Set();
|
|
95
|
+
for (const d of dirs) {
|
|
96
|
+
let first;
|
|
97
|
+
try {
|
|
98
|
+
first = readdirSync(join(projects, d)).find((f) => f.endsWith(".jsonl"));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const cwd = first ? firstCwd(join(projects, d, first)) : null;
|
|
104
|
+
if (!cwd || seen.has(cwd))
|
|
105
|
+
continue;
|
|
106
|
+
seen.add(cwd);
|
|
107
|
+
const found = existsSync(cwd) ? remoteKey(cwd) : null;
|
|
108
|
+
if (found?.key === mine)
|
|
109
|
+
roots.add(found.checkout);
|
|
110
|
+
}
|
|
111
|
+
return [...roots];
|
|
112
|
+
}
|
|
113
|
+
/** Whether `path` is one of `roots` or inside one. */
|
|
114
|
+
export function within(path, roots) {
|
|
115
|
+
// On Windows a transcript's cwd says C:\a\b while git's worktree list says C:/a/b, and case doesn't matter.
|
|
116
|
+
const norm = (p) => (process.platform === "win32" ? p.replace(/\\/g, "/").toLowerCase() : p);
|
|
117
|
+
const p = norm(path);
|
|
118
|
+
return roots.some((root) => {
|
|
119
|
+
const r = norm(root);
|
|
120
|
+
return p === r || p.startsWith(r + sep) || p.startsWith(r + "/");
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/** Whether `dir` is a folder strictly above `path`. */
|
|
124
|
+
function above(dir, path) {
|
|
125
|
+
return !!dir && dir !== path && within(path, [dir]);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Transcript files for sessions run inside `roots`, by folder name and then
|
|
129
|
+
* each file's own `cwd`. Kept for callers that only know roots;
|
|
130
|
+
* `discoverSessions` is what init uses.
|
|
131
|
+
*/
|
|
132
|
+
export function sessionFiles(roots, home = homedir()) {
|
|
133
|
+
const prefixes = roots.map((r) => basename(claudeProjectDir(r, home)));
|
|
134
|
+
return transcriptFiles(home).filter(({ folder, path }) => {
|
|
135
|
+
if (!prefixes.some((p) => folder === p || folder.startsWith(p + "-")))
|
|
136
|
+
return false;
|
|
137
|
+
const cwd = firstCwd(path);
|
|
138
|
+
return !!cwd && within(cwd, roots);
|
|
139
|
+
}).map((f) => f.path);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Every top-level transcript under `~/.claude/projects`, with its size and mtime (0 when it can't be read). A
|
|
143
|
+
* project folder or a transcript that is a link is left out (b5 review): it can bring in a file from anywhere,
|
|
144
|
+
* another person's sessions among them, and init takes them as the person's words. So is anything not a plain file.
|
|
145
|
+
*/
|
|
146
|
+
function transcriptFiles(home) {
|
|
147
|
+
const projects = join(home, ".claude", "projects");
|
|
148
|
+
let folders;
|
|
149
|
+
try {
|
|
150
|
+
folders = readdirSync(projects);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
const out = [];
|
|
156
|
+
for (const folder of folders.sort()) {
|
|
157
|
+
let names;
|
|
158
|
+
try {
|
|
159
|
+
if (!lstatSync(join(projects, folder)).isDirectory())
|
|
160
|
+
continue;
|
|
161
|
+
names = readdirSync(join(projects, folder)).filter((f) => f.endsWith(".jsonl"));
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
for (const name of names.sort()) {
|
|
167
|
+
const path = join(projects, folder, name);
|
|
168
|
+
let size = 0;
|
|
169
|
+
let mtimeMs = 0;
|
|
170
|
+
let readable = false;
|
|
171
|
+
try {
|
|
172
|
+
const st = lstatSync(path);
|
|
173
|
+
if (!st.isFile())
|
|
174
|
+
continue;
|
|
175
|
+
size = st.size;
|
|
176
|
+
mtimeMs = st.mtimeMs;
|
|
177
|
+
closeSync(openPlain(path));
|
|
178
|
+
readable = true;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
/* listed, but not readable */
|
|
182
|
+
}
|
|
183
|
+
out.push({ folder, path, size, mtimeMs, readable });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return out;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* A test for "is this path in a checkout of the repo": inside a known root,
|
|
190
|
+
* or in a checkout whose remote key is the repo's (a clone or worktree found
|
|
191
|
+
* only through the path). Answers are cached per folder.
|
|
192
|
+
*/
|
|
193
|
+
function repoTest(roots, key, env) {
|
|
194
|
+
const known = [...roots];
|
|
195
|
+
const seen = new Map();
|
|
196
|
+
const has = (path) => {
|
|
197
|
+
if (!path || !isAbsolute(path))
|
|
198
|
+
return false;
|
|
199
|
+
if (within(path, known))
|
|
200
|
+
return true;
|
|
201
|
+
if (!key)
|
|
202
|
+
return false;
|
|
203
|
+
const top = checkoutRoot(path);
|
|
204
|
+
if (!top)
|
|
205
|
+
return false;
|
|
206
|
+
let same = seen.get(top);
|
|
207
|
+
if (same === undefined) {
|
|
208
|
+
same = repoPlace(top, env).key === key;
|
|
209
|
+
seen.set(top, same);
|
|
210
|
+
if (same)
|
|
211
|
+
known.push(top);
|
|
212
|
+
}
|
|
213
|
+
return same;
|
|
214
|
+
};
|
|
215
|
+
return { has, roots: known };
|
|
216
|
+
}
|
|
217
|
+
const PATH_FIELDS = ["file_path", "path", "notebook_path"];
|
|
218
|
+
/** Absolute paths a shell command names: quoted ones (spaces kept), bare ones, and `cd` targets resolved against `cwd`. */
|
|
219
|
+
export function commandPaths(command, cwd) {
|
|
220
|
+
const out = [];
|
|
221
|
+
for (const m of command.matchAll(/"([^"\n]+)"|'([^'\n]+)'/g))
|
|
222
|
+
out.push((m[1] ?? m[2]));
|
|
223
|
+
for (const t of command.replace(/"[^"\n]*"|'[^'\n]*'/g, " ").split(/[\s;&|()<>=`]+/))
|
|
224
|
+
if (t)
|
|
225
|
+
out.push(t);
|
|
226
|
+
for (const m of command.matchAll(/\bcd\s+(?:"([^"\n]+)"|'([^'\n]+)'|([^\s;&|)]+))/g)) {
|
|
227
|
+
const target = (m[1] ?? m[2] ?? m[3]);
|
|
228
|
+
if (cwd && !isAbsolute(target) && !target.startsWith("~") && !target.startsWith("$"))
|
|
229
|
+
out.push(resolve(cwd, target));
|
|
230
|
+
}
|
|
231
|
+
return out.filter((p) => isAbsolute(p));
|
|
232
|
+
}
|
|
233
|
+
/** Whether one tool call worked in the repo: its cwd, a path field, or a path its command names. */
|
|
234
|
+
function callTouches(has) {
|
|
235
|
+
return (cwd, _name, input) => {
|
|
236
|
+
if (has(cwd))
|
|
237
|
+
return true;
|
|
238
|
+
if (!input || typeof input !== "object")
|
|
239
|
+
return false;
|
|
240
|
+
const fields = input;
|
|
241
|
+
for (const f of PATH_FIELDS) {
|
|
242
|
+
const v = fields[f];
|
|
243
|
+
if (typeof v === "string" && v && has(isAbsolute(v) ? v : cwd ? resolve(cwd, v) : v))
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
const command = fields.command;
|
|
247
|
+
return typeof command === "string" && commandPaths(command, cwd).some(has);
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Every past session that is the repo's (see the top of this file), each with its transcript path and the byte
|
|
252
|
+
* range its repo work is in (`stretch`), and what was left out and why: files last written over 400 days before
|
|
253
|
+
* `now`, sessions in a scratch folder, headless runs, ancestor sessions under the share, files that can't be
|
|
254
|
+
* read. Reads only; never throws.
|
|
255
|
+
*/
|
|
256
|
+
export function discoverSessions(repo, home = homedir(), now = new Date(), env = process.env) {
|
|
257
|
+
const found = { sessions: [], bySource: { own: 0, worktree: 0, clone: 0, ancestor: 0 }, skippedAncestor: 0, sessionDays: 0, days: 0, skipped: [] };
|
|
258
|
+
const skip = (path, why) => found.skipped.push({ path, why });
|
|
259
|
+
try {
|
|
260
|
+
const top = checkoutRoot(repo) ?? resolve(repo);
|
|
261
|
+
// b7 review: the repo keys under the Trail home the caller has (a test's or the lab's), never process.env's.
|
|
262
|
+
const place = repoPlace(repo, env);
|
|
263
|
+
const key = place.git && !place.key.startsWith("local/") ? place.key : null;
|
|
264
|
+
const worktrees = repoRoots(repo).filter((r) => r !== top);
|
|
265
|
+
const repoHas = repoTest([top, ...worktrees], key, env);
|
|
266
|
+
const sourceOf = (cwd) => {
|
|
267
|
+
if (!cwd)
|
|
268
|
+
return null;
|
|
269
|
+
if (within(cwd, [top]))
|
|
270
|
+
return "own";
|
|
271
|
+
if (within(cwd, worktrees))
|
|
272
|
+
return "worktree";
|
|
273
|
+
return key && repoHas.has(cwd) ? "clone" : null;
|
|
274
|
+
};
|
|
275
|
+
const ownFolders = [top, ...worktrees].map((r) => basename(claudeProjectDir(r, home)));
|
|
276
|
+
const oldest = now.getTime() - TOO_OLD_DAYS * 86_400_000;
|
|
277
|
+
const files = [];
|
|
278
|
+
for (const f of transcriptFiles(home)) {
|
|
279
|
+
if (!f.readable) {
|
|
280
|
+
// Only a file in one of the repo's own folders is worth saying: anything else may not be this repo's.
|
|
281
|
+
if (ownFolders.some((p) => f.folder === p || f.folder.startsWith(p + "-")))
|
|
282
|
+
skip(f.path, "unreadable");
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
files.push({ ...f, cwd: firstCwd(f.path) ?? "" });
|
|
286
|
+
}
|
|
287
|
+
const seen = new Set();
|
|
288
|
+
const keep = (s, source, stretch) => {
|
|
289
|
+
if (!s || seen.has(s.id))
|
|
290
|
+
return;
|
|
291
|
+
seen.add(s.id);
|
|
292
|
+
found.sessions.push({ ...s, source, stretch });
|
|
293
|
+
found.bySource[source]++;
|
|
294
|
+
};
|
|
295
|
+
/** Too old or in a scratch folder: said once, never read. */
|
|
296
|
+
const leftOut = (f) => {
|
|
297
|
+
if (f.mtimeMs && f.mtimeMs < oldest) {
|
|
298
|
+
skip(f.path, "too-old");
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
if (scratch(f.cwd, top)) {
|
|
302
|
+
skip(f.path, "scratch");
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
return false;
|
|
306
|
+
};
|
|
307
|
+
const later = [];
|
|
308
|
+
for (const f of files) {
|
|
309
|
+
const source = sourceOf(f.cwd);
|
|
310
|
+
if (source) {
|
|
311
|
+
if (leftOut(f))
|
|
312
|
+
continue;
|
|
313
|
+
const scan = scanTranscript(f.path, undefined, env);
|
|
314
|
+
if (scan.headless)
|
|
315
|
+
skip(f.path, "headless");
|
|
316
|
+
else
|
|
317
|
+
keep(sessionOf(f.path, scan), source, { from: 0, to: f.size });
|
|
318
|
+
}
|
|
319
|
+
else if (f.cwd)
|
|
320
|
+
later.push(f);
|
|
321
|
+
}
|
|
322
|
+
// Started above the repo (or above a clone of it): only the in-repo stretch, and only past the share.
|
|
323
|
+
const touches = callTouches(repoHas.has);
|
|
324
|
+
for (const f of later) {
|
|
325
|
+
if (!repoHas.roots.some((r) => above(f.cwd, r)))
|
|
326
|
+
continue;
|
|
327
|
+
if (leftOut(f))
|
|
328
|
+
continue;
|
|
329
|
+
const scan = scanTranscript(f.path, touches, env);
|
|
330
|
+
if (scan.headless) {
|
|
331
|
+
skip(f.path, "headless");
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const inRepo = scan.calls.filter((c) => c.inRepo);
|
|
335
|
+
if (!scan.prompts.length)
|
|
336
|
+
continue;
|
|
337
|
+
if (!scan.calls.length || inRepo.length / scan.calls.length < ANCESTOR_SHARE) {
|
|
338
|
+
found.skippedAncestor++;
|
|
339
|
+
skip(f.path, "ancestor-under-30");
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
const first = inRepo[0];
|
|
343
|
+
const last = inRepo[inRepo.length - 1];
|
|
344
|
+
const ask = [...scan.prompts].reverse().find((p) => p.i < first.i);
|
|
345
|
+
const from = ask ? ask.i : first.i;
|
|
346
|
+
// The stretch: from the ask that led into the repo to the line after its last call there (its result and
|
|
347
|
+
// the reply that follows belong to it), or the end of the file.
|
|
348
|
+
const next = [...scan.prompts, ...scan.calls].filter((x) => x.i > last.i && x.o > last.o).reduce((m, x) => Math.min(m, x.o), f.size);
|
|
349
|
+
keep(sessionOf(f.path, scan, scan.prompts.filter((p) => p.i >= from && p.i <= last.i)), "ancestor", { from: ask ? ask.o : first.o, to: next });
|
|
350
|
+
}
|
|
351
|
+
found.sessions.sort((a, b) => b.at.localeCompare(a.at));
|
|
352
|
+
const all = new Set();
|
|
353
|
+
for (const s of found.sessions) {
|
|
354
|
+
const days = new Set(s.prompts.map((p) => dayOf(p.at ?? s.at)).filter(Boolean));
|
|
355
|
+
if (!days.size && dayOf(s.at))
|
|
356
|
+
days.add(dayOf(s.at));
|
|
357
|
+
found.sessionDays += days.size;
|
|
358
|
+
for (const d of days)
|
|
359
|
+
all.add(d);
|
|
360
|
+
}
|
|
361
|
+
const sorted = [...all].sort();
|
|
362
|
+
found.days = sorted.length;
|
|
363
|
+
if (sorted.length) {
|
|
364
|
+
found.from = sorted[0];
|
|
365
|
+
found.to = sorted[sorted.length - 1];
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
/* discovery never stops init */
|
|
370
|
+
}
|
|
371
|
+
return found;
|
|
372
|
+
}
|
|
373
|
+
/** Every past session of the repo with something the person wrote, newest first. */
|
|
374
|
+
export function pastSessions(repo, home) {
|
|
375
|
+
return discoverSessions(repo, home).sessions;
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/init/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** Where a past session was found, as `trail init` counts them. */
|
|
2
|
+
export type SessionSource = "own" | "worktree" | "clone" | "ancestor";
|
|
3
|
+
/** One message the person wrote, with the end of what Claude said just before it. */
|
|
4
|
+
export interface PastPrompt {
|
|
5
|
+
text: string;
|
|
6
|
+
/** The tail of Claude's last reply before this message, so "no, use a worktree" reads on its own. */
|
|
7
|
+
before?: string;
|
|
8
|
+
/** ISO time it was sent, when the transcript says. */
|
|
9
|
+
at?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PastSession {
|
|
12
|
+
id: string;
|
|
13
|
+
/** ISO time of the first message. */
|
|
14
|
+
at: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
prompts: PastPrompt[];
|
|
17
|
+
source?: SessionSource;
|
|
18
|
+
/** The transcript file. */
|
|
19
|
+
path?: string;
|
|
20
|
+
/** The byte range the repo's work is in: the whole file, or an ancestor session's in-repo stretch (design 4.1). */
|
|
21
|
+
stretch?: {
|
|
22
|
+
from: number;
|
|
23
|
+
to: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The date an ISO time fell on where the person lives (this machine's time
|
|
28
|
+
* zone), `2026-10-09`; "" for anything else. Not the UTC date: UTC midnight
|
|
29
|
+
* is mid-afternoon in California, so a restart at 4:55 and 5:05 pm would
|
|
30
|
+
* count as two days.
|
|
31
|
+
*/
|
|
32
|
+
export declare function dayOf(iso: string | undefined): string;
|
|
33
|
+
/**
|
|
34
|
+
* Each complete line of `path`, in order, read in chunks, with the byte offset it starts at. `range` reads only
|
|
35
|
+
* the lines that start at or after `from` and before `to` (`from` must be a line start). Lines over 2 MB are
|
|
36
|
+
* skipped unread. Throws when the file can't be opened or isn't a plain file (a FIFO would hang the read).
|
|
37
|
+
*/
|
|
38
|
+
export declare function eachLine(path: string, onLine: (line: string, offset: number) => void, range?: {
|
|
39
|
+
from: number;
|
|
40
|
+
to: number;
|
|
41
|
+
}): void;
|
|
42
|
+
/** The first `cwd` in the first 256 KB of a transcript: the folder its session started in. Null when there's none or the file can't be read. */
|
|
43
|
+
export declare function firstCwd(path: string): string | null;
|
|
44
|
+
/** The person's message with what isn't theirs taken out (trace/claude.ts decides), or null when nothing of theirs is left. */
|
|
45
|
+
export declare function ownWords(raw: string): string | null;
|
|
46
|
+
/** Everything the look-back takes from one transcript, in the order it happened. */
|
|
47
|
+
export interface Scan {
|
|
48
|
+
/** A headless run (`claude -p`, the SDKs): its prompts were written once and replayed. */
|
|
49
|
+
headless: boolean;
|
|
50
|
+
branch?: string;
|
|
51
|
+
/** The person's messages; `i` is the order among prompts and calls, `o` the byte offset of its line. */
|
|
52
|
+
prompts: (PastPrompt & {
|
|
53
|
+
i: number;
|
|
54
|
+
o: number;
|
|
55
|
+
})[];
|
|
56
|
+
/** Tool calls; `inRepo` only when a `touches` test was given; `o` the byte offset of its line. */
|
|
57
|
+
calls: {
|
|
58
|
+
i: number;
|
|
59
|
+
o: number;
|
|
60
|
+
inRepo: boolean;
|
|
61
|
+
}[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* One transcript's typed messages and tool calls. `touches(cwd, name, input)`
|
|
65
|
+
* says whether a tool call worked in the repo; without it every call counts
|
|
66
|
+
* as out of the repo. `env` decides only whether an sdk run is read (a lab home with the switch, D99). Never throws:
|
|
67
|
+
* an unreadable file scans as empty.
|
|
68
|
+
*/
|
|
69
|
+
export declare function scanTranscript(path: string, touches?: (cwd: string, name: string, input: unknown) => boolean, env?: NodeJS.ProcessEnv): Scan;
|
|
70
|
+
/** A session from scanned prompts, or null when none is left. */
|
|
71
|
+
export declare function sessionOf(path: string, scan: Scan, prompts?: Array<PastPrompt & {
|
|
72
|
+
i: number;
|
|
73
|
+
o?: number;
|
|
74
|
+
}>, source?: SessionSource): PastSession | null;
|
|
75
|
+
/**
|
|
76
|
+
* One transcript's messages from the person, oldest first. Headless runs
|
|
77
|
+
* (`claude -p`, scripts) are skipped whole: their prompts were written once
|
|
78
|
+
* and replayed, so a repeat there isn't the person repeating themselves.
|
|
79
|
+
*/
|
|
80
|
+
export declare function readSession(path: string): PastSession | null;
|
|
81
|
+
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/init/transcript.ts"],"names":[],"mappings":"AAkBA,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAEtE,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,qGAAqG;IACrG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mHAAmH;IACnH,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAWD;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOrD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmCjI;AAED,gJAAgJ;AAChJ,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBpD;AAQD,+HAA+H;AAC/H,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnD;AAYD,oFAAoF;AACpF,MAAM,WAAW,IAAI;IACnB,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wGAAwG;IACxG,OAAO,EAAE,CAAC,UAAU,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IACnD,kGAAkG;IAClG,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACpD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,EAC3G,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAmD5C;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,KAAK,CAAC,UAAU,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAgB,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI,CAUrK;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAE5D"}
|