@nanonets/graft 0.23.1 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ai/crux.d.ts +31 -3
- package/dist/ai/crux.d.ts.map +1 -1
- package/dist/ai/crux.js +88 -10
- package/dist/ai/crux.js.map +1 -1
- package/dist/ai/llm/openai.d.ts +101 -0
- package/dist/ai/llm/openai.d.ts.map +1 -1
- package/dist/ai/llm/openai.js +396 -6
- package/dist/ai/llm/openai.js.map +1 -1
- package/dist/ai/llm/recover-tool.d.ts +2 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -1
- package/dist/ai/llm/recover-tool.js +1 -1
- package/dist/ai/llm/recover-tool.js.map +1 -1
- package/dist/ai/synthesize.d.ts.map +1 -1
- package/dist/ai/synthesize.js +100 -1
- package/dist/ai/synthesize.js.map +1 -1
- package/dist/ask/ask.d.ts +8 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +33 -12
- package/dist/ask/ask.js.map +1 -1
- package/dist/claude/format.js +1 -1
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-io.d.ts +44 -0
- package/dist/claude/hook-io.d.ts.map +1 -0
- package/dist/claude/hook-io.js +144 -0
- package/dist/claude/hook-io.js.map +1 -0
- package/dist/claude/hooks.d.ts +0 -18
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +24 -77
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.js +3 -3
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/note-signals.d.ts +28 -0
- package/dist/claude/note-signals.d.ts.map +1 -0
- package/dist/claude/note-signals.js +325 -0
- package/dist/claude/note-signals.js.map +1 -0
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +10 -4
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +49 -18
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/skills-hook-util.d.ts +25 -0
- package/dist/claude/skills-hook-util.d.ts.map +1 -0
- package/dist/claude/skills-hook-util.js +71 -0
- package/dist/claude/skills-hook-util.js.map +1 -0
- package/dist/claude/state.d.ts +4 -3
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/sync-run.js +1 -1
- package/dist/claude/sync-run.js.map +1 -1
- package/dist/cli-picker.d.ts +36 -5
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +60 -13
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +406 -64
- package/dist/cli.js.map +1 -1
- package/dist/cloud/lookup-activity.d.ts +16 -0
- package/dist/cloud/lookup-activity.d.ts.map +1 -0
- package/dist/cloud/lookup-activity.js +56 -0
- package/dist/cloud/lookup-activity.js.map +1 -0
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +3 -0
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +237 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +536 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/pair.d.ts +76 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +249 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +10 -2
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +119 -7
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +22 -1
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +16 -1
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/context/batches.d.ts +29 -0
- package/dist/context/batches.d.ts.map +1 -0
- package/dist/context/batches.js +130 -0
- package/dist/context/batches.js.map +1 -0
- package/dist/context/build.d.ts +7 -2
- package/dist/context/build.d.ts.map +1 -1
- package/dist/context/build.js +84 -50
- package/dist/context/build.js.map +1 -1
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +41 -4
- package/dist/context/node-file.js.map +1 -1
- package/dist/engine.d.ts +2 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -0
- package/dist/engine.js.map +1 -1
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +9 -4
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +8 -3
- package/dist/graph/enrich.js.map +1 -1
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +207 -6
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/lsp/client.d.ts +18 -0
- package/dist/graph/lsp/client.d.ts.map +1 -1
- package/dist/graph/lsp/client.js +40 -2
- package/dist/graph/lsp/client.js.map +1 -1
- package/dist/graph/lsp/enrich.d.ts.map +1 -1
- package/dist/graph/lsp/enrich.js +9 -1
- package/dist/graph/lsp/enrich.js.map +1 -1
- package/dist/graph/lsp/registry.d.ts +7 -0
- package/dist/graph/lsp/registry.d.ts.map +1 -1
- package/dist/graph/lsp/registry.js +27 -2
- package/dist/graph/lsp/registry.js.map +1 -1
- package/dist/graph/native.d.ts +2 -0
- package/dist/graph/native.d.ts.map +1 -1
- package/dist/graph/native.js +29 -4
- package/dist/graph/native.js.map +1 -1
- package/dist/graph/queries/gleam.scm +51 -0
- package/dist/graph/resolve.d.ts.map +1 -1
- package/dist/graph/resolve.js +65 -3
- package/dist/graph/resolve.js.map +1 -1
- package/dist/graph/workspace-cli.d.ts +2 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -1
- package/dist/graph/workspace-cli.js +1 -1
- package/dist/graph/workspace-cli.js.map +1 -1
- package/dist/hosts/claude-global.d.ts +14 -0
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +38 -3
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/init/install-record.d.ts +21 -0
- package/dist/init/install-record.d.ts.map +1 -0
- package/dist/init/install-record.js +144 -0
- package/dist/init/install-record.js.map +1 -0
- package/dist/init/plain-file.d.ts +11 -0
- package/dist/init/plain-file.d.ts.map +1 -0
- package/dist/init/plain-file.js +80 -0
- package/dist/init/plain-file.js.map +1 -0
- package/dist/mcp/brains.d.ts +72 -0
- package/dist/mcp/brains.d.ts.map +1 -0
- package/dist/mcp/brains.js +220 -0
- package/dist/mcp/brains.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +40 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +7 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/notes/branches.d.ts +7 -1
- package/dist/notes/branches.d.ts.map +1 -1
- package/dist/notes/branches.js +31 -3
- package/dist/notes/branches.js.map +1 -1
- package/dist/notes/cold-start.d.ts +42 -3
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +144 -24
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/credit.d.ts +37 -0
- package/dist/notes/credit.d.ts.map +1 -0
- package/dist/notes/credit.js +78 -0
- package/dist/notes/credit.js.map +1 -0
- package/dist/notes/every-repo.d.ts +18 -0
- package/dist/notes/every-repo.d.ts.map +1 -0
- package/dist/notes/every-repo.js +86 -0
- package/dist/notes/every-repo.js.map +1 -0
- package/dist/notes/find-notes.d.ts +17 -0
- package/dist/notes/find-notes.d.ts.map +1 -0
- package/dist/notes/find-notes.js +48 -0
- package/dist/notes/find-notes.js.map +1 -0
- package/dist/notes/flatten.d.ts +31 -0
- package/dist/notes/flatten.d.ts.map +1 -0
- package/dist/notes/flatten.js +73 -0
- package/dist/notes/flatten.js.map +1 -0
- package/dist/notes/git-facts.d.ts +2 -0
- package/dist/notes/git-facts.d.ts.map +1 -1
- package/dist/notes/git-facts.js +6 -0
- package/dist/notes/git-facts.js.map +1 -1
- package/dist/notes/guardrails.d.ts +8 -0
- package/dist/notes/guardrails.d.ts.map +1 -0
- package/dist/notes/guardrails.js +38 -0
- package/dist/notes/guardrails.js.map +1 -0
- package/dist/notes/home.d.ts +24 -6
- package/dist/notes/home.d.ts.map +1 -1
- package/dist/notes/home.js +82 -15
- package/dist/notes/home.js.map +1 -1
- package/dist/notes/learning-fields.d.ts +102 -0
- package/dist/notes/learning-fields.d.ts.map +1 -0
- package/dist/notes/learning-fields.js +214 -0
- package/dist/notes/learning-fields.js.map +1 -0
- package/dist/notes/lesson-index.d.ts +13 -0
- package/dist/notes/lesson-index.d.ts.map +1 -0
- package/dist/notes/lesson-index.js +135 -0
- package/dist/notes/lesson-index.js.map +1 -0
- package/dist/notes/linked-learnings.d.ts +8 -0
- package/dist/notes/linked-learnings.d.ts.map +1 -0
- package/dist/notes/linked-learnings.js +113 -0
- package/dist/notes/linked-learnings.js.map +1 -0
- package/dist/notes/memory-notes.d.ts +71 -0
- package/dist/notes/memory-notes.d.ts.map +1 -0
- package/dist/notes/memory-notes.js +239 -0
- package/dist/notes/memory-notes.js.map +1 -0
- package/dist/notes/note-gate.d.ts +42 -0
- package/dist/notes/note-gate.d.ts.map +1 -0
- package/dist/notes/note-gate.js +181 -0
- package/dist/notes/note-gate.js.map +1 -0
- package/dist/notes/notes.d.ts +29 -85
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +69 -254
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +35 -7
- package/dist/notes/pr-reviews.d.ts.map +1 -1
- package/dist/notes/pr-reviews.js +156 -46
- package/dist/notes/pr-reviews.js.map +1 -1
- package/dist/notes/replace.d.ts +14 -0
- package/dist/notes/replace.d.ts.map +1 -0
- package/dist/notes/replace.js +38 -0
- package/dist/notes/replace.js.map +1 -0
- package/dist/notes/repo-notes-dir.d.ts +2 -0
- package/dist/notes/repo-notes-dir.d.ts.map +1 -0
- package/dist/notes/repo-notes-dir.js +16 -0
- package/dist/notes/repo-notes-dir.js.map +1 -0
- package/dist/notes/secrets.d.ts +28 -0
- package/dist/notes/secrets.d.ts.map +1 -0
- package/dist/notes/secrets.js +362 -0
- package/dist/notes/secrets.js.map +1 -0
- package/dist/notes/targets.d.ts +37 -0
- package/dist/notes/targets.d.ts.map +1 -0
- package/dist/notes/targets.js +108 -0
- package/dist/notes/targets.js.map +1 -0
- package/dist/notes/team-check.d.ts +22 -0
- package/dist/notes/team-check.d.ts.map +1 -0
- package/dist/notes/team-check.js +130 -0
- package/dist/notes/team-check.js.map +1 -0
- package/dist/notes/trail-home.d.ts +3 -0
- package/dist/notes/trail-home.d.ts.map +1 -0
- package/dist/notes/trail-home.js +12 -0
- package/dist/notes/trail-home.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +33 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +274 -0
- package/dist/skills/anchors-cli.js.map +1 -0
- package/dist/skills/anchors-git.d.ts +29 -0
- package/dist/skills/anchors-git.d.ts.map +1 -0
- package/dist/skills/anchors-git.js +241 -0
- package/dist/skills/anchors-git.js.map +1 -0
- package/dist/skills/anchors-wide.d.ts +25 -0
- package/dist/skills/anchors-wide.d.ts.map +1 -0
- package/dist/skills/anchors-wide.js +481 -0
- package/dist/skills/anchors-wide.js.map +1 -0
- package/dist/skills/anchors.d.ts +32 -0
- package/dist/skills/anchors.d.ts.map +1 -0
- package/dist/skills/anchors.js +485 -0
- package/dist/skills/anchors.js.map +1 -0
- package/dist/skills/answers-prompt.d.ts +13 -0
- package/dist/skills/answers-prompt.d.ts.map +1 -0
- package/dist/skills/answers-prompt.js +83 -0
- package/dist/skills/answers-prompt.js.map +1 -0
- package/dist/skills/check-result.d.ts +26 -0
- package/dist/skills/check-result.d.ts.map +1 -0
- package/dist/skills/check-result.js +46 -0
- package/dist/skills/check-result.js.map +1 -0
- package/dist/skills/codex-sandbox.d.ts +6 -0
- package/dist/skills/codex-sandbox.d.ts.map +1 -0
- package/dist/skills/codex-sandbox.js +55 -0
- package/dist/skills/codex-sandbox.js.map +1 -0
- package/dist/skills/compile-split.d.ts +57 -0
- package/dist/skills/compile-split.d.ts.map +1 -0
- package/dist/skills/compile-split.js +532 -0
- package/dist/skills/compile-split.js.map +1 -0
- package/dist/skills/compile-version.d.ts +37 -0
- package/dist/skills/compile-version.d.ts.map +1 -0
- package/dist/skills/compile-version.js +56 -0
- package/dist/skills/compile-version.js.map +1 -0
- package/dist/skills/compile-waits.d.ts +12 -0
- package/dist/skills/compile-waits.d.ts.map +1 -0
- package/dist/skills/compile-waits.js +52 -0
- package/dist/skills/compile-waits.js.map +1 -0
- package/dist/skills/compile-words.d.ts +82 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +385 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +35 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +488 -0
- package/dist/skills/compile.js.map +1 -0
- package/dist/skills/credit-facts.d.ts +8 -0
- package/dist/skills/credit-facts.d.ts.map +1 -0
- package/dist/skills/credit-facts.js +32 -0
- package/dist/skills/credit-facts.js.map +1 -0
- package/dist/skills/directive-words.d.ts +11 -0
- package/dist/skills/directive-words.d.ts.map +1 -0
- package/dist/skills/directive-words.js +33 -0
- package/dist/skills/directive-words.js.map +1 -0
- package/dist/skills/fidelity.d.ts +42 -0
- package/dist/skills/fidelity.d.ts.map +1 -0
- package/dist/skills/fidelity.js +138 -0
- package/dist/skills/fidelity.js.map +1 -0
- package/dist/skills/forget-notice.d.ts +44 -0
- package/dist/skills/forget-notice.d.ts.map +1 -0
- package/dist/skills/forget-notice.js +131 -0
- package/dist/skills/forget-notice.js.map +1 -0
- package/dist/skills/found-skill.d.ts +35 -0
- package/dist/skills/found-skill.d.ts.map +1 -0
- package/dist/skills/found-skill.js +66 -0
- package/dist/skills/found-skill.js.map +1 -0
- package/dist/skills/front-version.d.ts +12 -0
- package/dist/skills/front-version.d.ts.map +1 -0
- package/dist/skills/front-version.js +87 -0
- package/dist/skills/front-version.js.map +1 -0
- package/dist/skills/host-facts.d.ts +51 -0
- package/dist/skills/host-facts.d.ts.map +1 -0
- package/dist/skills/host-facts.js +134 -0
- package/dist/skills/host-facts.js.map +1 -0
- package/dist/skills/ledger.d.ts +43 -0
- package/dist/skills/ledger.d.ts.map +1 -0
- package/dist/skills/ledger.js +336 -0
- package/dist/skills/ledger.js.map +1 -0
- package/dist/skills/lessons.d.ts +60 -0
- package/dist/skills/lessons.d.ts.map +1 -0
- package/dist/skills/lessons.js +396 -0
- package/dist/skills/lessons.js.map +1 -0
- package/dist/skills/never-save.d.ts +5 -0
- package/dist/skills/never-save.d.ts.map +1 -0
- package/dist/skills/never-save.js +158 -0
- package/dist/skills/never-save.js.map +1 -0
- package/dist/skills/offer-answers.d.ts +20 -0
- package/dist/skills/offer-answers.d.ts.map +1 -0
- package/dist/skills/offer-answers.js +51 -0
- package/dist/skills/offer-answers.js.map +1 -0
- package/dist/skills/own-folder.d.ts +9 -0
- package/dist/skills/own-folder.d.ts.map +1 -0
- package/dist/skills/own-folder.js +36 -0
- package/dist/skills/own-folder.js.map +1 -0
- package/dist/skills/params.d.ts +39 -0
- package/dist/skills/params.d.ts.map +1 -0
- package/dist/skills/params.js +275 -0
- package/dist/skills/params.js.map +1 -0
- package/dist/skills/person.d.ts +34 -0
- package/dist/skills/person.d.ts.map +1 -0
- package/dist/skills/person.js +102 -0
- package/dist/skills/person.js.map +1 -0
- package/dist/skills/probe-clean.d.ts +9 -0
- package/dist/skills/probe-clean.d.ts.map +1 -0
- package/dist/skills/probe-clean.js +48 -0
- package/dist/skills/probe-clean.js.map +1 -0
- package/dist/skills/probes.d.ts +26 -0
- package/dist/skills/probes.d.ts.map +1 -0
- package/dist/skills/probes.js +225 -0
- package/dist/skills/probes.js.map +1 -0
- package/dist/skills/ran-less.d.ts +5 -0
- package/dist/skills/ran-less.d.ts.map +1 -0
- package/dist/skills/ran-less.js +51 -0
- package/dist/skills/ran-less.js.map +1 -0
- package/dist/skills/recall.d.ts +119 -0
- package/dist/skills/recall.d.ts.map +1 -0
- package/dist/skills/recall.js +370 -0
- package/dist/skills/recall.js.map +1 -0
- package/dist/skills/receipts.d.ts +44 -0
- package/dist/skills/receipts.d.ts.map +1 -0
- package/dist/skills/receipts.js +223 -0
- package/dist/skills/receipts.js.map +1 -0
- package/dist/skills/risk-delta.d.ts +32 -0
- package/dist/skills/risk-delta.d.ts.map +1 -0
- package/dist/skills/risk-delta.js +56 -0
- package/dist/skills/risk-delta.js.map +1 -0
- package/dist/skills/risk.d.ts +73 -0
- package/dist/skills/risk.d.ts.map +1 -0
- package/dist/skills/risk.js +396 -0
- package/dist/skills/risk.js.map +1 -0
- package/dist/skills/run-checkout.d.ts +4 -0
- package/dist/skills/run-checkout.d.ts.map +1 -0
- package/dist/skills/run-checkout.js +37 -0
- package/dist/skills/run-checkout.js.map +1 -0
- package/dist/skills/runblock.d.ts +45 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +222 -0
- package/dist/skills/runblock.js.map +1 -0
- package/dist/skills/save-parse.d.ts +42 -0
- package/dist/skills/save-parse.d.ts.map +1 -0
- package/dist/skills/save-parse.js +172 -0
- package/dist/skills/save-parse.js.map +1 -0
- package/dist/skills/save-store.d.ts +12 -0
- package/dist/skills/save-store.d.ts.map +1 -0
- package/dist/skills/save-store.js +22 -0
- package/dist/skills/save-store.js.map +1 -0
- package/dist/skills/settings.d.ts +38 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +133 -0
- package/dist/skills/settings.js.map +1 -0
- package/dist/skills/skill-diff.d.ts +40 -0
- package/dist/skills/skill-diff.d.ts.map +1 -0
- package/dist/skills/skill-diff.js +191 -0
- package/dist/skills/skill-diff.js.map +1 -0
- package/dist/skills/skill-file.d.ts +24 -0
- package/dist/skills/skill-file.d.ts.map +1 -0
- package/dist/skills/skill-file.js +97 -0
- package/dist/skills/skill-file.js.map +1 -0
- package/dist/skills/skill-rebuild.d.ts +27 -0
- package/dist/skills/skill-rebuild.d.ts.map +1 -0
- package/dist/skills/skill-rebuild.js +85 -0
- package/dist/skills/skill-rebuild.js.map +1 -0
- package/dist/skills/skillmd.d.ts +17 -0
- package/dist/skills/skillmd.d.ts.map +1 -0
- package/dist/skills/skillmd.js +219 -0
- package/dist/skills/skillmd.js.map +1 -0
- package/dist/skills/skills.d.ts +2 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +1 -1
- package/dist/skills/skills.js.map +1 -1
- package/dist/skills/staleness.d.ts +27 -0
- package/dist/skills/staleness.d.ts.map +1 -0
- package/dist/skills/staleness.js +178 -0
- package/dist/skills/staleness.js.map +1 -0
- package/dist/skills/state.d.ts +36 -0
- package/dist/skills/state.d.ts.map +1 -0
- package/dist/skills/state.js +259 -0
- package/dist/skills/state.js.map +1 -0
- package/dist/skills/store-fs.d.ts +77 -0
- package/dist/skills/store-fs.d.ts.map +1 -0
- package/dist/skills/store-fs.js +194 -0
- package/dist/skills/store-fs.js.map +1 -0
- package/dist/skills/store-held.d.ts +44 -0
- package/dist/skills/store-held.d.ts.map +1 -0
- package/dist/skills/store-held.js +147 -0
- package/dist/skills/store-held.js.map +1 -0
- package/dist/skills/store.d.ts +73 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +279 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/skills/types.d.ts +422 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validate.d.ts +11 -0
- package/dist/skills/validate.d.ts.map +1 -0
- package/dist/skills/validate.js +112 -0
- package/dist/skills/validate.js.map +1 -0
- package/dist/skills/versions-fs.d.ts +45 -0
- package/dist/skills/versions-fs.d.ts.map +1 -0
- package/dist/skills/versions-fs.js +234 -0
- package/dist/skills/versions-fs.js.map +1 -0
- package/dist/skills/versions.d.ts +56 -0
- package/dist/skills/versions.d.ts.map +1 -0
- package/dist/skills/versions.js +351 -0
- package/dist/skills/versions.js.map +1 -0
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +8 -6
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/notice.d.ts.map +1 -1
- package/dist/telemetry/notice.js +3 -1
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/trace/check-reads.d.ts +36 -0
- package/dist/trace/check-reads.d.ts.map +1 -0
- package/dist/trace/check-reads.js +57 -0
- package/dist/trace/check-reads.js.map +1 -0
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +487 -0
- package/dist/trace/checks.js.map +1 -0
- package/dist/trace/claude.d.ts +124 -0
- package/dist/trace/claude.d.ts.map +1 -0
- package/dist/trace/claude.js +303 -0
- package/dist/trace/claude.js.map +1 -0
- package/dist/trace/codex-exec.d.ts +22 -0
- package/dist/trace/codex-exec.d.ts.map +1 -0
- package/dist/trace/codex-exec.js +129 -0
- package/dist/trace/codex-exec.js.map +1 -0
- package/dist/trace/codex-meta.d.ts +23 -0
- package/dist/trace/codex-meta.d.ts.map +1 -0
- package/dist/trace/codex-meta.js +112 -0
- package/dist/trace/codex-meta.js.map +1 -0
- package/dist/trace/codex.d.ts +33 -0
- package/dist/trace/codex.d.ts.map +1 -0
- package/dist/trace/codex.js +485 -0
- package/dist/trace/codex.js.map +1 -0
- package/dist/trace/cursor.d.ts +16 -0
- package/dist/trace/cursor.d.ts.map +1 -0
- package/dist/trace/cursor.js +133 -0
- package/dist/trace/cursor.js.map +1 -0
- package/dist/trace/dialect.d.ts +43 -0
- package/dist/trace/dialect.d.ts.map +1 -0
- package/dist/trace/dialect.js +95 -0
- package/dist/trace/dialect.js.map +1 -0
- package/dist/trace/epochs.d.ts +10 -0
- package/dist/trace/epochs.d.ts.map +1 -0
- package/dist/trace/epochs.js +16 -0
- package/dist/trace/epochs.js.map +1 -0
- package/dist/trace/failure.d.ts +15 -0
- package/dist/trace/failure.d.ts.map +1 -0
- package/dist/trace/failure.js +69 -0
- package/dist/trace/failure.js.map +1 -0
- package/dist/trace/gate-file.d.ts +71 -0
- package/dist/trace/gate-file.d.ts.map +1 -0
- package/dist/trace/gate-file.js +329 -0
- package/dist/trace/gate-file.js.map +1 -0
- package/dist/trace/guard-fast.d.ts +22 -0
- package/dist/trace/guard-fast.d.ts.map +1 -0
- package/dist/trace/guard-fast.js +213 -0
- package/dist/trace/guard-fast.js.map +1 -0
- package/dist/trace/host.d.ts +40 -0
- package/dist/trace/host.d.ts.map +1 -0
- package/dist/trace/host.js +84 -0
- package/dist/trace/host.js.map +1 -0
- package/dist/trace/housekeeping.d.ts +5 -0
- package/dist/trace/housekeeping.d.ts.map +1 -0
- package/dist/trace/housekeeping.js +93 -0
- package/dist/trace/housekeeping.js.map +1 -0
- package/dist/trace/jobs.d.ts +52 -0
- package/dist/trace/jobs.d.ts.map +1 -0
- package/dist/trace/jobs.js +182 -0
- package/dist/trace/jobs.js.map +1 -0
- package/dist/trace/known-repo.d.ts +3 -0
- package/dist/trace/known-repo.d.ts.map +1 -0
- package/dist/trace/known-repo.js +55 -0
- package/dist/trace/known-repo.js.map +1 -0
- package/dist/trace/pool.d.ts +40 -0
- package/dist/trace/pool.d.ts.map +1 -0
- package/dist/trace/pool.js +154 -0
- package/dist/trace/pool.js.map +1 -0
- package/dist/trace/redact.d.ts +8 -0
- package/dist/trace/redact.d.ts.map +1 -0
- package/dist/trace/redact.js +63 -0
- package/dist/trace/redact.js.map +1 -0
- package/dist/trace/repairs.d.ts +27 -0
- package/dist/trace/repairs.d.ts.map +1 -0
- package/dist/trace/repairs.js +303 -0
- package/dist/trace/repairs.js.map +1 -0
- package/dist/trace/run-calls.d.ts +82 -0
- package/dist/trace/run-calls.d.ts.map +1 -0
- package/dist/trace/run-calls.js +331 -0
- package/dist/trace/run-calls.js.map +1 -0
- package/dist/trace/run-join.d.ts +20 -0
- package/dist/trace/run-join.d.ts.map +1 -0
- package/dist/trace/run-join.js +99 -0
- package/dist/trace/run-join.js.map +1 -0
- package/dist/trace/run-sheets.d.ts +26 -0
- package/dist/trace/run-sheets.d.ts.map +1 -0
- package/dist/trace/run-sheets.js +145 -0
- package/dist/trace/run-sheets.js.map +1 -0
- package/dist/trace/run-turns.d.ts +24 -0
- package/dist/trace/run-turns.d.ts.map +1 -0
- package/dist/trace/run-turns.js +67 -0
- package/dist/trace/run-turns.js.map +1 -0
- package/dist/trace/run-verdict.d.ts +24 -0
- package/dist/trace/run-verdict.d.ts.map +1 -0
- package/dist/trace/run-verdict.js +176 -0
- package/dist/trace/run-verdict.js.map +1 -0
- package/dist/trace/runs.d.ts +54 -0
- package/dist/trace/runs.d.ts.map +1 -0
- package/dist/trace/runs.js +501 -0
- package/dist/trace/runs.js.map +1 -0
- package/dist/trace/seen-cache.d.ts +9 -0
- package/dist/trace/seen-cache.d.ts.map +1 -0
- package/dist/trace/seen-cache.js +46 -0
- package/dist/trace/seen-cache.js.map +1 -0
- package/dist/trace/shell-scan.d.ts +52 -0
- package/dist/trace/shell-scan.d.ts.map +1 -0
- package/dist/trace/shell-scan.js +318 -0
- package/dist/trace/shell-scan.js.map +1 -0
- package/dist/trace/shell-words.d.ts +91 -0
- package/dist/trace/shell-words.d.ts.map +1 -0
- package/dist/trace/shell-words.js +558 -0
- package/dist/trace/shell-words.js.map +1 -0
- package/dist/trace/shell.d.ts +91 -0
- package/dist/trace/shell.d.ts.map +1 -0
- package/dist/trace/shell.js +435 -0
- package/dist/trace/shell.js.map +1 -0
- package/dist/trace/skill-session.d.ts +64 -0
- package/dist/trace/skill-session.d.ts.map +1 -0
- package/dist/trace/skill-session.js +232 -0
- package/dist/trace/skill-session.js.map +1 -0
- package/dist/trace/state.d.ts +27 -0
- package/dist/trace/state.d.ts.map +1 -0
- package/dist/trace/state.js +98 -0
- package/dist/trace/state.js.map +1 -0
- package/dist/trace/tamper-code.d.ts +9 -0
- package/dist/trace/tamper-code.d.ts.map +1 -0
- package/dist/trace/tamper-code.js +174 -0
- package/dist/trace/tamper-code.js.map +1 -0
- package/dist/trace/tamper-git.d.ts +12 -0
- package/dist/trace/tamper-git.d.ts.map +1 -0
- package/dist/trace/tamper-git.js +77 -0
- package/dist/trace/tamper-git.js.map +1 -0
- package/dist/trace/tamper.d.ts +12 -0
- package/dist/trace/tamper.d.ts.map +1 -0
- package/dist/trace/tamper.js +405 -0
- package/dist/trace/tamper.js.map +1 -0
- package/dist/trace/typed.d.ts +30 -0
- package/dist/trace/typed.d.ts.map +1 -0
- package/dist/trace/typed.js +132 -0
- package/dist/trace/typed.js.map +1 -0
- package/dist/trace/types.d.ts +477 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +12 -0
- package/dist/trace/types.js.map +1 -0
- package/dist/trace/wall-state.d.ts +86 -0
- package/dist/trace/wall-state.d.ts.map +1 -0
- package/dist/trace/wall-state.js +279 -0
- package/dist/trace/wall-state.js.map +1 -0
- package/dist/trace/walls-glob.d.ts +11 -0
- package/dist/trace/walls-glob.d.ts.map +1 -0
- package/dist/trace/walls-glob.js +264 -0
- package/dist/trace/walls-glob.js.map +1 -0
- package/dist/trace/walls-quoted.d.ts +25 -0
- package/dist/trace/walls-quoted.d.ts.map +1 -0
- package/dist/trace/walls-quoted.js +81 -0
- package/dist/trace/walls-quoted.js.map +1 -0
- package/dist/trace/walls.d.ts +40 -0
- package/dist/trace/walls.d.ts.map +1 -0
- package/dist/trace/walls.js +318 -0
- package/dist/trace/walls.js.map +1 -0
- package/dist/upkeep.d.ts +1 -1
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +4 -1
- package/dist/upkeep.js.map +1 -1
- package/dist/util/actions-folder.d.ts +2 -0
- package/dist/util/actions-folder.d.ts.map +1 -0
- package/dist/util/actions-folder.js +9 -0
- package/dist/util/actions-folder.js.map +1 -0
- package/dist/util/front-matter.d.ts +31 -4
- package/dist/util/front-matter.d.ts.map +1 -1
- package/dist/util/front-matter.js +95 -3
- package/dist/util/front-matter.js.map +1 -1
- package/dist/util/private-file.d.ts +14 -0
- package/dist/util/private-file.d.ts.map +1 -0
- package/dist/util/private-file.js +82 -0
- package/dist/util/private-file.js.map +1 -0
- package/dist/util/private-fs.d.ts +25 -0
- package/dist/util/private-fs.d.ts.map +1 -0
- package/dist/util/private-fs.js +253 -0
- package/dist/util/private-fs.js.map +1 -0
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +3 -0
- package/dist/util/state.js.map +1 -1
- package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
- package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
- package/dist/viewer/app.js +2 -2
- package/package.json +10 -7
- package/scripts/run-tests.mjs +14 -2
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `trail init --connect <CODE>`: the onboarding on team.trailhq.com.
|
|
3
|
+
*
|
|
4
|
+
* A person signs up on the web, picks "Writing Code", and is shown two
|
|
5
|
+
* commands: install trail, then `trail init --connect TRL-XXXX-XXXX`. The code
|
|
6
|
+
* is one-time and short-lived; claiming it gives this machine a workspace
|
|
7
|
+
* token, kept where `trail login` keeps one (`~/.trail/cloud.json`).
|
|
8
|
+
*
|
|
9
|
+
* While init runs, the page ticks off stages as this sends them: connected,
|
|
10
|
+
* mapped, learned, done. Before `done`, one summary of the repo goes up, for
|
|
11
|
+
* the "What Trail found" page:
|
|
12
|
+
*
|
|
13
|
+
* - tokens: one real lookup on the fresh code map, and what it saved
|
|
14
|
+
* - learnings: titles, a short line of each and how many sessions said it
|
|
15
|
+
* - teammates: other people's recently pushed branches that change the
|
|
16
|
+
* files this person works on, from git
|
|
17
|
+
*
|
|
18
|
+
* Summaries only (the onboarding's "route B"): never code, diffs or session
|
|
19
|
+
* text. Every call is bounded and never throws; offline, init carries on and
|
|
20
|
+
* says nothing about it.
|
|
21
|
+
*/
|
|
22
|
+
import { execFileSync } from "node:child_process";
|
|
23
|
+
import { hostname } from "node:os";
|
|
24
|
+
import { formatAsk, ask } from "../ask/ask.js";
|
|
25
|
+
import { contextDirFor } from "../context/node-file.js";
|
|
26
|
+
import { loadGraphCached } from "../graph/load.js";
|
|
27
|
+
import { buildRepoMap } from "../graph/map.js";
|
|
28
|
+
import { refreshBranches, safeRef } from "../notes/branches.js";
|
|
29
|
+
import { cleanSubject } from "../notes/edit-overlap.js";
|
|
30
|
+
import { changedFiles, ownPath } from "../notes/git-facts.js";
|
|
31
|
+
import { repoName, repoPlace } from "../notes/home.js";
|
|
32
|
+
import { listNotes, sectionLead } from "../notes/notes.js";
|
|
33
|
+
import { DEFAULT_TRAIL_URL, isError, trailUrl } from "./workspace.js";
|
|
34
|
+
/* -------------------------------------------------------------------------- */
|
|
35
|
+
/* the code */
|
|
36
|
+
/* -------------------------------------------------------------------------- */
|
|
37
|
+
/**
|
|
38
|
+
* The code as the page shows it, `TRL-7F2A-K9QD`, from however it was pasted:
|
|
39
|
+
* any case, with or without the prefix and dashes. Null when it can't be one.
|
|
40
|
+
*/
|
|
41
|
+
export function normalizeCode(raw) {
|
|
42
|
+
const s = raw.trim().toUpperCase().replace(/[\s_]+/g, "-");
|
|
43
|
+
const bare = s.replace(/^TRL-?/, "").replace(/-/g, "");
|
|
44
|
+
if (!/^[A-Z0-9]{8}$/.test(bare))
|
|
45
|
+
return null;
|
|
46
|
+
return `TRL-${bare.slice(0, 4)}-${bare.slice(4)}`;
|
|
47
|
+
}
|
|
48
|
+
export function repoRef(repo) {
|
|
49
|
+
const place = repoPlace(repo);
|
|
50
|
+
if (place.key.startsWith("local/"))
|
|
51
|
+
return { name: repoName(place.key, place.checkout) };
|
|
52
|
+
// The name as the remote spells it (`go-retryablehttp`, `Graft`); the key is lower-cased.
|
|
53
|
+
const origin = git(place.checkout, ["remote", "get-url", "origin"], 5000)?.trim() ?? "";
|
|
54
|
+
const last = origin.replace(/\.git\/?$/i, "").split(/[/:]/).pop() ?? "";
|
|
55
|
+
const name = /^[A-Za-z0-9._-]+$/.test(last) ? last : place.key.split("/").pop();
|
|
56
|
+
return { name, remote_url: `https://${place.key}` };
|
|
57
|
+
}
|
|
58
|
+
/** What the page shows for the terminal: `Rushabh's MacBook Pro` on a Mac, else the host name. */
|
|
59
|
+
export function machineName() {
|
|
60
|
+
if (process.platform === "darwin") {
|
|
61
|
+
try {
|
|
62
|
+
const name = execFileSync("scutil", ["--get", "ComputerName"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 2000 }).trim();
|
|
63
|
+
if (name)
|
|
64
|
+
return name.slice(0, 80);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
/* the host name below */
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
return hostname().replace(/\.(local|lan|home)$/i, "").slice(0, 80);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return "";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function post(url, body, opts) {
|
|
78
|
+
const f = opts.fetchImpl ?? fetch;
|
|
79
|
+
try {
|
|
80
|
+
const headers = { "content-type": "application/json", accept: "application/json" };
|
|
81
|
+
if (opts.token)
|
|
82
|
+
headers.authorization = `Bearer ${opts.token}`;
|
|
83
|
+
const res = await f(url, { method: "POST", headers, body: JSON.stringify(body), signal: AbortSignal.timeout(opts.timeoutMs ?? 10_000) });
|
|
84
|
+
const text = await res.text();
|
|
85
|
+
let json = null;
|
|
86
|
+
try {
|
|
87
|
+
json = text ? JSON.parse(text) : null;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* not JSON */
|
|
91
|
+
}
|
|
92
|
+
if (!res.ok) {
|
|
93
|
+
const msg = json?.error;
|
|
94
|
+
return { error: typeof msg === "string" ? msg : `Trail answered ${res.status}`, status: res.status };
|
|
95
|
+
}
|
|
96
|
+
return { status: res.status, body: json };
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const timedOut = err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError");
|
|
100
|
+
return { error: timedOut ? "Trail didn't answer in time" : "couldn't reach Trail" };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Claim the one-time code: `POST /api/public/cli/connect`. Gives back the
|
|
105
|
+
* connection to save, with no repos picked: the full learnings sync stays off
|
|
106
|
+
* for a machine connected this way, so only the summary below goes up.
|
|
107
|
+
*/
|
|
108
|
+
export async function claimConnectCode(base, code, req, opts = {}) {
|
|
109
|
+
const r = await post(`${base}/api/public/cli/connect`, { code, machine: req.machine, repo: req.repo }, { fetchImpl: opts.fetchImpl, timeoutMs: 15_000 });
|
|
110
|
+
if (isError(r)) {
|
|
111
|
+
if (r.status === undefined)
|
|
112
|
+
return { error: r.error, reason: "offline" };
|
|
113
|
+
if (r.status >= 500)
|
|
114
|
+
return { error: `Trail answered ${r.status}`, reason: "offline" };
|
|
115
|
+
if (r.status === 403)
|
|
116
|
+
return { error: "the account that made this code is no longer in that workspace", reason: "invalid" };
|
|
117
|
+
if (r.status === 429)
|
|
118
|
+
return { error: "too many tries just now; wait a minute and run it again", reason: "invalid" };
|
|
119
|
+
return { error: "that code was already used, has expired, or isn't right", reason: "invalid" };
|
|
120
|
+
}
|
|
121
|
+
const b = r.body;
|
|
122
|
+
const ws = b?.workspace;
|
|
123
|
+
if (!b?.token || !ws?.name)
|
|
124
|
+
return { error: "Trail sent an answer with no workspace in it", reason: "offline" };
|
|
125
|
+
const id = ws.id ?? ws.slug ?? ws.name;
|
|
126
|
+
return {
|
|
127
|
+
cloud: {
|
|
128
|
+
url: base,
|
|
129
|
+
token: b.token,
|
|
130
|
+
user: { name: b.user?.name ?? "", email: b.user?.email ?? "" },
|
|
131
|
+
workspace: {
|
|
132
|
+
id,
|
|
133
|
+
name: ws.name,
|
|
134
|
+
// readCloud needs a slug to count the connection; the connect answer may not carry one.
|
|
135
|
+
slug: ws.slug || id,
|
|
136
|
+
url: ws.url || `${base}/`,
|
|
137
|
+
invite_url: ws.invite_url || `${base}/`,
|
|
138
|
+
},
|
|
139
|
+
repos: [],
|
|
140
|
+
linkedAt: opts.now ?? Date.now(),
|
|
141
|
+
via: "connect",
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The command that connects later: `trail init --connect TRL-… --server <url>`,
|
|
147
|
+
* naming the Trail it was run against unless that's Trail cloud, so it
|
|
148
|
+
* reaches the same backend the code came from.
|
|
149
|
+
*/
|
|
150
|
+
export function connectAgain(command, code, base) {
|
|
151
|
+
return `${command} --connect ${code}${base.replace(/\/+$/, "") === DEFAULT_TRAIL_URL ? "" : ` --server ${base}`}`;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* What to say, once, when Trail didn't take the code because it couldn't be
|
|
155
|
+
* reached: which Trail, what happened, and the exact command to connect later.
|
|
156
|
+
* `· couldn't reach Trail at http://localhost:5173 · set this repo up anyway ·
|
|
157
|
+
* to connect it later: trail init --connect TRL-7F2A-K9QD --server http://localhost:5173`
|
|
158
|
+
*/
|
|
159
|
+
export function offlineLine(error, base, code, command) {
|
|
160
|
+
const what = error.startsWith("Trail ") ? `Trail at ${base}${error.slice("Trail".length)}` : `couldn't reach Trail at ${base}`;
|
|
161
|
+
return `· ${what} · set this repo up anyway · to connect it later: ${connectAgain(command, code, base)}`;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Sends the stages and the summary for one `init --connect`, in order. The
|
|
165
|
+
* first call that can't reach Trail turns the rest off, so a laptop offline
|
|
166
|
+
* waits on one timeout at most. Never throws.
|
|
167
|
+
*/
|
|
168
|
+
export class OnboardingReporter {
|
|
169
|
+
cloud;
|
|
170
|
+
repo;
|
|
171
|
+
opts;
|
|
172
|
+
offline = false;
|
|
173
|
+
chain = Promise.resolve();
|
|
174
|
+
sent = [];
|
|
175
|
+
constructor(cloud, repo, opts = {}) {
|
|
176
|
+
this.cloud = cloud;
|
|
177
|
+
this.repo = repo;
|
|
178
|
+
this.opts = opts;
|
|
179
|
+
}
|
|
180
|
+
send(path, body) {
|
|
181
|
+
const next = this.chain.then(async () => {
|
|
182
|
+
if (this.offline)
|
|
183
|
+
return false;
|
|
184
|
+
const r = await post(`${this.cloud.url}${path}`, body, { token: this.cloud.token, fetchImpl: this.opts.fetchImpl, timeoutMs: this.opts.timeoutMs ?? 5_000 });
|
|
185
|
+
const ok = !isError(r);
|
|
186
|
+
// No answer at all: offline, or Trail is down. An HTTP error is this call's alone.
|
|
187
|
+
if (isError(r) && r.status === undefined)
|
|
188
|
+
this.offline = true;
|
|
189
|
+
this.sent.push({ path, body, ok });
|
|
190
|
+
return ok;
|
|
191
|
+
});
|
|
192
|
+
this.chain = next.catch(() => false);
|
|
193
|
+
return next.catch(() => false);
|
|
194
|
+
}
|
|
195
|
+
/** One stage, for the page to tick off. */
|
|
196
|
+
stage(stage, data = {}) {
|
|
197
|
+
return this.send("/api/cli/onboarding/events", { repo: this.repo, stage, machine: this.opts.machine, data });
|
|
198
|
+
}
|
|
199
|
+
summary(s) {
|
|
200
|
+
return this.send("/api/cli/repos/summary", { repo: this.repo, ...s });
|
|
201
|
+
}
|
|
202
|
+
/** Wait for everything sent so far. */
|
|
203
|
+
async flush() {
|
|
204
|
+
await this.chain;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/* tokens ------------------------------------------------------------------- */
|
|
208
|
+
/** The numbers in `ask`'s `[trail] tokens saved ≈ N (P%) — this pack ≈ … tok vs reading the F source file(s) whole ≈ B tok` line. */
|
|
209
|
+
export function parseAskSavings(text) {
|
|
210
|
+
const m = text.match(/\[(?:graft|trail)\] tokens saved ≈ ([\d,]+) \((\d+)%\) — this pack ≈ ([\d,]+) tok vs reading the (\d+) source file\(s\) whole ≈ ([\d,]+) tok/);
|
|
211
|
+
if (!m)
|
|
212
|
+
return null;
|
|
213
|
+
const n = (s) => Number(s.replace(/,/g, ""));
|
|
214
|
+
return { saved: n(m[1]), pct: n(m[2]), pack: n(m[3]), files: n(m[4]), baseline: n(m[5]) };
|
|
215
|
+
}
|
|
216
|
+
/** Folders that hold tests, fixtures, vendored or generated code, anywhere in a path. */
|
|
217
|
+
const NOT_PRODUCT_DIR = /(^|\/)(test|tests|__tests__|testdata|test-fixtures|fixtures|__fixtures__|__mocks__|vendor|third_party|node_modules|generated|__generated__|gen)\//i;
|
|
218
|
+
/** File names of tests and generated code: `client_test.go`, `a.test.ts`, `a.spec.js`, `test_client.py`, `api.pb.go`, `schema.generated.ts`. */
|
|
219
|
+
const NOT_PRODUCT_FILE = /(_test\.[^/]+|\.(test|spec)\.[^/]+|_spec\.[^/]+|(^|\/)test_[^/]+\.py|(^|\/)conftest\.py|\.(generated|gen)\.[^/]+|\.pb\.go|_pb2(_grpc)?\.py|\.d\.ts)$/i;
|
|
220
|
+
/** Whether a repo path is test, fixture, vendored or generated code, which a lookup shouldn't be measured on. */
|
|
221
|
+
export function notProductCode(path) {
|
|
222
|
+
const p = path.split("\\").join("/");
|
|
223
|
+
return NOT_PRODUCT_DIR.test(p) || NOT_PRODUCT_FILE.test(p);
|
|
224
|
+
}
|
|
225
|
+
/** Docs and config: prose, data and settings files, and the folders that hold them. */
|
|
226
|
+
const DOC_OR_CONFIG_FILE = new RegExp([
|
|
227
|
+
"\\.(md|mdx|markdown|rst|adoc|txt|json|jsonc|ya?ml|toml|ini|cfg|conf|env|lock|xml|csv|svg|png|jpe?g|gif|ico)$",
|
|
228
|
+
"(^|/)(readme|changelog|changes|history|license|licence|notice|authors|contributors|codeowners|security)$",
|
|
229
|
+
"(^|/)(makefile|dockerfile|procfile|go\\.mod|go\\.sum)$",
|
|
230
|
+
// Dotfiles: .gitignore, .eslintrc.js, .env.local.
|
|
231
|
+
"(^|/)\\.[^/]+$",
|
|
232
|
+
].join("|"), "i");
|
|
233
|
+
const DOC_OR_CONFIG_DIR = /(^|\/)(docs?|\.github|\.circleci|\.vscode|\.idea)\//i;
|
|
234
|
+
/** Whether a repo path is docs or config rather than code. */
|
|
235
|
+
export function docOrConfig(path) {
|
|
236
|
+
const p = path.split("\\").join("/");
|
|
237
|
+
return DOC_OR_CONFIG_DIR.test(p) || DOC_OR_CONFIG_FILE.test(p);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* A teammate's files with the one worth naming first: product code (by the
|
|
241
|
+
* same rules as the tokens lookup), then other code (tests, fixtures,
|
|
242
|
+
* vendored, generated), then docs and config. Every file stays; only the
|
|
243
|
+
* order changes, and within each kind it's git's. The page says a teammate
|
|
244
|
+
* "is changing" the first one, which shouldn't be CHANGELOG.md when they
|
|
245
|
+
* also change client.go.
|
|
246
|
+
*/
|
|
247
|
+
export function headlineOrder(files) {
|
|
248
|
+
const rank = (f) => (docOrConfig(f) ? 2 : notProductCode(f) ? 1 : 0);
|
|
249
|
+
return files.map((f, i) => ({ f, i, r: rank(f) })).sort((a, b) => a.r - b.r || a.i - b.i).map((x) => x.f);
|
|
250
|
+
}
|
|
251
|
+
const COMMON_UTIL_NAMES = new Set(["cn", "utils", "index", "helpers", "main", "init", "config", "setup", "test"]);
|
|
252
|
+
/** Whether a symbol name is worth measuring a lookup on: at least 5 characters and not a common util name. */
|
|
253
|
+
export function meaningfulSymbol(name) {
|
|
254
|
+
return name.length >= 5 && !COMMON_UTIL_NAMES.has(name.toLowerCase());
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* One real lookup on the code map, as an agent would make it: a question
|
|
258
|
+
* about the repo's most central symbol (most incoming edges, with a name of
|
|
259
|
+
* 5+ characters that isn't a common util name) outside tests,
|
|
260
|
+
* fixtures, vendored and generated code, answered with
|
|
261
|
+
* the code inlined, and what that saved against reading the files it covers
|
|
262
|
+
* whole. The next most central is tried when a lookup saves nothing (tiny
|
|
263
|
+
* files). Null without a graph.
|
|
264
|
+
*/
|
|
265
|
+
export function tokensOnOneLookup(repo, opts = {}) {
|
|
266
|
+
try {
|
|
267
|
+
const graph = loadGraphCached(contextDirFor(repo, opts.contextDir));
|
|
268
|
+
if (!graph)
|
|
269
|
+
return null;
|
|
270
|
+
// The most central symbols of the product code: tests, fixtures, vendored
|
|
271
|
+
// and generated code only when there's nothing else.
|
|
272
|
+
// A name worth asking about: a short or generic one (`cn`, `utils`, `main`)
|
|
273
|
+
// says nothing about the repo, so the example would be meaningless.
|
|
274
|
+
// Falls back to every symbol when no name passes, so a repo of short names still gets a figure.
|
|
275
|
+
const spots = buildRepoMap(graph, { hotspots: 500 }).hotspots;
|
|
276
|
+
const named = spots.filter((h) => meaningfulSymbol(h.name));
|
|
277
|
+
const all = named.length ? named : spots;
|
|
278
|
+
const product = all.filter((h) => !notProductCode(h.path));
|
|
279
|
+
const hubs = (product.length ? product : all).slice(0, Math.max(1, opts.tries ?? 5));
|
|
280
|
+
for (const hub of hubs) {
|
|
281
|
+
const query = `how does ${hub.name} work`;
|
|
282
|
+
const r = ask(repo, query, { source: true, limit: 5, contextDir: opts.contextDir });
|
|
283
|
+
const got = parseAskSavings(formatAsk(r));
|
|
284
|
+
if (got && got.saved > 0)
|
|
285
|
+
return { question: `how ${hub.name} works`, symbol: hub.name, ...got };
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/* learnings ---------------------------------------------------------------- */
|
|
294
|
+
/** How many sessions a learning read from past sessions was said in, from the line init writes under it. */
|
|
295
|
+
export function sessionsIn(body) {
|
|
296
|
+
const m = body.match(/Told to Claude in (\d+) past sessions/);
|
|
297
|
+
return m ? Number(m[1]) : 0;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* One line of a learning, for a card: the first point under `## Decided` (or
|
|
301
|
+
* the first line of prose), no code blocks, headings or provenance line, at
|
|
302
|
+
* most 200 characters.
|
|
303
|
+
*/
|
|
304
|
+
export function shortBody(body) {
|
|
305
|
+
const prose = body
|
|
306
|
+
.replace(/```[\s\S]*?(```|$)/g, " ")
|
|
307
|
+
.split(/\r?\n/)
|
|
308
|
+
.filter((l) => !/^_(Told to Claude|Flagged in review) /.test(l.trim()));
|
|
309
|
+
const text = prose.join("\n");
|
|
310
|
+
const lead = sectionLead(text, "Decided") ??
|
|
311
|
+
sectionLead(text, "Watch out") ??
|
|
312
|
+
prose.map((l) => l.trim()).find((l) => l && !l.startsWith("#")) ??
|
|
313
|
+
"";
|
|
314
|
+
const one = lead.replace(/^[-*]\s+/, "").replace(/\s+/g, " ").trim();
|
|
315
|
+
return one.length > 200 ? `${one.slice(0, 199)}…` : one;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* The team's learnings in this repo, for the summary: what init just learned
|
|
319
|
+
* when it learned something (with the sessions each was said in), else what
|
|
320
|
+
* `.trail/learnings/` already has. Never a personal one: those stay on this
|
|
321
|
+
* machine.
|
|
322
|
+
*/
|
|
323
|
+
export function learningsSummary(repo, learned, max = 10) {
|
|
324
|
+
try {
|
|
325
|
+
const notes = learned?.length
|
|
326
|
+
? learned.filter((l) => l.note.scope !== "personal")
|
|
327
|
+
: listNotes(repo, { branches: false })
|
|
328
|
+
.filter((n) => n.scope === "repo" && !n.ref)
|
|
329
|
+
.map((note) => ({ note }));
|
|
330
|
+
return notes.slice(0, max).map(({ note, sessions }) => ({
|
|
331
|
+
title: note.title.slice(0, 200),
|
|
332
|
+
body: shortBody(note.body),
|
|
333
|
+
sessions: sessions ?? sessionsIn(note.body),
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return [];
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/* teammates ---------------------------------------------------------------- */
|
|
341
|
+
function git(repo, args, timeout = 15_000) {
|
|
342
|
+
try {
|
|
343
|
+
return execFileSync("git", args, {
|
|
344
|
+
cwd: repo,
|
|
345
|
+
encoding: "utf8",
|
|
346
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
347
|
+
timeout,
|
|
348
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
349
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const BOT = /\[bot\]|^(dependabot|github-actions|renovate)\b/i;
|
|
357
|
+
/** Branches that are where work lands, not work in flight: nobody is "on" them. */
|
|
358
|
+
const INTEGRATION_BRANCH = /^(main|master|dev|develop|staging|production|release\/.+)$/;
|
|
359
|
+
/**
|
|
360
|
+
* Whether a remote branch is open work by someone: not the remote's default
|
|
361
|
+
* branch (`base`), not a shared integration branch, and not fully merged
|
|
362
|
+
* already (its tip is an ancestor of `base`).
|
|
363
|
+
*/
|
|
364
|
+
export function openBranch(repo, base, ref) {
|
|
365
|
+
const name = ref.replace(/^origin\//, "");
|
|
366
|
+
if (ref === base || name === base.replace(/^origin\//, "") || INTEGRATION_BRANCH.test(name))
|
|
367
|
+
return false;
|
|
368
|
+
// `merge-base --is-ancestor` exits 0 when merged, 1 when not; git() returns null on a nonzero exit.
|
|
369
|
+
return git(repo, ["merge-base", "--is-ancestor", ref, base]) === null;
|
|
370
|
+
}
|
|
371
|
+
/** Files `email` changed in the last `days` days on any branch, plus what's uncommitted here. */
|
|
372
|
+
export function myRecentFiles(repo, email, days = 30) {
|
|
373
|
+
const out = new Set(changedFiles(repo, undefined, 200));
|
|
374
|
+
if (email) {
|
|
375
|
+
const pattern = `<${email.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}>`;
|
|
376
|
+
const log = git(repo, ["log", "--all", "--no-merges", `--since=${days}.days`, `--author=${pattern}`, "--name-only", "--format="]);
|
|
377
|
+
for (const f of (log ?? "").split("\n"))
|
|
378
|
+
if (f.trim() && !ownPath(f.trim()))
|
|
379
|
+
out.add(f.trim());
|
|
380
|
+
}
|
|
381
|
+
return [...out].slice(0, 500);
|
|
382
|
+
}
|
|
383
|
+
/** The repo's busiest files lately: the stand-in for "files you work on" when you have no history here. */
|
|
384
|
+
export function hottestFiles(repo, n = 30) {
|
|
385
|
+
const count = new Map();
|
|
386
|
+
const log = git(repo, ["log", "--no-merges", "--since=90.days", "-n", "2000", "--name-only", "--format="]) || git(repo, ["log", "--no-merges", "-n", "300", "--name-only", "--format="]);
|
|
387
|
+
for (const raw of (log ?? "").split("\n")) {
|
|
388
|
+
const f = raw.trim();
|
|
389
|
+
if (f && !ownPath(f))
|
|
390
|
+
count.set(f, (count.get(f) ?? 0) + 1);
|
|
391
|
+
}
|
|
392
|
+
return [...count].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, n).map(([f]) => f);
|
|
393
|
+
}
|
|
394
|
+
/** One line of what a branch does, from its commit subjects, newest first. */
|
|
395
|
+
function changeLine(repo, base, ref) {
|
|
396
|
+
const subjects = (git(repo, ["log", "--no-merges", "--format=%s", "-n", "5", `${base}..${ref}`]) ?? "")
|
|
397
|
+
.split("\n")
|
|
398
|
+
.map((s) => cleanSubject(s))
|
|
399
|
+
.filter(Boolean);
|
|
400
|
+
const line = [...new Set(subjects)].slice(0, 3).join("; ");
|
|
401
|
+
return line.length > 160 ? `${line.slice(0, 159)}…` : line;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* `git fetch` in the foreground, at the end of init, without ever stopping to
|
|
405
|
+
* ask: no credential prompt, and no ssh passphrase prompt unless the person
|
|
406
|
+
* set up their own ssh command (then theirs is used as is).
|
|
407
|
+
*/
|
|
408
|
+
function fetchQuietly(repo) {
|
|
409
|
+
try {
|
|
410
|
+
const env = { ...process.env, GIT_TERMINAL_PROMPT: "0" };
|
|
411
|
+
if (!env.GIT_SSH_COMMAND && !git(repo, ["config", "core.sshCommand"])?.trim())
|
|
412
|
+
env.GIT_SSH_COMMAND = "ssh -o BatchMode=yes";
|
|
413
|
+
execFileSync("git", ["fetch", "--quiet", "--prune", "origin"], { cwd: repo, stdio: "ignore", timeout: 20_000, env });
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
/* offline, or no origin: the refs already here */
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* The names a learning is about, to look for in a teammate's change: the
|
|
421
|
+
* symbols its `touches` name (`client.go#Do`), and code-like words in its
|
|
422
|
+
* title and lead line (`defaultRetryMax`, `retry_max`, `Do()`). Plain words
|
|
423
|
+
* are left out: "retry" in a learning says nothing about a change.
|
|
424
|
+
*/
|
|
425
|
+
export function learningTerms(n) {
|
|
426
|
+
const terms = new Set();
|
|
427
|
+
for (const t of n.touches) {
|
|
428
|
+
const sym = t.split("#")[1];
|
|
429
|
+
if (sym)
|
|
430
|
+
terms.add(sym.split(".").pop());
|
|
431
|
+
}
|
|
432
|
+
const text = `${n.title} ${shortBody(n.body)}`;
|
|
433
|
+
// camelCase, PascalCase with an inner capital, snake_case, or a call: `Do()`.
|
|
434
|
+
for (const w of text.match(/\b[A-Za-z_][A-Za-z0-9_]*\b(\(\))?/g) ?? []) {
|
|
435
|
+
const word = w.replace(/\(\)$/, "");
|
|
436
|
+
if (w.endsWith("()") || /[a-z][A-Z]/.test(word) || /[A-Za-z]_[A-Za-z]/.test(word))
|
|
437
|
+
terms.add(word);
|
|
438
|
+
}
|
|
439
|
+
return [...terms].filter((t) => t.length >= 2);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* When a teammate's branch changes a name one of the team's learnings is
|
|
443
|
+
* about, in a file that learning touches: `Changes defaultRetryMax in
|
|
444
|
+
* client.go, which your learning "Keep defaultRetryMax at 4" is about.` Read
|
|
445
|
+
* from the branch's diff here; only this line goes up. Nothing when the
|
|
446
|
+
* learning names nothing code-like, or the change doesn't touch it.
|
|
447
|
+
*/
|
|
448
|
+
export function conflictLine(repo, base, ref, files, learnings) {
|
|
449
|
+
const changed = new Set(files);
|
|
450
|
+
for (const n of learnings) {
|
|
451
|
+
if (n.scope === "personal")
|
|
452
|
+
continue;
|
|
453
|
+
const terms = learningTerms(n);
|
|
454
|
+
if (terms.length === 0)
|
|
455
|
+
continue;
|
|
456
|
+
for (const file of n.touches.map((t) => t.split("#")[0]).filter((f) => changed.has(f))) {
|
|
457
|
+
const diff = git(repo, ["diff", "--unified=0", `${base}...${ref}`, "--", file]) ?? "";
|
|
458
|
+
const lines = diff.split("\n").filter((l) => /^[+-]/.test(l) && !/^(\+\+\+|---) /.test(l));
|
|
459
|
+
const hit = terms.find((t) => lines.some((l) => new RegExp(`\\b${t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`).test(l)));
|
|
460
|
+
if (hit) {
|
|
461
|
+
const line = `Changes ${hit} in ${file}, which your learning "${n.title.replace(/"/g, "'")}" is about.`;
|
|
462
|
+
return line.length > 300 ? `${line.slice(0, 299)}…` : line;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return undefined;
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Teammates' work in the same place: remote branches whose newest commit is
|
|
470
|
+
* from the last `days` days and from someone other than this person, that
|
|
471
|
+
* change files this person changed lately (or the repo's busiest files, when
|
|
472
|
+
* they have no history here). Newest first. Fetches first unless
|
|
473
|
+
* `fetch: false` (or TRAIL_NO_FETCH). Names, emails, branch and file names and
|
|
474
|
+
* commit subjects only: never a diff.
|
|
475
|
+
*/
|
|
476
|
+
export function teammatesFromGit(repo, opts = {}) {
|
|
477
|
+
return teammatesChecked(repo, opts) ?? [];
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Like {@link teammatesFromGit}, but `undefined` when there was nothing to check
|
|
481
|
+
* against: no origin remote, no default branch to compare with, or git failed.
|
|
482
|
+
* An empty list means "checked, none"; a repo without a remote wasn't checked.
|
|
483
|
+
*/
|
|
484
|
+
export function teammatesChecked(repo, opts = {}) {
|
|
485
|
+
try {
|
|
486
|
+
const now = opts.now ?? Date.now();
|
|
487
|
+
const days = opts.days ?? 14;
|
|
488
|
+
const me = (git(repo, ["config", "user.email"]) ?? "").trim().toLowerCase();
|
|
489
|
+
const myName = (git(repo, ["config", "user.name"]) ?? "").trim().toLowerCase();
|
|
490
|
+
if (opts.fetch !== false && !process.env.TRAIL_NO_FETCH)
|
|
491
|
+
fetchQuietly(repo);
|
|
492
|
+
const cache = refreshBranches(repo, { fetch: false, now });
|
|
493
|
+
if (!cache.base)
|
|
494
|
+
return undefined;
|
|
495
|
+
const mine = new Set(myRecentFiles(repo, me));
|
|
496
|
+
const where = mine.size ? mine : new Set(hottestFiles(repo));
|
|
497
|
+
const out = [];
|
|
498
|
+
for (const b of cache.branches) {
|
|
499
|
+
if (now - b.at > days * 24 * 60 * 60 * 1000)
|
|
500
|
+
continue;
|
|
501
|
+
if (!openBranch(repo, cache.base, b.ref))
|
|
502
|
+
continue;
|
|
503
|
+
const [name = "", email = ""] = (git(repo, ["log", "-1", "--format=%aN%x09%aE", b.ref]) ?? "").trim().split("\t");
|
|
504
|
+
if (!name || BOT.test(name))
|
|
505
|
+
continue;
|
|
506
|
+
if ((me && email.toLowerCase() === me) || (myName && name.toLowerCase() === myName))
|
|
507
|
+
continue;
|
|
508
|
+
const files = headlineOrder(b.files.filter((f) => !ownPath(f) && where.has(f)));
|
|
509
|
+
if (files.length === 0)
|
|
510
|
+
continue;
|
|
511
|
+
const commits = Number((git(repo, ["rev-list", "--count", `${cache.base}..${b.ref}`]) ?? "").trim());
|
|
512
|
+
const conflict = conflictLine(repo, cache.base, b.ref, files, opts.learnings ?? []);
|
|
513
|
+
out.push({
|
|
514
|
+
name: name.slice(0, 80),
|
|
515
|
+
email: email.slice(0, 120),
|
|
516
|
+
branch: safeRef(b.ref.replace(/^origin\//, "")),
|
|
517
|
+
files: files.slice(0, 20),
|
|
518
|
+
change: changeLine(repo, cache.base, b.ref),
|
|
519
|
+
pushed_at: new Date(b.at).toISOString(),
|
|
520
|
+
...(Number.isFinite(commits) && commits > 0 ? { commits } : {}),
|
|
521
|
+
...(conflict ? { conflict } : {}),
|
|
522
|
+
});
|
|
523
|
+
if (out.length >= (opts.max ?? 10))
|
|
524
|
+
break;
|
|
525
|
+
}
|
|
526
|
+
return out.sort((a, b) => b.pushed_at.localeCompare(a.pushed_at));
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
return undefined;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
/** The Trail a code is claimed against: `--server`, TRAIL_URL, or Trail cloud. */
|
|
533
|
+
export function connectBase(env = process.env) {
|
|
534
|
+
return trailUrl(env);
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/cloud/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { SavedSkill } from "../skills/found-skill.js";
|
|
2
|
+
import type { TeammateSummary, TokensSummary } from "./onboarding.js";
|
|
3
|
+
/** A pair code as the onboarding page prints it: letters and digits. */
|
|
4
|
+
export declare function validPairCode(code: string): boolean;
|
|
5
|
+
export type PhaseId = "install" | "files" | "tokens" | "prs" | "decisions" | "team" | "learnings";
|
|
6
|
+
type PhaseStatus = "todo" | "running" | "done";
|
|
7
|
+
/**
|
|
8
|
+
* What init found out beyond the learnings, for the onboarding page: one
|
|
9
|
+
* lookup's token saving, the sessions read, and teammates' branches on this
|
|
10
|
+
* person's files. An empty `teammates` list means "checked, none".
|
|
11
|
+
*/
|
|
12
|
+
export interface PairFindings {
|
|
13
|
+
tokens?: TokensSummary | null;
|
|
14
|
+
sessions?: number;
|
|
15
|
+
teammates?: TeammateSummary[];
|
|
16
|
+
}
|
|
17
|
+
/** "Found 3 learnings and 1 skill for your team"; the skills part is left out when there are none. */
|
|
18
|
+
export declare function foundLine(learnings: number, skills: number): string;
|
|
19
|
+
/**
|
|
20
|
+
* One init run, reported to the onboarding page. Every call is best effort:
|
|
21
|
+
* a slow or unreachable Trail never holds up or fails init.
|
|
22
|
+
*/
|
|
23
|
+
export declare class PairRun {
|
|
24
|
+
readonly state: string;
|
|
25
|
+
readonly url: string;
|
|
26
|
+
private readonly base;
|
|
27
|
+
private phases;
|
|
28
|
+
private chain;
|
|
29
|
+
private readonly fetchImpl?;
|
|
30
|
+
private constructor();
|
|
31
|
+
/**
|
|
32
|
+
* Tell Trail about this run, with the pair code, and return it; null when
|
|
33
|
+
* Trail can't be reached or turns the code down (init carries on without it).
|
|
34
|
+
*/
|
|
35
|
+
static start(repo: string, code: string, opts: {
|
|
36
|
+
agent: string;
|
|
37
|
+
version: string;
|
|
38
|
+
fetchImpl?: typeof fetch;
|
|
39
|
+
}): Promise<PairRun | {
|
|
40
|
+
error: string;
|
|
41
|
+
}>;
|
|
42
|
+
/** Move a step on: running, or done with what it counted. */
|
|
43
|
+
phase(id: PhaseId, status: PhaseStatus, count?: string, log?: string): void;
|
|
44
|
+
/** The token step's end: the saving is an estimate (the pack against reading the files whole), and the page says so. */
|
|
45
|
+
tokensDone(tokens: TokensSummary | null): void;
|
|
46
|
+
/** The team step's end: `undefined` teammates means nothing was checked (no origin remote), not "none". */
|
|
47
|
+
teamDone(teammates: TeammateSummary[] | undefined): void;
|
|
48
|
+
/** Send what init found beyond the learnings; keys left undefined (or a null `tokens`) are left out. */
|
|
49
|
+
findings(f: PairFindings): void;
|
|
50
|
+
/**
|
|
51
|
+
* Hand over the repo's learnings and skills, then say the read is done. A
|
|
52
|
+
* learning is a `decision`; a skill is a `skill`. A skill kept for the
|
|
53
|
+
* person alone isn't the team's, so it stays off the page.
|
|
54
|
+
*/
|
|
55
|
+
finish(repo: string, skills?: SavedSkill[]): Promise<void>;
|
|
56
|
+
/** Wait for every report so far to be sent (or to fail). */
|
|
57
|
+
flush(): Promise<void>;
|
|
58
|
+
/** Start the detached wait for the connection and the review. */
|
|
59
|
+
handOff(repo: string): void;
|
|
60
|
+
private send;
|
|
61
|
+
}
|
|
62
|
+
export interface FinishOptions {
|
|
63
|
+
fetchImpl?: typeof fetch;
|
|
64
|
+
sleep?: (ms: number) => Promise<void>;
|
|
65
|
+
now?: () => number;
|
|
66
|
+
/** How long to wait for the person, all told. */
|
|
67
|
+
waitMs?: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* What `_trail-pair` runs: wait for the person to connect in the browser, save
|
|
71
|
+
* the connection, wait for their review, then upload this repo's learnings.
|
|
72
|
+
* Returns what happened, for tests.
|
|
73
|
+
*/
|
|
74
|
+
export declare function finishPair(state: string, repo: string, opts?: FinishOptions): Promise<"uploaded" | "expired" | "timed_out" | "failed">;
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=pair.d.ts.map
|