@herbertgao/pi-extensions 2026.9.20 → 2026.10.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 +18 -13
- package/THIRD_PARTY_NOTICES.md +31 -5
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/index.js +4 -0
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +43 -3
- package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +142 -59
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/README.es.md +87 -204
- package/node_modules/@dietrichgebert/ponytail/README.ja.md +212 -0
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +92 -226
- package/node_modules/@dietrichgebert/ponytail/README.md +58 -244
- package/node_modules/@dietrichgebert/ponytail/README.zh-CN.md +212 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +4 -4
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +63 -16
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +8 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-mode-tracker.js +46 -23
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +39 -7
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +20 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +3 -3
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -2
- package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +47 -17
- package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -7
- package/node_modules/@dietrichgebert/ponytail/skills/plugin.json +5 -0
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +7 -2
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +1 -1
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +16 -14
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +3 -3
- package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +12 -7
- package/node_modules/@herbertgao/pi-bark/README.md +39 -3
- package/node_modules/@herbertgao/pi-bark/package.json +1 -1
- package/node_modules/@herbertgao/pi-bark/src/index.ts +275 -15
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +50 -50
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +7 -7
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +25 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +24 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +7 -4
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/footer.ts +47 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/mcp-chip.ts +136 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +56 -11
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +36 -4
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +11 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +303 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-header.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-highlight.ts +36 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-presentation.ts +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-write-render.ts +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/index.ts +88 -34
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/line-width-safety.ts +6 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-execution.ts +1 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +31 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/message-display.ts +3 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/names.ts +3 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/result.ts +173 -36
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/ansi-text.ts +1 -0
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +6 -4
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
- package/node_modules/@herbertgao/pi-subagents/package.json +1 -1
- package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +3 -2
- package/node_modules/@herbertgao/sol-pi/CONTRIBUTING.md +22 -0
- package/node_modules/@herbertgao/sol-pi/README.md +36 -17
- package/node_modules/@herbertgao/sol-pi/THIRD_PARTY_NOTICES.md +10 -6
- package/node_modules/@herbertgao/sol-pi/agents-install.md +15 -12
- package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +24 -8
- package/node_modules/@herbertgao/sol-pi/docs/configuration.md +2 -2
- package/node_modules/@herbertgao/sol-pi/docs/star-history.md +18 -0
- package/node_modules/@herbertgao/sol-pi/package.json +4 -2
- package/node_modules/@herbertgao/sol-pi/scripts/check-sol-pi-config.mjs +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/config.ts +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/file-queue.ts +23 -4
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +32 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/then-run.ts +3 -2
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/observation-pack/observation.ts +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/economics.ts +27 -7
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/extension.ts +137 -41
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/index.ts +1 -0
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/plan.ts +2 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/projection.ts +58 -0
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +28 -6
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/tools.ts +2 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/runtime-paths.ts +15 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +4 -4
- package/node_modules/@pi-plugins/fast-mode/README.md +7 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +7 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/package.json +5 -5
- package/node_modules/pi-antigravity/README.md +3 -0
- package/node_modules/pi-antigravity/package.json +8 -8
- package/node_modules/pi-antigravity/src/auth/oauth.ts +6 -3
- package/node_modules/pi-antigravity/src/index.ts +114 -110
- package/node_modules/pi-antigravity/src/stream/stream.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +18 -1
- package/node_modules/pi-multi-account/CHANGELOG.md +20 -0
- package/node_modules/pi-multi-account/README.md +46 -8
- package/node_modules/pi-multi-account/config-file-transaction.ts +42 -0
- package/node_modules/pi-multi-account/index.ts +255 -269
- package/node_modules/pi-multi-account/model-pins.ts +36 -0
- package/node_modules/pi-multi-account/package.json +9 -7
- package/node_modules/pi-multi-account/slot-proxy-auth.ts +12 -2
- package/node_modules/pi-multi-account/slot-proxy.ts +27 -5
- package/node_modules/pi-typesafe/README.md +1 -1
- package/node_modules/pi-typesafe/dist/backends.d.ts +15 -5
- package/node_modules/pi-typesafe/dist/backends.js +18 -0
- package/node_modules/pi-typesafe/dist/client.d.ts +4 -3
- package/node_modules/pi-typesafe/dist/client.js +22 -7
- package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
- package/node_modules/pi-typesafe/dist/index.js +1 -1
- package/node_modules/pi-typesafe/dist/usage.d.ts +14 -4
- package/node_modules/pi-typesafe/dist/usage.js +147 -42
- package/node_modules/pi-typesafe/package.json +1 -1
- package/node_modules/pi-web-access/CHANGELOG.md +65 -0
- package/node_modules/pi-web-access/README.md +63 -14
- package/node_modules/pi-web-access/brave-rate-limit.ts +176 -0
- package/node_modules/pi-web-access/brave.ts +28 -11
- package/node_modules/pi-web-access/curator-page.ts +5 -1
- package/node_modules/pi-web-access/curator-server.ts +2 -0
- package/node_modules/pi-web-access/declared-web-links.ts +2 -2
- package/node_modules/pi-web-access/degoog.ts +323 -0
- package/node_modules/pi-web-access/dist/index.js +3647 -2740
- package/node_modules/pi-web-access/dist/mcp-cli.js +27443 -0
- package/node_modules/pi-web-access/exa.ts +5 -1
- package/node_modules/pi-web-access/extract.ts +41 -3
- package/node_modules/pi-web-access/firecrawl.ts +35 -4
- package/node_modules/pi-web-access/gemini-search.ts +36 -16
- package/node_modules/pi-web-access/gemini-web.ts +14 -9
- package/node_modules/pi-web-access/index.ts +164 -1207
- package/node_modules/pi-web-access/keenable.ts +221 -0
- package/node_modules/pi-web-access/mcp-cli.ts +40 -0
- package/node_modules/pi-web-access/mcp-server.ts +81 -0
- package/node_modules/pi-web-access/mcp-tool-definitions.ts +117 -0
- package/node_modules/pi-web-access/openai-search.ts +58 -11
- package/node_modules/pi-web-access/package.json +23 -5
- package/node_modules/pi-web-access/perplexity.ts +64 -56
- package/node_modules/pi-web-access/summary-review.ts +8 -2
- package/node_modules/pi-web-access/tool-arguments.ts +20 -0
- package/node_modules/pi-web-access/video-extract.ts +1 -1
- package/node_modules/pi-web-access/web-tool-contract.ts +86 -0
- package/node_modules/pi-web-access/web-tool-core.ts +1502 -0
- package/node_modules/pi-web-access/youtube-extract.ts +2 -5
- package/node_modules/{@herbertgao/resume-from → resume-from}/README.md +16 -12
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -5
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.js +2 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.d.ts +3 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.js +27 -15
- package/node_modules/{@herbertgao/resume-from/dist/adapters/codex → resume-from/dist/adapters/claude-code}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.js +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.js +1 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/read.d.ts +16 -0
- package/node_modules/resume-from/dist/adapters/codex/read.js +723 -0
- package/node_modules/{@herbertgao/resume-from/dist/adapters/pi → resume-from/dist/adapters/codex}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.d.ts +44 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.js +88 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.d.ts +5 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.js +10 -6
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from/dist/adapters/claude-code → resume-from/dist/adapters/pi}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.d.ts +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.js +4 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.js +31 -8
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.d.ts +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.js +1 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.d.ts +4 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.d.ts +8 -6
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.d.ts +10 -5
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/finder.d.ts +2 -1
- package/node_modules/resume-from/dist/import/discovery/finder.js +269 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.d.ts +3 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.js +3 -3
- package/node_modules/resume-from/dist/import/pipeline.d.ts +28 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/pipeline.js +31 -11
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.js +9 -5
- package/node_modules/resume-from/dist/import/preview/warnings.d.ts +14 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/warnings.js +26 -20
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.js +12 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.d.ts +9 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.d.ts +4 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.js +7 -4
- package/node_modules/resume-from/dist/platform/repo/reader.d.ts +3 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/reader.js +60 -20
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.d.ts +8 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/package.json +19 -32
- package/node_modules/{@herbertgao/resume-from → resume-from}/shims/pi/extensions/resume-from.js +2 -2
- package/package.json +21 -21
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +0 -21
- package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +0 -62
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +0 -115
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +0 -27
- package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +0 -4
- package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
- package/node_modules/@herbertgao/resume-from/dist/adapters/codex/read.js +0 -270
- package/node_modules/@herbertgao/resume-from/dist/import/discovery/finder.js +0 -129
- package/node_modules/@herbertgao/resume-from/dist/import/pipeline.d.ts +0 -17
- package/node_modules/@herbertgao/resume-from/dist/import/preview/warnings.d.ts +0 -11
- package/node_modules/@herbertgao/resume-from/dist/platform/repo/reader.d.ts +0 -8
- /package/node_modules/{@herbertgao/resume-from → resume-from}/LICENSE +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.js +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// The Internal Design, as code: this module builds its four stages and nothing else builds
|
|
2
2
|
// them. Everything the stages need arrives from src/host/ — this module constructs no adapter,
|
|
3
3
|
// no committer, no estimator and no configuration.
|
|
4
|
+
import { realpath } from "node:fs/promises";
|
|
5
|
+
import { isAbsolute } from "node:path";
|
|
4
6
|
import { createSessionFinder } from "./discovery/index.js";
|
|
5
7
|
import { createSessionLander } from "./landing/index.js";
|
|
6
8
|
import { createPipelineFromStages } from "./pipeline.js";
|
|
@@ -9,10 +11,18 @@ import { createTransferRules } from "./transfer/index.js";
|
|
|
9
11
|
/** The four stages, wired. Internal: a host builds a pipeline, never a stage. */
|
|
10
12
|
export function buildStages(deps) {
|
|
11
13
|
return {
|
|
12
|
-
|
|
14
|
+
checkCancellation: () => deps.repo.checkCancellation(),
|
|
15
|
+
finder: createSessionFinder({ adapters: deps.adapters, config: deps.config, repo: deps.repo }),
|
|
13
16
|
rules: createTransferRules(),
|
|
14
17
|
// Per request: the preview reads the repository the request names (FR-13, FR-37).
|
|
15
|
-
|
|
18
|
+
async destinationFor(cwd) {
|
|
19
|
+
if (!isAbsolute(cwd))
|
|
20
|
+
throw new Error("The destination cwd must be absolute.");
|
|
21
|
+
const canonicalCwd = await realpath(cwd);
|
|
22
|
+
const identity = await deps.repo.identify(canonicalCwd);
|
|
23
|
+
return { cwd, canonicalCwd, identity };
|
|
24
|
+
},
|
|
25
|
+
previewFor: ({ cwd, canonicalCwd, identity }, descriptor) => createPreviewBuilder(deps.repo, cwd, canonicalCwd, identity, descriptor.repoPaths),
|
|
16
26
|
lander: createSessionLander(deps.handoverCommand === undefined ? {} : { handoverCommand: deps.handoverCommand }),
|
|
17
27
|
adapters: deps.adapters,
|
|
18
28
|
config: deps.config,
|
package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.d.ts
RENAMED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** The repository the command runs in (FR-13). */
|
|
2
2
|
export interface RepoIdentity {
|
|
3
|
-
/**
|
|
3
|
+
/** Canonical checkout root, or null when unresolved or bare (not an import destination). */
|
|
4
4
|
root: string | null;
|
|
5
|
-
/**
|
|
5
|
+
/** Canonical Git common directory shared by linked worktrees, or null when unresolved. */
|
|
6
|
+
commonDir: string | null;
|
|
7
|
+
/** True only for a resolved bare repository; its linked working trees report false. */
|
|
8
|
+
isBare: boolean;
|
|
9
|
+
/** Current HEAD commit, or null when unresolved or the repository has no commit yet. */
|
|
6
10
|
head: string | null;
|
|
7
11
|
branch: string | null;
|
|
8
12
|
}
|
|
@@ -24,7 +28,9 @@ export interface RepoReaderOptions {
|
|
|
24
28
|
}
|
|
25
29
|
/** Reads git state. It never writes to the repository. */
|
|
26
30
|
export interface RepoReader {
|
|
31
|
+
/** Throws AbortError with the signal reason as cause when cancelled; performs no I/O. */
|
|
32
|
+
checkCancellation(): void;
|
|
27
33
|
identify(cwd: string): Promise<RepoIdentity>;
|
|
28
34
|
/** Compares HEAD with a commit of a source session (FR-37). */
|
|
29
|
-
distanceFrom(sourceCommit: string): Promise<CommitDistance>;
|
|
35
|
+
distanceFrom(cwd: string, sourceCommit: string): Promise<CommitDistance>;
|
|
30
36
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RepoReaderOptions } from "./contract.js";
|
|
2
2
|
export interface GitResult {
|
|
3
|
-
/** True when git exited 0. A
|
|
3
|
+
/** True when git exited 0. A completed nonzero exit leaves the requested fact unresolved. */
|
|
4
4
|
ok: boolean;
|
|
5
5
|
stdout: string;
|
|
6
6
|
stderr: string;
|
|
@@ -8,9 +8,9 @@ export interface GitResult {
|
|
|
8
8
|
/**
|
|
9
9
|
* Runs a read-only git command in `cwd`.
|
|
10
10
|
*
|
|
11
|
-
* Rejects
|
|
12
|
-
* reported in `ok
|
|
13
|
-
*
|
|
11
|
+
* Rejects operational failures, including spawn failures, timeout and cancellation. A completed
|
|
12
|
+
* nonzero exit is reported in `ok`: callers leave the requested fact unresolved without trying
|
|
13
|
+
* to classify localized stderr (which need not mean the directory is outside Git).
|
|
14
14
|
*/
|
|
15
15
|
export declare function runGit(cwd: string, args: readonly string[], options?: RepoReaderOptions): Promise<GitResult>;
|
|
16
16
|
interface NormalizedOptions {
|
|
@@ -8,9 +8,9 @@ const DEFAULT_GIT_TIMEOUT_MS = 10_000;
|
|
|
8
8
|
/**
|
|
9
9
|
* Runs a read-only git command in `cwd`.
|
|
10
10
|
*
|
|
11
|
-
* Rejects
|
|
12
|
-
* reported in `ok
|
|
13
|
-
*
|
|
11
|
+
* Rejects operational failures, including spawn failures, timeout and cancellation. A completed
|
|
12
|
+
* nonzero exit is reported in `ok`: callers leave the requested fact unresolved without trying
|
|
13
|
+
* to classify localized stderr (which need not mean the directory is outside Git).
|
|
14
14
|
*/
|
|
15
15
|
export function runGit(cwd, args, options = {}) {
|
|
16
16
|
const processOptions = normalizeGitOptions(options);
|
|
@@ -49,7 +49,9 @@ export function normalizeGitOptions(options) {
|
|
|
49
49
|
}
|
|
50
50
|
function processError(cwd, options, cause) {
|
|
51
51
|
if (options.signal?.aborted === true || cause.name === "AbortError") {
|
|
52
|
-
|
|
52
|
+
const error = new Error(`git command aborted while reading ${cwd}`, { cause });
|
|
53
|
+
error.name = "AbortError";
|
|
54
|
+
return error;
|
|
53
55
|
}
|
|
54
56
|
if (cause.killed === true && cause.signal !== undefined) {
|
|
55
57
|
return new Error(`git command timed out after ${options.timeoutMs} ms while reading ${cwd}`, {
|
|
@@ -68,6 +70,7 @@ function gitEnv() {
|
|
|
68
70
|
// These would override `-C` and point git at a repository other than the one being asked about,
|
|
69
71
|
// for example when the tool runs inside a git hook.
|
|
70
72
|
delete env.GIT_DIR;
|
|
73
|
+
delete env.GIT_COMMON_DIR;
|
|
71
74
|
delete env.GIT_WORK_TREE;
|
|
72
75
|
delete env.GIT_INDEX_FILE;
|
|
73
76
|
return env;
|
|
@@ -5,38 +5,76 @@ import { normalizeGitOptions, runGit } from "./git.js";
|
|
|
5
5
|
function unknownDistance() {
|
|
6
6
|
return { known: false, ahead: 0, behind: 0 };
|
|
7
7
|
}
|
|
8
|
-
function
|
|
9
|
-
return { root: null, head: null, branch: null };
|
|
8
|
+
function unresolvedIdentity() {
|
|
9
|
+
return { root: null, commonDir: null, isBare: false, head: null, branch: null };
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Longer than any revision git can resolve: a full commit is 40 characters, a tag or a ref
|
|
13
13
|
* expression a few more. A longer string is a mistake or an attack, and is not sent to git.
|
|
14
14
|
*/
|
|
15
15
|
const MAX_REVISION_LENGTH = 256;
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
* `identify` takes the directory to look at; `distanceFrom` compares against the HEAD of `cwd`,
|
|
20
|
-
* which is the repository the command is running in.
|
|
21
|
-
*/
|
|
22
|
-
export function createRepoReader(cwd = process.cwd(), options = {}) {
|
|
16
|
+
/** A reader with process controls only; every lookup names its directory explicitly. */
|
|
17
|
+
export function createRepoReader(options = {}) {
|
|
23
18
|
const processOptions = normalizeGitOptions(options);
|
|
24
19
|
const git = (directory, args) => runGit(directory, args, processOptions);
|
|
20
|
+
const checkCancellation = () => {
|
|
21
|
+
if (processOptions.signal?.aborted) {
|
|
22
|
+
const error = new Error("Repository read aborted", { cause: processOptions.signal.reason });
|
|
23
|
+
error.name = "AbortError";
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
25
27
|
return {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
checkCancellation,
|
|
29
|
+
identify: async (directory) => {
|
|
30
|
+
checkCancellation();
|
|
31
|
+
const identity = await identify(directory, git);
|
|
32
|
+
checkCancellation();
|
|
33
|
+
return identity;
|
|
34
|
+
},
|
|
35
|
+
distanceFrom: async (cwd, sourceCommit) => {
|
|
36
|
+
checkCancellation();
|
|
37
|
+
const distance = await distanceFrom(cwd, sourceCommit, git);
|
|
38
|
+
checkCancellation();
|
|
39
|
+
return distance;
|
|
40
|
+
},
|
|
28
41
|
};
|
|
29
42
|
}
|
|
43
|
+
/** Git terminates path records with LF; all preceding whitespace belongs to the path. */
|
|
44
|
+
function pathOutput(stdout) {
|
|
45
|
+
return stdout.endsWith("\n") ? stdout.slice(0, -1) : stdout;
|
|
46
|
+
}
|
|
30
47
|
async function identify(directory, git) {
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
return
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
48
|
+
// Resolve the input itself: a missing worktree must never inherit its parent's identity.
|
|
49
|
+
const dir = await resolveFully(resolve(directory));
|
|
50
|
+
if (dir === null)
|
|
51
|
+
return unresolvedIdentity();
|
|
52
|
+
const common = await git(dir, ["rev-parse", "--git-common-dir"]);
|
|
53
|
+
const commonPath = pathOutput(common.stdout);
|
|
54
|
+
if (!common.ok || commonPath === "")
|
|
55
|
+
return unresolvedIdentity();
|
|
56
|
+
const commonDir = await resolveFully(resolve(dir, commonPath));
|
|
57
|
+
if (commonDir === null)
|
|
58
|
+
return unresolvedIdentity();
|
|
59
|
+
const bare = await git(dir, ["rev-parse", "--is-bare-repository"]);
|
|
60
|
+
if (!bare.ok)
|
|
61
|
+
return unresolvedIdentity();
|
|
62
|
+
const isBare = bare.stdout.trim() === "true";
|
|
63
|
+
// Bare repositories have a shared identity but no checkout usable as an import destination.
|
|
64
|
+
let root = null;
|
|
65
|
+
if (!isBare) {
|
|
66
|
+
const toplevel = await git(dir, ["rev-parse", "--show-toplevel"]);
|
|
67
|
+
const checkoutPath = pathOutput(toplevel.stdout);
|
|
68
|
+
if (!toplevel.ok || checkoutPath === "")
|
|
69
|
+
return unresolvedIdentity();
|
|
70
|
+
root = await resolveFully(resolve(dir, checkoutPath));
|
|
71
|
+
if (root === null)
|
|
72
|
+
return unresolvedIdentity();
|
|
73
|
+
}
|
|
38
74
|
return {
|
|
39
75
|
root,
|
|
76
|
+
commonDir,
|
|
77
|
+
isBare,
|
|
40
78
|
head: await commitOf(dir, "HEAD", git),
|
|
41
79
|
branch: await branch(dir, git),
|
|
42
80
|
};
|
|
@@ -124,7 +162,9 @@ async function resolveFully(directory) {
|
|
|
124
162
|
try {
|
|
125
163
|
return await realpath(directory);
|
|
126
164
|
}
|
|
127
|
-
catch {
|
|
128
|
-
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error.code === "ENOENT")
|
|
167
|
+
return null;
|
|
168
|
+
throw error;
|
|
129
169
|
}
|
|
130
170
|
}
|
|
@@ -21,8 +21,15 @@ export interface SessionDescriptor {
|
|
|
21
21
|
updatedAt: string;
|
|
22
22
|
/** Turns the source holds, before any rule of section D or E runs. */
|
|
23
23
|
turnCount: number;
|
|
24
|
-
/**
|
|
24
|
+
/** First recorded candidate: repoPaths[0] ?? null, even when that path no longer exists (FR-13). */
|
|
25
25
|
repoPath: string | null;
|
|
26
|
+
/** Distinct absolute recorded directories, ordered by first appearance in the active conversation. */
|
|
27
|
+
repoPaths: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Absolute directory of the session’s earliest non-sidechain record, when the format records one.
|
|
30
|
+
* Discovery matches it as a last resort, so a session that started here is still listed here.
|
|
31
|
+
*/
|
|
32
|
+
startDirectory: string | null;
|
|
26
33
|
/** Absolute path of the source file. Lets the user select by path (FR-12). */
|
|
27
34
|
filePath: string;
|
|
28
35
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"version": "0.
|
|
2
|
+
"name": "resume-from",
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Continue a coding session in a different agent, or a different profile.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -10,11 +10,8 @@
|
|
|
10
10
|
"codex"
|
|
11
11
|
],
|
|
12
12
|
"type": "module",
|
|
13
|
+
"packageManager": "pnpm@11.20.0",
|
|
13
14
|
"license": "MIT",
|
|
14
|
-
"author": "Herbert Gao",
|
|
15
|
-
"contributors": [
|
|
16
|
-
"Alexei Led"
|
|
17
|
-
],
|
|
18
15
|
"engines": {
|
|
19
16
|
"node": ">=24"
|
|
20
17
|
},
|
|
@@ -34,36 +31,34 @@
|
|
|
34
31
|
},
|
|
35
32
|
"files": [
|
|
36
33
|
"dist",
|
|
37
|
-
"shims/pi"
|
|
38
|
-
"README.md",
|
|
39
|
-
"LICENSE"
|
|
34
|
+
"shims/pi"
|
|
40
35
|
],
|
|
41
36
|
"scripts": {
|
|
42
37
|
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json",
|
|
43
38
|
"typecheck": "tsc --noEmit",
|
|
44
39
|
"test": "vitest run",
|
|
45
40
|
"test:watch": "vitest",
|
|
46
|
-
"format": "biome format --write .",
|
|
47
|
-
"format:check": "biome format .",
|
|
48
41
|
"lint": "biome check . && eslint . --cache --cache-strategy content",
|
|
49
42
|
"lint:fix": "biome check --write .",
|
|
43
|
+
"packages:stage": "npm run build && node scripts/release/stage-npm-packages.mjs",
|
|
44
|
+
"packages:check": "npm run packages:stage && node scripts/release/check-npm-packages.mjs",
|
|
50
45
|
"pack:dry": "npm pack --dry-run",
|
|
51
|
-
"prepack": "npm run build"
|
|
52
|
-
"postpack": "node scripts/clean-dist.mjs"
|
|
46
|
+
"prepack": "npm run build"
|
|
53
47
|
},
|
|
54
48
|
"devDependencies": {
|
|
55
|
-
"@biomejs/biome": "2.5.
|
|
49
|
+
"@biomejs/biome": "2.5.14",
|
|
50
|
+
"@earendil-works/pi-tui": "^1.0.2",
|
|
56
51
|
"@eslint/js": "^10.0.1",
|
|
57
|
-
"@types/node": "^24.
|
|
58
|
-
"esbuild": "0.28.
|
|
59
|
-
"eslint": "^10.
|
|
60
|
-
"globals": "^17.
|
|
52
|
+
"@types/node": "^24.19.0",
|
|
53
|
+
"esbuild": "0.28.2",
|
|
54
|
+
"eslint": "^10.11.0",
|
|
55
|
+
"globals": "^17.12.0",
|
|
61
56
|
"typescript": "^7.0.2",
|
|
62
57
|
"typescript-compiler-api": "npm:typescript@6.0.3",
|
|
63
|
-
"vitest": "^
|
|
58
|
+
"vitest": "^5.0.3"
|
|
64
59
|
},
|
|
65
60
|
"dependencies": {
|
|
66
|
-
"gpt-tokenizer": "^
|
|
61
|
+
"gpt-tokenizer": "^4.0.0"
|
|
67
62
|
},
|
|
68
63
|
"peerDependencies": {
|
|
69
64
|
"@earendil-works/pi-tui": "*"
|
|
@@ -76,21 +71,13 @@
|
|
|
76
71
|
},
|
|
77
72
|
"repository": {
|
|
78
73
|
"type": "git",
|
|
79
|
-
"url": "git+https://github.com/
|
|
80
|
-
"directory": "packages/resume-from"
|
|
74
|
+
"url": "git+https://github.com/alexei-led/resume-from.git"
|
|
81
75
|
},
|
|
82
|
-
"homepage": "https://github.com/
|
|
76
|
+
"homepage": "https://github.com/alexei-led/resume-from#readme",
|
|
83
77
|
"bugs": {
|
|
84
|
-
"url": "https://github.com/
|
|
78
|
+
"url": "https://github.com/alexei-led/resume-from/issues"
|
|
85
79
|
},
|
|
86
80
|
"publishConfig": {
|
|
87
|
-
"access": "public"
|
|
88
|
-
"provenance": true
|
|
89
|
-
},
|
|
90
|
-
"x-upstream": {
|
|
91
|
-
"package": "resume-from",
|
|
92
|
-
"version": "0.2.0",
|
|
93
|
-
"repository": "https://github.com/alexei-led/resume-from",
|
|
94
|
-
"commit": "e1dad0dd4ae5fb6a5a50b905dd4359a29fd0910e"
|
|
81
|
+
"access": "public"
|
|
95
82
|
}
|
|
96
83
|
}
|
package/node_modules/{@herbertgao/resume-from → resume-from}/shims/pi/extensions/resume-from.js
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { isAbsolute, join, resolve } from "node:path";
|
|
3
3
|
import { truncateToWidth } from "@earendil-works/pi-tui";
|
|
4
|
-
import { activatePiExtension } from "
|
|
5
|
-
import { formatRow, safeLines, safeText } from "
|
|
4
|
+
import { activatePiExtension } from "resume-from";
|
|
5
|
+
import { formatRow, safeLines, safeText } from "resume-from/pi-extension";
|
|
6
6
|
|
|
7
7
|
const COMMAND_NAME = "resume-from";
|
|
8
8
|
const DESCRIPTION =
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herbertgao/pi-extensions",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.10.1",
|
|
4
4
|
"description": "Aggregate installer for HerbertGao-maintained Pi extensions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"extensions",
|
|
@@ -36,23 +36,22 @@
|
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@ast-grep/cli": "^0.45.0",
|
|
38
38
|
"@ast-grep/napi": "^0.45.0",
|
|
39
|
-
"@bufbuild/protobuf": "^2.
|
|
40
|
-
"@dietrichgebert/ponytail": "4.
|
|
41
|
-
"@herbertgao/pi-bark": "0.
|
|
42
|
-
"@herbertgao/pi-cc-extensions": "0.
|
|
43
|
-
"@herbertgao/pi-subagents": "0.18.
|
|
44
|
-
"@herbertgao/
|
|
45
|
-
"@
|
|
46
|
-
"@juicesharp/rpiv-
|
|
47
|
-
"@juicesharp/rpiv-config": "^2.11.0",
|
|
39
|
+
"@bufbuild/protobuf": "^2.15.0",
|
|
40
|
+
"@dietrichgebert/ponytail": "4.13.0",
|
|
41
|
+
"@herbertgao/pi-bark": "0.2.0",
|
|
42
|
+
"@herbertgao/pi-cc-extensions": "0.11.0",
|
|
43
|
+
"@herbertgao/pi-subagents": "0.18.5",
|
|
44
|
+
"@herbertgao/sol-pi": "0.4.0",
|
|
45
|
+
"@juicesharp/rpiv-ask-user-question": "2.12.0",
|
|
46
|
+
"@juicesharp/rpiv-config": "^2.12.0",
|
|
48
47
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
49
48
|
"@mozilla/readability": "^0.6.0",
|
|
50
49
|
"@napi-rs/keyring": "^2.1.0",
|
|
51
50
|
"@narumitw/pi-btw": "0.61.1",
|
|
52
|
-
"@narumitw/pi-caffeinate": "0.49.
|
|
51
|
+
"@narumitw/pi-caffeinate": "0.49.9",
|
|
53
52
|
"@narumitw/pi-tui-kit": "^0.64.0",
|
|
54
53
|
"@noble/ed25519": "^3.1.0",
|
|
55
|
-
"@pi-plugins/fast-mode": "0.1.
|
|
54
|
+
"@pi-plugins/fast-mode": "0.1.13",
|
|
56
55
|
"@shikijs/cli": "^4.0.2",
|
|
57
56
|
"@tifan/pi-copy-response": "0.2.7",
|
|
58
57
|
"@tifan/pi-handoff": "2.2.2",
|
|
@@ -63,9 +62,9 @@
|
|
|
63
62
|
"@tifan/pi-rename": "0.6.0",
|
|
64
63
|
"@typesafe-ai/sdk": "0.6.0",
|
|
65
64
|
"croner": "^10.0.1",
|
|
66
|
-
"dbus-native": "^0.
|
|
65
|
+
"dbus-native": "^0.16.0",
|
|
67
66
|
"defuddle": "0.19.3",
|
|
68
|
-
"gpt-tokenizer": "^
|
|
67
|
+
"gpt-tokenizer": "^4.0.0",
|
|
69
68
|
"grok-mermaid": "0.2.3",
|
|
70
69
|
"jiti": "^2.7.0",
|
|
71
70
|
"js-yaml": "^5.2.2",
|
|
@@ -73,18 +72,19 @@
|
|
|
73
72
|
"minimatch": "^10.2.6",
|
|
74
73
|
"nanoid": "^5.0.0",
|
|
75
74
|
"p-limit": "^6.1.0",
|
|
76
|
-
"pi-antigravity": "0.
|
|
75
|
+
"pi-antigravity": "0.9.0",
|
|
77
76
|
"pi-jev-auto-mode": "0.5.0",
|
|
78
77
|
"pi-lens": "4.3.0",
|
|
79
|
-
"pi-multi-account": "1.
|
|
78
|
+
"pi-multi-account": "1.24.0",
|
|
80
79
|
"pi-next-cue": "1.0.7",
|
|
81
|
-
"pi-typesafe": "0.
|
|
82
|
-
"pi-web-access": "0.
|
|
80
|
+
"pi-typesafe": "0.9.1",
|
|
81
|
+
"pi-web-access": "0.37.0",
|
|
83
82
|
"pidusage": "^4.0.1",
|
|
84
83
|
"promise.try": "^2.0.1",
|
|
85
84
|
"proper-lockfile": "4.1.2",
|
|
86
85
|
"qrcode-terminal": "^0.12.0",
|
|
87
86
|
"remote-pi": "0.7.0",
|
|
87
|
+
"resume-from": "0.4.1",
|
|
88
88
|
"turndown": "^7.2.0",
|
|
89
89
|
"unbash": "4.0.10",
|
|
90
90
|
"undici": "^8.11.2",
|
|
@@ -109,7 +109,6 @@
|
|
|
109
109
|
"@herbertgao/pi-bark",
|
|
110
110
|
"@herbertgao/pi-cc-extensions",
|
|
111
111
|
"@herbertgao/pi-subagents",
|
|
112
|
-
"@herbertgao/resume-from",
|
|
113
112
|
"@herbertgao/sol-pi",
|
|
114
113
|
"@juicesharp/rpiv-ask-user-question",
|
|
115
114
|
"@narumitw/pi-btw",
|
|
@@ -130,7 +129,8 @@
|
|
|
130
129
|
"pi-next-cue",
|
|
131
130
|
"pi-typesafe",
|
|
132
131
|
"pi-web-access",
|
|
133
|
-
"remote-pi"
|
|
132
|
+
"remote-pi",
|
|
133
|
+
"resume-from"
|
|
134
134
|
],
|
|
135
135
|
"engines": {
|
|
136
136
|
"node": ">=24"
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"./node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts",
|
|
142
142
|
"./node_modules/@herbertgao/sol-pi/src/sol-pi/index.ts",
|
|
143
143
|
"./node_modules/@tifan/pi-copy-response/src/index.ts",
|
|
144
|
-
"./node_modules
|
|
144
|
+
"./node_modules/resume-from/shims/pi/extensions/resume-from.js",
|
|
145
145
|
"./node_modules/@tifan/pi-handoff/src/index.ts",
|
|
146
146
|
"./node_modules/@tifan/pi-handoff/src/session-query.ts",
|
|
147
147
|
"./node_modules/@tifan/pi-inline-skills/src/index.ts",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 860 336" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system, 'Segoe UI', Helvetica, Arial, sans-serif">
|
|
2
|
-
<title>Median lines of code per arm across three models</title>
|
|
3
|
-
<text x="20" y="26" font-size="15" font-weight="600" fill="#8b949e">Median lines of code. 10 runs per cell. Lower is leaner.</text>
|
|
4
|
-
<text x="20" y="45" font-size="12" fill="#8b949e" opacity="0.85">Ponytail writes 80-94% less code, costs 42-75% less, and runs 3-6x faster than a no-skill agent.</text>
|
|
5
|
-
<rect x="20" y="58" width="12" height="12" rx="2" fill="#8b949e"/><text x="38" y="69" font-size="13" fill="#8b949e">baseline (no skill)</text>
|
|
6
|
-
<rect x="190" y="58" width="12" height="12" rx="2" fill="#d9822b"/><text x="208" y="69" font-size="13" fill="#8b949e">caveman</text>
|
|
7
|
-
<rect x="300" y="58" width="12" height="12" rx="2" fill="#2da44e"/><text x="318" y="69" font-size="13" fill="#8b949e">ponytail</text>
|
|
8
|
-
<text x="112" y="119" font-size="13" font-weight="600" fill="#8b949e" text-anchor="end">Haiku</text>
|
|
9
|
-
<rect x="120" y="92" width="508" height="14" rx="2" fill="#8b949e"/><text x="634" y="103" font-size="11" fill="#8b949e">518</text>
|
|
10
|
-
<rect x="120" y="110" width="114" height="14" rx="2" fill="#d9822b"/><text x="240" y="121" font-size="11" fill="#d9822b">116</text>
|
|
11
|
-
<rect x="120" y="128" width="38" height="14" rx="2" fill="#2da44e"/><text x="164" y="139" font-size="11" fill="#2da44e" font-weight="600">39</text>
|
|
12
|
-
<text x="112" y="193" font-size="13" font-weight="600" fill="#8b949e" text-anchor="end">Sonnet</text>
|
|
13
|
-
<rect x="120" y="166" width="680" height="14" rx="2" fill="#8b949e"/><text x="806" y="177" font-size="11" fill="#8b949e">693</text>
|
|
14
|
-
<rect x="120" y="184" width="118" height="14" rx="2" fill="#d9822b"/><text x="244" y="195" font-size="11" fill="#d9822b">120</text>
|
|
15
|
-
<rect x="120" y="202" width="43" height="14" rx="2" fill="#2da44e"/><text x="169" y="213" font-size="11" fill="#2da44e" font-weight="600">44</text>
|
|
16
|
-
<text x="112" y="267" font-size="13" font-weight="600" fill="#8b949e" text-anchor="end">Opus</text>
|
|
17
|
-
<rect x="120" y="240" width="251" height="14" rx="2" fill="#8b949e"/><text x="377" y="251" font-size="11" fill="#8b949e">256</text>
|
|
18
|
-
<rect x="120" y="258" width="66" height="14" rx="2" fill="#d9822b"/><text x="192" y="269" font-size="11" fill="#d9822b">67</text>
|
|
19
|
-
<rect x="120" y="276" width="50" height="14" rx="2" fill="#2da44e"/><text x="176" y="287" font-size="11" fill="#2da44e" font-weight="600">51</text>
|
|
20
|
-
<text x="120" y="324" font-size="11" fill="#8b949e" opacity="0.8">Median of 10 runs/cell, default temperature. 5 tasks (email, debounce, CSV sum, countdown, rate-limit), same model per group. Reproduce: npx promptfoo eval -c benchmarks/promptfooconfig.yaml</text>
|
|
21
|
-
</svg>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 860 488" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system, 'Segoe UI', Helvetica, Arial, sans-serif">
|
|
2
|
-
<title>Each arm vs the no-skill baseline across every metric, plus safety, Claude Code on Haiku 4.5</title>
|
|
3
|
-
<text x="430" y="24" font-size="15" font-weight="600" fill="#8b949e" text-anchor="middle">Every metric vs the no-skill baseline (Claude Code, Haiku 4.5, 12 tasks)</text>
|
|
4
|
-
|
|
5
|
-
<rect x="212" y="38" width="12" height="12" rx="2" fill="#8b949e"/><text x="229" y="48" font-size="12" fill="#8b949e">baseline</text>
|
|
6
|
-
<rect x="300" y="38" width="12" height="12" rx="2" fill="#d9822b"/><text x="317" y="48" font-size="12" fill="#8b949e">caveman</text>
|
|
7
|
-
<rect x="392" y="38" width="12" height="12" rx="2" fill="#2da44e"/><text x="409" y="48" font-size="12" fill="#8b949e">ponytail</text>
|
|
8
|
-
<rect x="478" y="38" width="12" height="12" rx="2" fill="#8957e5"/><text x="495" y="48" font-size="12" fill="#8b949e">yagni-oneliner</text>
|
|
9
|
-
|
|
10
|
-
<text x="32" y="248" font-size="12" fill="#8b949e" text-anchor="middle" transform="rotate(-90 32 248)">% of baseline (lower is leaner)</text>
|
|
11
|
-
<line x1="85" y1="360" x2="815" y2="360" stroke="#8b949e" stroke-opacity="0.55"/>
|
|
12
|
-
<line x1="85" y1="305" x2="815" y2="305" stroke="#8b949e" stroke-opacity="0.16"/>
|
|
13
|
-
<line x1="85" y1="250" x2="815" y2="250" stroke="#8b949e" stroke-opacity="0.16"/>
|
|
14
|
-
<line x1="85" y1="195" x2="815" y2="195" stroke="#8b949e" stroke-opacity="0.16"/>
|
|
15
|
-
<line x1="85" y1="140" x2="815" y2="140" stroke="#8b949e" stroke-opacity="0.45" stroke-dasharray="4 4"/>
|
|
16
|
-
<text x="78" y="364" font-size="11" fill="#8b949e" text-anchor="end">0%</text>
|
|
17
|
-
<text x="78" y="309" font-size="11" fill="#8b949e" text-anchor="end">25%</text>
|
|
18
|
-
<text x="78" y="254" font-size="11" fill="#8b949e" text-anchor="end">50%</text>
|
|
19
|
-
<text x="78" y="199" font-size="11" fill="#8b949e" text-anchor="end">75%</text>
|
|
20
|
-
<text x="78" y="144" font-size="11" fill="#8b949e" text-anchor="end">100%</text>
|
|
21
|
-
|
|
22
|
-
<!-- LOC -->
|
|
23
|
-
<rect x="108" y="140" width="30" height="220" rx="2" fill="#8b949e"/><text x="123" y="135" font-size="10" fill="#8b949e" text-anchor="middle">100%</text>
|
|
24
|
-
<rect x="146" y="184" width="30" height="176" rx="2" fill="#d9822b"/><text x="161" y="179" font-size="10" fill="#d9822b" text-anchor="middle">80%</text>
|
|
25
|
-
<rect x="184" y="259" width="30" height="101" rx="2" fill="#2da44e"/><text x="199" y="254" font-size="10" font-weight="600" fill="#2da44e" text-anchor="middle">46%</text>
|
|
26
|
-
<rect x="222" y="213" width="30" height="147" rx="2" fill="#8957e5"/><text x="237" y="208" font-size="10" fill="#8957e5" text-anchor="middle">67%</text>
|
|
27
|
-
<text x="180" y="380" font-size="13" fill="#8b949e" text-anchor="middle">LOC</text>
|
|
28
|
-
<text x="180" y="395" font-size="10" fill="#8b949e" opacity="0.8" text-anchor="middle">base 191</text>
|
|
29
|
-
|
|
30
|
-
<!-- tokens -->
|
|
31
|
-
<rect x="288" y="140" width="30" height="220" rx="2" fill="#8b949e"/><text x="303" y="135" font-size="10" fill="#8b949e" text-anchor="middle">100%</text>
|
|
32
|
-
<rect x="326" y="125" width="30" height="235" rx="2" fill="#d9822b"/><text x="341" y="120" font-size="10" fill="#d9822b" text-anchor="middle">107%</text>
|
|
33
|
-
<rect x="364" y="188" width="30" height="172" rx="2" fill="#2da44e"/><text x="379" y="183" font-size="10" font-weight="600" fill="#2da44e" text-anchor="middle">78%</text>
|
|
34
|
-
<rect x="402" y="171" width="30" height="189" rx="2" fill="#8957e5"/><text x="417" y="166" font-size="10" fill="#8957e5" text-anchor="middle">86%</text>
|
|
35
|
-
<text x="360" y="380" font-size="13" fill="#8b949e" text-anchor="middle">tokens</text>
|
|
36
|
-
<text x="360" y="395" font-size="10" fill="#8b949e" opacity="0.8" text-anchor="middle">base 349k</text>
|
|
37
|
-
|
|
38
|
-
<!-- cost -->
|
|
39
|
-
<rect x="468" y="140" width="30" height="220" rx="2" fill="#8b949e"/><text x="483" y="135" font-size="10" fill="#8b949e" text-anchor="middle">100%</text>
|
|
40
|
-
<rect x="506" y="136" width="30" height="224" rx="2" fill="#d9822b"/><text x="521" y="131" font-size="10" fill="#d9822b" text-anchor="middle">102%</text>
|
|
41
|
-
<rect x="544" y="184" width="30" height="176" rx="2" fill="#2da44e"/><text x="559" y="179" font-size="10" font-weight="600" fill="#2da44e" text-anchor="middle">80%</text>
|
|
42
|
-
<rect x="582" y="188" width="30" height="172" rx="2" fill="#8957e5"/><text x="597" y="183" font-size="10" fill="#8957e5" text-anchor="middle">78%</text>
|
|
43
|
-
<text x="540" y="380" font-size="13" fill="#8b949e" text-anchor="middle">cost</text>
|
|
44
|
-
<text x="540" y="395" font-size="10" fill="#8b949e" opacity="0.8" text-anchor="middle">base $0.10</text>
|
|
45
|
-
|
|
46
|
-
<!-- time -->
|
|
47
|
-
<rect x="648" y="140" width="30" height="220" rx="2" fill="#8b949e"/><text x="663" y="135" font-size="10" fill="#8b949e" text-anchor="middle">100%</text>
|
|
48
|
-
<rect x="686" y="136" width="30" height="224" rx="2" fill="#d9822b"/><text x="701" y="131" font-size="10" fill="#d9822b" text-anchor="middle">102%</text>
|
|
49
|
-
<rect x="724" y="199" width="30" height="161" rx="2" fill="#2da44e"/><text x="739" y="194" font-size="10" font-weight="600" fill="#2da44e" text-anchor="middle">73%</text>
|
|
50
|
-
<rect x="762" y="206" width="30" height="154" rx="2" fill="#8957e5"/><text x="777" y="201" font-size="10" fill="#8957e5" text-anchor="middle">70%</text>
|
|
51
|
-
<text x="720" y="380" font-size="13" fill="#8b949e" text-anchor="middle">time</text>
|
|
52
|
-
<text x="720" y="395" font-size="10" fill="#8b949e" opacity="0.8" text-anchor="middle">base 69s</text>
|
|
53
|
-
|
|
54
|
-
<text x="20" y="418" font-size="11" fill="#8b949e" opacity="0.8">Each bar = that arm's mean as a % of the no-skill baseline (the gray 100% bars). Lower is leaner / cheaper / faster; caveman rises above 100% on tokens, cost and time. n=4.</text>
|
|
55
|
-
|
|
56
|
-
<line x1="20" y1="438" x2="815" y2="438" stroke="#8b949e" stroke-opacity="0.25"/>
|
|
57
|
-
<text x="20" y="460" font-size="11" fill="#8b949e" opacity="0.9">Safety, separate 6-task adversarial tier (path-traversal, SQLi, token forgery, malformed input, rate-limit). Higher is safer:</text>
|
|
58
|
-
<text x="90" y="478" font-size="12" fill="#8b949e">baseline 100%</text>
|
|
59
|
-
<text x="230" y="478" font-size="12" fill="#d9822b">caveman 100%</text>
|
|
60
|
-
<text x="370" y="478" font-size="12" font-weight="600" fill="#2da44e">ponytail 100%</text>
|
|
61
|
-
<text x="510" y="478" font-size="12" fill="#8957e5">yagni-oneliner <tspan fill="#cf222e" font-weight="600">95%</tspan> (dropped a guard once)</text>
|
|
62
|
-
</svg>
|
|
Binary file
|