dsh-pstack 0.2.0-beta.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +2 -3
- package/README.md +148 -84
- package/README.zh.md +198 -0
- package/assets/pstack-config-entry.png +0 -0
- package/cordis.patch.yml +105 -27
- package/dist/client.mjs +2341 -0
- package/dist/client.mjs.map +1 -0
- package/dist/host-contract-CUPSpeNk.d.mts +22 -0
- package/dist/index.d.mts +49 -238
- package/dist/index.mjs +250 -123
- package/dist/models.d.mts +44 -0
- package/dist/models.mjs +201 -0
- package/dist/paths-BT77khwm.mjs +48 -0
- package/dist/pstack/LICENSE +21 -0
- package/dist/pstack/README.md +291 -0
- package/dist/pstack/agents/poteto-agent.md +9 -0
- package/{assets → dist/pstack}/docs/guide/01-setup.md +13 -11
- package/{assets → dist/pstack}/docs/guide/02-poteto-mode.md +4 -4
- package/{assets → dist/pstack}/docs/guide/04-design.md +4 -4
- package/{assets → dist/pstack}/docs/guide/05-build-and-clean.md +2 -2
- package/{assets → dist/pstack}/docs/guide/06-verify-and-ship.md +13 -3
- package/{assets → dist/pstack}/docs/guide/07-overnight.md +15 -13
- package/{assets → dist/pstack}/docs/guide/09-make-it-yours.md +6 -2
- package/{assets → dist/pstack}/docs/guide/10-recipes-and-pitfalls.md +7 -5
- package/{assets → dist/pstack}/docs/guide/README.md +1 -1
- package/dist/pstack/docs/harness/dsh.md +98 -0
- package/{assets → dist/pstack}/skills/architect/SKILL.md +12 -12
- package/dist/pstack/skills/arena/SKILL.md +50 -0
- package/{assets → dist/pstack}/skills/automate-me/SKILL.md +14 -14
- package/{assets → dist/pstack}/skills/benchmark-checklist/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/blast-radius/SKILL.md +4 -6
- package/{assets → dist/pstack}/skills/correct/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/create-formal-verification-skill/SKILL.md +4 -2
- package/{assets → dist/pstack}/skills/create-verification-skill/SKILL.md +5 -5
- package/dist/pstack/skills/figure-it-out/SKILL.md +54 -0
- package/dist/pstack/skills/how/SKILL.md +38 -0
- package/{assets → dist/pstack}/skills/in-your-own-words/SKILL.md +1 -1
- package/dist/pstack/skills/interrogate/SKILL.md +33 -0
- package/{assets → dist/pstack}/skills/ketchup/SKILL.md +3 -5
- package/dist/pstack/skills/ketchup-video/SKILL.md +29 -0
- package/{assets → dist/pstack}/skills/maintain-formal-verification-skill/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/maintain-verification-skill/SKILL.md +3 -3
- package/dist/pstack/skills/make-bot-ui/SKILL.md +117 -0
- package/dist/pstack/skills/no-comments/SKILL.md +26 -0
- package/{assets → dist/pstack}/skills/poteto-help/SKILL.md +34 -31
- package/{assets → dist/pstack}/skills/poteto-help/references/prompting.md +1 -1
- package/{assets → dist/pstack}/skills/poteto-help/references/recipes.md +3 -3
- package/{assets → dist/pstack}/skills/poteto-mode/SKILL.md +20 -19
- package/dist/pstack/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
- package/dist/pstack/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
- package/dist/pstack/skills/poteto-mode/playbooks/autopilot-full.md +25 -0
- package/dist/pstack/skills/poteto-mode/playbooks/autopilot-stack.md +8 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/babysit.md +4 -4
- package/dist/pstack/skills/poteto-mode/playbooks/bug-fix.md +15 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/eval.md +3 -3
- package/dist/pstack/skills/poteto-mode/playbooks/feature.md +21 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/hillclimb.md +3 -3
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/investigation.md +2 -2
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/multi-phase-plan.md +23 -23
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/opening-a-pr.md +6 -6
- package/dist/pstack/skills/poteto-mode/playbooks/orchestrate.md +25 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/pause-safely.md +2 -2
- package/dist/pstack/skills/poteto-mode/playbooks/perf-issue.md +25 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/prototype.md +4 -4
- package/dist/pstack/skills/poteto-mode/playbooks/refactoring.md +16 -0
- package/dist/pstack/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
- package/dist/pstack/skills/poteto-mode/playbooks/session-pickup.md +11 -0
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/shipping.md +2 -2
- package/{assets → dist/pstack}/skills/poteto-mode/playbooks/trace-forensics.md +2 -2
- package/dist/pstack/skills/poteto-mode/playbooks/visual-parity.md +11 -0
- package/dist/pstack/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
- package/{assets → dist/pstack}/skills/poteto-mode/scripts/check-plan.mjs +6 -8
- package/dist/pstack/skills/poteto-mode/scripts/check-plan.test.mjs +128 -0
- package/{assets/skills/poteto-mode/scripts/check-plan.test.mjs → dist/pstack/skills/poteto-mode/scripts/expect.mjs} +12 -101
- package/dist/pstack/skills/poteto-mode/scripts/support.mjs +93 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.mjs +123 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.mjs +217 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.mjs +119 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.mjs +626 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.test.mjs +521 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.mjs +657 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.mjs +523 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/render.mjs +106 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/types.mjs +9 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr.mjs +5 -0
- package/{assets → dist/pstack}/skills/poteto-mode/scripts/worktree-audit.mjs +15 -22
- package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.test.mjs +134 -0
- package/{assets → dist/pstack}/skills/principle-attack-the-premise/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-boundary-discipline/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-encode-lessons-in-structure/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-exhaust-the-design-space/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-experience-first/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-explain-the-number/SKILL.md +3 -2
- package/{assets → dist/pstack}/skills/principle-fix-root-causes/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-laziness-protocol/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-make-operations-idempotent/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-minimize-reader-load/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-model-the-domain/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-never-block-on-the-human/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-outcome-oriented-execution/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-prove-it-works/SKILL.md +2 -2
- package/{assets → dist/pstack}/skills/principle-redesign-from-first-principles/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-separate-before-serializing-shared-state/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-sequence-verifiable-units/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-subtract-before-you-add/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-test-behavior-not-implementation/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/principle-type-system-discipline/SKILL.md +1 -1
- package/dist/pstack/skills/recall/SKILL.md +37 -0
- package/dist/pstack/skills/reflect/SKILL.md +71 -0
- package/{assets → dist/pstack}/skills/reflect/references/divergent-reviewer.md +4 -4
- package/{assets → dist/pstack}/skills/reflect/references/judgment-reviewer.md +2 -2
- package/{assets → dist/pstack}/skills/reflect/references/synthesizer.md +5 -5
- package/{assets → dist/pstack}/skills/reflect/references/tooling-reviewer.md +2 -2
- package/dist/pstack/skills/setup-pstack/SKILL.md +80 -0
- package/{assets → dist/pstack}/skills/sharpen/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/show-me-your-work/SKILL.md +8 -8
- package/{assets → dist/pstack}/skills/show-me-your-work/scripts/log.mjs +1 -3
- package/dist/pstack/skills/show-me-your-work/scripts/log.test.mjs +56 -0
- package/dist/pstack/skills/statechart/SKILL.md +82 -0
- package/dist/pstack/skills/statechart/references/render.md +93 -0
- package/dist/pstack/skills/statechart/scripts/backends/cfg.mjs +31 -0
- package/dist/pstack/skills/statechart/scripts/backends/mermaid.mjs +186 -0
- package/dist/pstack/skills/statechart/scripts/backends/plain-text.mjs +62 -0
- package/dist/pstack/skills/statechart/scripts/backends/report.mjs +84 -0
- package/dist/pstack/skills/statechart/scripts/frontends/config.mjs +268 -0
- package/dist/pstack/skills/statechart/scripts/frontends/dot.mjs +67 -0
- package/dist/pstack/skills/statechart/scripts/frontends/marks.mjs +94 -0
- package/dist/pstack/skills/statechart/scripts/frontends/messages.mjs +48 -0
- package/dist/pstack/skills/statechart/scripts/frontends/spec.mjs +101 -0
- package/dist/pstack/skills/statechart/scripts/frontends/trace.mjs +39 -0
- package/dist/pstack/skills/statechart/scripts/frontends/value.mjs +180 -0
- package/dist/pstack/skills/statechart/scripts/frontends/verdict.mjs +40 -0
- package/dist/pstack/skills/statechart/scripts/frontends/view.mjs +99 -0
- package/dist/pstack/skills/statechart/scripts/ir.mjs +277 -0
- package/dist/pstack/skills/statechart/scripts/passes/annotate.mjs +92 -0
- package/dist/pstack/skills/statechart/scripts/passes/label.mjs +210 -0
- package/dist/pstack/skills/statechart/scripts/passes/lift.mjs +84 -0
- package/dist/pstack/skills/statechart/scripts/passes/loop-check.mjs +47 -0
- package/dist/pstack/skills/statechart/scripts/passes/paths.mjs +72 -0
- package/dist/pstack/skills/statechart/scripts/passes/reach.mjs +135 -0
- package/dist/pstack/skills/statechart/scripts/passes/region-check.mjs +82 -0
- package/dist/pstack/skills/statechart/scripts/passes/regions.mjs +268 -0
- package/dist/pstack/skills/statechart/scripts/pipeline.mjs +72 -0
- package/dist/pstack/skills/statechart/scripts/run.mjs +440 -0
- package/dist/pstack/skills/statechart/scripts/statechart.mjs +155 -0
- package/dist/pstack/skills/statechart/scripts/statechart.test.mjs +198 -0
- package/dist/pstack/skills/statechart/scripts/worker.mjs +31 -0
- package/dist/pstack/skills/swarm/SKILL.md +43 -0
- package/{assets → dist/pstack}/skills/tdd/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/teach/SKILL.md +2 -2
- package/{assets → dist/pstack}/skills/technical-writing/SKILL.md +1 -1
- package/{assets → dist/pstack}/skills/typescript-best-practices/SKILL.md +3 -6
- package/{assets → dist/pstack}/skills/why/SKILL.md +8 -8
- package/dist/remote.d.mts +27 -0
- package/dist/remote.mjs +234 -0
- package/dist/role-config-NNn5r1JX.mjs +415 -0
- package/dist/role-manifest-C3fUzjLI.d.mts +19 -0
- package/dist/role-wire-DZwTn2wF.d.mts +55 -0
- package/dist/roles.d.mts +18 -0
- package/dist/roles.mjs +323 -0
- package/dist/script.d.mts +9 -111
- package/dist/script.mjs +32 -329
- package/dist/skill.d.mts +38 -0
- package/dist/skill.mjs +183 -0
- package/dist/skills/authored/decision-audit/SKILL.md +103 -0
- package/dist/skills/authored/decision-audit/SKILL.zh.md +103 -0
- package/dist/skills/authored/decision-audit/references/recover-commit.md +17 -0
- package/dist/skills/authored/decision-audit/references/recover-commit.zh.md +17 -0
- package/dist/skills/authored/decision-write/SKILL.md +133 -0
- package/dist/skills/authored/decision-write/SKILL.zh.md +133 -0
- package/dist/skills/authored/decision-write/references/land.md +48 -0
- package/dist/skills/authored/decision-write/references/land.zh.md +48 -0
- package/dist/skills/authored/decision-write/references/scope.md +16 -0
- package/dist/skills/authored/decision-write/references/scope.zh.md +16 -0
- package/dist/skills/authored/docs-drift/SKILL.md +120 -0
- package/dist/skills/authored/docs-drift/SKILL.zh.md +120 -0
- package/dist/skills/authored/setup-project-docs/SKILL.md +63 -0
- package/dist/skills/authored/setup-project-docs/SKILL.zh.md +63 -0
- package/dist/skills/authored/setup-project-docs/references/decision-conventions.md +13 -0
- package/dist/skills/authored/setup-project-docs/references/decision-conventions.zh.md +13 -0
- package/dist/skills/vendored/retro/SKILL.md +44 -0
- package/dist/skills/vendored/retro/agents/openai.yaml +5 -0
- package/dist/skills/vendored/writing-for-agents/SKILL-MECHANICS.md +22 -0
- package/dist/skills/vendored/writing-for-agents/SKILL.md +81 -0
- package/dist/skills/vendored/writing-for-agents/agents/openai.yaml +3 -0
- package/dist/subagent.d.mts +54 -206
- package/dist/subagent.mjs +258 -963
- package/locale/en.json +3 -2
- package/locale/zh.json +3 -2
- package/package.json +93 -66
- package/assets/agents/poteto-agent.md +0 -8
- package/assets/docs/harness/dsh.md +0 -60
- package/assets/docs/pstack-models.example.md +0 -54
- package/assets/skills/arena/SKILL.md +0 -50
- package/assets/skills/figure-it-out/SKILL.md +0 -54
- package/assets/skills/how/SKILL.md +0 -38
- package/assets/skills/interrogate/SKILL.md +0 -71
- package/assets/skills/interrogate/references/code-quality-review.md +0 -47
- package/assets/skills/interrogate/references/lead-judgment.md +0 -39
- package/assets/skills/interrogate/references/reviewer-prompt.md +0 -62
- package/assets/skills/interrogate/references/rubric.md +0 -77
- package/assets/skills/no-comments/SKILL.md +0 -26
- package/assets/skills/poteto-mode/playbooks/authoring-a-skill.md +0 -12
- package/assets/skills/poteto-mode/playbooks/autonomous-run.md +0 -15
- package/assets/skills/poteto-mode/playbooks/autopilot-full.md +0 -25
- package/assets/skills/poteto-mode/playbooks/autopilot-stack.md +0 -12
- package/assets/skills/poteto-mode/playbooks/bug-fix.md +0 -15
- package/assets/skills/poteto-mode/playbooks/feature.md +0 -21
- package/assets/skills/poteto-mode/playbooks/orchestrate.md +0 -112
- package/assets/skills/poteto-mode/playbooks/perf-issue.md +0 -25
- package/assets/skills/poteto-mode/playbooks/refactoring.md +0 -16
- package/assets/skills/poteto-mode/playbooks/runtime-forensics.md +0 -11
- package/assets/skills/poteto-mode/playbooks/session-pickup.md +0 -11
- package/assets/skills/poteto-mode/playbooks/visual-parity.md +0 -11
- package/assets/skills/poteto-mode/playbooks/worktree-cleanup.md +0 -20
- package/assets/skills/poteto-mode/scripts/orch/orch.mjs +0 -4282
- package/assets/skills/poteto-mode/scripts/orch/orch.test.mjs +0 -2042
- package/assets/skills/poteto-mode/scripts/watch-pr/cli.test.mjs +0 -5101
- package/assets/skills/poteto-mode/scripts/watch-pr/github.test.mjs +0 -1177
- package/assets/skills/poteto-mode/scripts/watch-pr/policy.test.mjs +0 -1441
- package/assets/skills/poteto-mode/scripts/watch-pr/watch-pr.mjs +0 -4601
- package/assets/skills/recall/SKILL.md +0 -37
- package/assets/skills/reflect/SKILL.md +0 -69
- package/assets/skills/setup-pstack/SKILL.md +0 -67
- package/assets/skills/swarm/SKILL.md +0 -43
- package/dist/frontmatter-BQX3ekwP.mjs +0 -229
- package/dist/frontmatter-BQX3ekwP.mjs.map +0 -1
- package/dist/history.d.mts +0 -429
- package/dist/history.mjs +0 -1129
- package/dist/history.mjs.map +0 -1
- package/dist/host-contract-o47JH_r8.d.mts +0 -527
- package/dist/index.mjs.map +0 -1
- package/dist/paths-D_JlVmBk.mjs +0 -42
- package/dist/paths-D_JlVmBk.mjs.map +0 -1
- package/dist/script.mjs.map +0 -1
- package/dist/subagent.mjs.map +0 -1
- /package/{static/icon.png → assets/logo.png} +0 -0
- /package/{assets → dist/pstack}/agents/comment-sicko.md +0 -0
- /package/{assets → dist/pstack}/docs/guide/03-understand.md +0 -0
- /package/{assets → dist/pstack}/docs/guide/08-principles.md +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/design.jpg +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/overnight.jpg +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/recipes.jpg +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/router.jpg +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/understanding.jpg +0 -0
- /package/{assets → dist/pstack}/docs/guide/images/verification.jpg +0 -0
- /package/{assets → dist/pstack}/skills/architect/references/design-red-flags.md +0 -0
- /package/{assets → dist/pstack}/skills/architect/references/rationale-template.md +0 -0
- /package/{assets → dist/pstack}/skills/architect/references/runner-prompt.md +0 -0
- /package/{assets → dist/pstack}/skills/bro/SKILL.md +0 -0
- /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/README.md +0 -0
- /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/create-note.md +0 -0
- /package/{assets → dist/pstack}/skills/create-verification-skill/references/feature-map-example/search.md +0 -0
- /package/{assets → dist/pstack}/skills/how/references/explainer-prompt.md +0 -0
- /package/{assets → dist/pstack}/skills/how/references/explorer-prompt.md +0 -0
- /package/{assets → dist/pstack}/skills/poteto-mode/references/bugbot-triage.md +0 -0
- /package/{assets → dist/pstack}/skills/principle-build-the-lever/SKILL.md +0 -0
- /package/{assets → dist/pstack}/skills/principle-foundational-thinking/SKILL.md +0 -0
- /package/{assets → dist/pstack}/skills/principle-guard-the-context-window/SKILL.md +0 -0
- /package/{assets → dist/pstack}/skills/show-me-your-work/references/decision-log-template.tsv +0 -0
- /package/{assets → dist/pstack}/skills/typescript-best-practices/references/patterns.md +0 -0
- /package/{assets → dist/pstack}/skills/unslop/SKILL.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/epistemics.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/investigator-prompt.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/source-playbook.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/code-archaeology.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/databricks.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/datadog.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/incident-postmortem.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/linear.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/notion.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/sentry.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/sources/slack.md +0 -0
- /package/{assets → dist/pstack}/skills/why/references/synthesizer-prompt.md +0 -0
package/dist/history.d.mts
DELETED
|
@@ -1,429 +0,0 @@
|
|
|
1
|
-
import { _ as ToolRunContext, c as SessionEvent, d as SessionQueryHost, g as ToolDefinition, l as SessionHeader, m as SubagentCatalogHost, o as JsonSchemaNode, p as SubagentCatalogEntry, v as ToolsHost } from "./host-contract-o47JH_r8.mjs";
|
|
2
|
-
//#region src/history.d.ts
|
|
3
|
-
/** Cordis row name, used by Loader diagnostics. */
|
|
4
|
-
export declare const name = "pstack-history";
|
|
5
|
-
/**
|
|
6
|
-
* The row needs the tool registry and the subagent catalog; `sessionQuery` does not.
|
|
7
|
-
*
|
|
8
|
-
* Declaring `sessionQuery` here made it a *hard* dependency, and Cordis's semantics
|
|
9
|
-
* are that a missing injected service keeps the fiber inactive and a removed one
|
|
10
|
-
* disposes it. So in a profile without `sessionQuery` the tool never registered at
|
|
11
|
-
* all, and disposing the service unregistered it — the model saw "no such tool"
|
|
12
|
-
* instead of the `unavailable` result this module is built to return, and the
|
|
13
|
-
* `MISSING_SESSION_QUERY` branch was reachable only from tests with a hand-built
|
|
14
|
-
* runtime.
|
|
15
|
-
*
|
|
16
|
-
* Reading it through `ctx.get("sessionQuery")` instead — rc.3's optional-service
|
|
17
|
-
* form, which returns `undefined` rather than throwing — keeps the tool registered
|
|
18
|
-
* and lets the call answer honestly.
|
|
19
|
-
*/
|
|
20
|
-
export declare const inject: string[];
|
|
21
|
-
/** Model-facing tool name. */
|
|
22
|
-
export declare const TOOL_NAME = "pstack_history";
|
|
23
|
-
/** Events returned when the call omits `limit`. */
|
|
24
|
-
export declare const DEFAULT_LIMIT = 50;
|
|
25
|
-
/** Largest `limit` a call may request. A larger value is rejected, not clamped. */
|
|
26
|
-
export declare const MAX_LIMIT = 200;
|
|
27
|
-
/**
|
|
28
|
-
* Soft ceiling for one page's serialized events.
|
|
29
|
-
*
|
|
30
|
-
* The slicer always returns at least one event so a caller can make progress
|
|
31
|
-
* through one oversized event, and reports `truncatedByBytes` when the ceiling
|
|
32
|
-
* stopped the page before `limit` did.
|
|
33
|
-
*/
|
|
34
|
-
export declare const MAX_PAGE_BYTES: number;
|
|
35
|
-
/** Scopes the tool understands. Descendant traversal is not implemented. */
|
|
36
|
-
export declare const HISTORY_SCOPES: readonly ["current", "children"];
|
|
37
|
-
export type HistoryScope = (typeof HISTORY_SCOPES)[number];
|
|
38
|
-
/**
|
|
39
|
-
* Why a read could not produce events, by the layer that failed.
|
|
40
|
-
*
|
|
41
|
-
* `input` is the caller's own request — a combination of arguments this tool refuses,
|
|
42
|
-
* such as a continuation page that omits `throughSeq`. It is separate from the
|
|
43
|
-
* service layers because the fix belongs to the caller, not to the Host.
|
|
44
|
-
*/
|
|
45
|
-
export type HistoryFailureLayer = "authorization" | "input" | "session-query" | "persistence" | "backend";
|
|
46
|
-
export interface HistoryArgs {
|
|
47
|
-
readonly scope: HistoryScope;
|
|
48
|
-
readonly sessionId?: string;
|
|
49
|
-
readonly fromSeq: number;
|
|
50
|
-
/** Inclusive upper bound pinned by the caller, when one was supplied. */
|
|
51
|
-
readonly throughSeq?: number;
|
|
52
|
-
readonly limit: number;
|
|
53
|
-
}
|
|
54
|
-
export interface HistorySessionView {
|
|
55
|
-
readonly id: string;
|
|
56
|
-
readonly version: number;
|
|
57
|
-
readonly createdAt: number;
|
|
58
|
-
readonly cwd: string | null;
|
|
59
|
-
readonly parentSession: string | null;
|
|
60
|
-
readonly origin: "subagent" | null;
|
|
61
|
-
readonly delegationDepth: number | null;
|
|
62
|
-
readonly agentPreset: string | null;
|
|
63
|
-
readonly isSeeded: boolean;
|
|
64
|
-
}
|
|
65
|
-
export interface HistoryEventView {
|
|
66
|
-
readonly seq: number;
|
|
67
|
-
readonly time: number;
|
|
68
|
-
readonly type: string;
|
|
69
|
-
readonly data: unknown;
|
|
70
|
-
readonly surfaceOp: SessionEvent["surfaceOp"] | null;
|
|
71
|
-
readonly sourceEventSeqs: readonly number[] | null;
|
|
72
|
-
}
|
|
73
|
-
export interface HistoryPageView {
|
|
74
|
-
readonly fromSeq: number;
|
|
75
|
-
readonly limit: number;
|
|
76
|
-
/** Inclusive snapshot boundary every returned seq stays inside. */
|
|
77
|
-
readonly throughSeq: number;
|
|
78
|
-
/**
|
|
79
|
-
* True when `throughSeq` came from the caller rather than from this call's
|
|
80
|
-
* snapshot.
|
|
81
|
-
*
|
|
82
|
-
* A continuation page must pin the boundary from the first page. When this is
|
|
83
|
-
* false the boundary moved with this call, and comparing two pages of one audit is
|
|
84
|
-
* not sound.
|
|
85
|
-
*/
|
|
86
|
-
readonly pinnedThroughSeq: boolean;
|
|
87
|
-
readonly returned: number;
|
|
88
|
-
readonly firstSeq: number | null;
|
|
89
|
-
readonly lastSeq: number | null;
|
|
90
|
-
readonly nextFromSeq: number | null;
|
|
91
|
-
readonly hasMore: boolean;
|
|
92
|
-
readonly truncatedByBytes: boolean;
|
|
93
|
-
/** Sequence numbers of this call's own `tool/call` events left out of the page. */
|
|
94
|
-
readonly excludedOwnCallSeqs: readonly number[];
|
|
95
|
-
}
|
|
96
|
-
export interface HistoryProvenanceView {
|
|
97
|
-
/**
|
|
98
|
-
* `source-log` means every returned event is the first-party log of that
|
|
99
|
-
* session. `undeterminable` means the host cannot attribute the events.
|
|
100
|
-
*/
|
|
101
|
-
readonly determination: "source-log" | "undeterminable";
|
|
102
|
-
/**
|
|
103
|
-
* Always `null` in rc.3: no public method reports the persisted boundary of an
|
|
104
|
-
* observed log, for either source.
|
|
105
|
-
*/
|
|
106
|
-
readonly persistedThroughSeq: number | null;
|
|
107
|
-
readonly note: string;
|
|
108
|
-
}
|
|
109
|
-
export interface HistoryChildView {
|
|
110
|
-
readonly sessionId: string;
|
|
111
|
-
readonly label: string;
|
|
112
|
-
readonly createdAt: number;
|
|
113
|
-
}
|
|
114
|
-
export interface HistoryRelationsView {
|
|
115
|
-
/** Whether the child catalog could be read at all. */
|
|
116
|
-
readonly catalogAvailable: boolean;
|
|
117
|
-
/** The caller's reviewable direct children. Ids of other modes are never listed. */
|
|
118
|
-
readonly directChildren: readonly HistoryChildView[];
|
|
119
|
-
/** Counts, never ids, for direct children this tool will not read. */
|
|
120
|
-
readonly excluded: {
|
|
121
|
-
readonly external: number;
|
|
122
|
-
readonly oneShot: number;
|
|
123
|
-
readonly unknown: number;
|
|
124
|
-
};
|
|
125
|
-
/** Present when the read targeted a child. */
|
|
126
|
-
readonly parentSessionId: string | null;
|
|
127
|
-
/** Descendant traversal is not implemented, so this is always `false`. */
|
|
128
|
-
readonly descendantsSupported: false;
|
|
129
|
-
}
|
|
130
|
-
export interface HistoryAuditView {
|
|
131
|
-
/** False when the events cannot be attributed to the first-party log. */
|
|
132
|
-
readonly complete: boolean;
|
|
133
|
-
/** `full` only when the page starts at seq 0 and has no further page. */
|
|
134
|
-
readonly coverage: "full" | "partial" | "none";
|
|
135
|
-
readonly blockers: readonly string[];
|
|
136
|
-
}
|
|
137
|
-
export type HistoryResult = {
|
|
138
|
-
readonly kind: "events";
|
|
139
|
-
readonly callerSessionId: string;
|
|
140
|
-
readonly requestedSessionId: string;
|
|
141
|
-
readonly scope: HistoryScope;
|
|
142
|
-
/** The lease that produced this page, after the fact. */
|
|
143
|
-
readonly snapshotSource: "live" | "prepared";
|
|
144
|
-
readonly revision: string | null;
|
|
145
|
-
readonly session: HistorySessionView;
|
|
146
|
-
readonly page: HistoryPageView;
|
|
147
|
-
readonly provenance: HistoryProvenanceView;
|
|
148
|
-
readonly relations: HistoryRelationsView;
|
|
149
|
-
readonly audit: HistoryAuditView;
|
|
150
|
-
readonly events: readonly HistoryEventView[];
|
|
151
|
-
readonly notes: readonly string[];
|
|
152
|
-
} | {
|
|
153
|
-
readonly kind: "children";
|
|
154
|
-
readonly callerSessionId: string;
|
|
155
|
-
readonly requestedSessionId: null;
|
|
156
|
-
readonly scope: "children";
|
|
157
|
-
readonly relations: HistoryRelationsView;
|
|
158
|
-
readonly notes: readonly string[];
|
|
159
|
-
} | {
|
|
160
|
-
readonly kind: "denied";
|
|
161
|
-
readonly callerSessionId: string | null;
|
|
162
|
-
readonly requestedSessionId: string | null;
|
|
163
|
-
readonly scope: HistoryScope;
|
|
164
|
-
readonly layer: "authorization";
|
|
165
|
-
readonly code: string;
|
|
166
|
-
/** Actionable sentence naming the failed check, never backend text. */
|
|
167
|
-
readonly message: string;
|
|
168
|
-
readonly notes: readonly string[];
|
|
169
|
-
} | {
|
|
170
|
-
readonly kind: "unavailable";
|
|
171
|
-
readonly callerSessionId: string | null;
|
|
172
|
-
readonly requestedSessionId: string | null;
|
|
173
|
-
readonly scope: HistoryScope;
|
|
174
|
-
readonly layer: Exclude<HistoryFailureLayer, "authorization">;
|
|
175
|
-
readonly code: string;
|
|
176
|
-
readonly message: string;
|
|
177
|
-
readonly notes: readonly string[];
|
|
178
|
-
};
|
|
179
|
-
/** Thrown for a malformed call. The registry surfaces it as a tool error. */
|
|
180
|
-
export declare class HistoryInputError extends Error {
|
|
181
|
-
readonly code: string;
|
|
182
|
-
constructor(message: string, code?: string);
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Validate one call.
|
|
186
|
-
*
|
|
187
|
-
* `limit` above `MAX_LIMIT` is rejected rather than clamped: a caller that asks
|
|
188
|
-
* for 10 000 events is trying to read a whole log in one shot, and a silent
|
|
189
|
-
* clamp would look like the tool agreed.
|
|
190
|
-
*/
|
|
191
|
-
export declare function parseHistoryArgs(raw: unknown): HistoryArgs;
|
|
192
|
-
export type TargetAuthorization = {
|
|
193
|
-
readonly kind: "self";
|
|
194
|
-
} | {
|
|
195
|
-
readonly kind: "child";
|
|
196
|
-
readonly label: string;
|
|
197
|
-
};
|
|
198
|
-
export type AuthorizationRejection = "missing-agent" | "not-a-direct-child" | "child-not-reviewable";
|
|
199
|
-
/**
|
|
200
|
-
* First half of the child check: the catalog row, before any backend read.
|
|
201
|
-
*
|
|
202
|
-
* A target equal to the caller is always self. Anything else must appear in the
|
|
203
|
-
* caller's own direct-child catalog with `mode: "continuable"`.
|
|
204
|
-
*/
|
|
205
|
-
export declare function authorizeTarget(callerId: string | null, targetId: string, entries: readonly SubagentCatalogEntry[]): TargetAuthorization | AuthorizationRejection;
|
|
206
|
-
export type ObservedRejection = "target-changed" | "lineage-mismatch" | "workspace-unknown" | "cross-workspace";
|
|
207
|
-
export interface ObservedAuthorizationInput {
|
|
208
|
-
readonly callerId: string;
|
|
209
|
-
readonly targetId: string;
|
|
210
|
-
readonly target: TargetAuthorization;
|
|
211
|
-
readonly observedHeader: SessionHeader;
|
|
212
|
-
/** The caller's own `cwd`, read from the corpus before the target. */
|
|
213
|
-
readonly callerCwd: string | undefined;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* How a child's recorded directory relates to the caller's current one.
|
|
217
|
-
*
|
|
218
|
-
* A child's `cwd` is fixed when the child is created (`prepareContinuable` in
|
|
219
|
-
* `dsh-subagent` resolves the directory and writes it into the header), while
|
|
220
|
-
* `create_worktree` and `workingDirectory.set` change only the *current*
|
|
221
|
-
* directory of a session. So a child legitimately started in a worktree or a
|
|
222
|
-
* subdirectory of the caller's project has a different `cwd` from the caller even
|
|
223
|
-
* though it is working on the same project.
|
|
224
|
-
*
|
|
225
|
-
* Both sides are normalised with `resolve` first, which absorbs separator
|
|
226
|
-
* differences, trailing slashes, and `..` segments on every platform:
|
|
227
|
-
*
|
|
228
|
-
* - `same` — identical after normalisation.
|
|
229
|
-
* - `nested` — the child sits inside the caller's directory. Worktree pools and
|
|
230
|
-
* `repo/sub` land here: working isolation, not a foreign project.
|
|
231
|
-
* - `foreign` — anything else, which stays `cross-workspace`.
|
|
232
|
-
*/
|
|
233
|
-
export declare function workspaceRelation(callerCwd: string, childCwd: string): "same" | "nested" | "foreign";
|
|
234
|
-
/**
|
|
235
|
-
* Second half of authorization, run against the header actually returned.
|
|
236
|
-
*
|
|
237
|
-
* This repeats the identity and workspace check on the data that will be
|
|
238
|
-
* rendered, so a header that disagrees with the requested target, the claimed
|
|
239
|
-
* parent, or the caller's workspace is rejected before any event leaves the
|
|
240
|
-
* tool. `traceSession` is deliberately not consulted: lineage is a naming
|
|
241
|
-
* source, and reading it would add a third observation without granting
|
|
242
|
-
* anything the catalog row and `parentSession` do not already establish.
|
|
243
|
-
*/
|
|
244
|
-
export declare function authorizeObserved(input: ObservedAuthorizationInput): ObservedRejection | null;
|
|
245
|
-
/** Render one authorization rejection for the caller. */
|
|
246
|
-
export declare function describeAuthorizationFailure(rejection: AuthorizationRejection): {
|
|
247
|
-
readonly code: string;
|
|
248
|
-
readonly message: string;
|
|
249
|
-
};
|
|
250
|
-
/** Render one observed-header rejection for the caller. */
|
|
251
|
-
export declare function describeObservedFailure(rejection: ObservedRejection): {
|
|
252
|
-
readonly code: string;
|
|
253
|
-
readonly message: string;
|
|
254
|
-
};
|
|
255
|
-
/**
|
|
256
|
-
* Split a direct-child catalog into the rows this tool will read and counts of
|
|
257
|
-
* the ones it will not.
|
|
258
|
-
*
|
|
259
|
-
* Only continuable ids leave this function. External, one-shot, and unknown
|
|
260
|
-
* rows are counted so a caller can tell "no children" from "children I may not
|
|
261
|
-
* read" without learning ids it was not granted.
|
|
262
|
-
*/
|
|
263
|
-
export declare function describeRelations(callerId: string | null, entries: readonly SubagentCatalogEntry[] | null): HistoryRelationsView;
|
|
264
|
-
export interface SliceInput {
|
|
265
|
-
readonly events: readonly SessionEvent[];
|
|
266
|
-
readonly fromSeq: number;
|
|
267
|
-
readonly limit: number;
|
|
268
|
-
/** Inclusive upper bound taken from the observation, never re-read later. */
|
|
269
|
-
readonly throughSeq: number;
|
|
270
|
-
/** `callId`s of this call's own `tool/call` events. */
|
|
271
|
-
readonly ownCallIds?: readonly string[];
|
|
272
|
-
readonly maxBytes?: number;
|
|
273
|
-
}
|
|
274
|
-
export interface SliceResult {
|
|
275
|
-
readonly events: readonly SessionEvent[];
|
|
276
|
-
readonly nextFromSeq: number | null;
|
|
277
|
-
readonly hasMore: boolean;
|
|
278
|
-
readonly truncatedByBytes: boolean;
|
|
279
|
-
readonly excludedOwnCallSeqs: readonly number[];
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Cut one page out of one fixed snapshot.
|
|
283
|
-
*
|
|
284
|
-
* Rules, in order: keep events inside `[fromSeq, throughSeq]`; drop this call's
|
|
285
|
-
* own `tool/call` events so the audit basis cannot contain the act of auditing;
|
|
286
|
-
* take `limit` events; stop early only once at least one event is present and the
|
|
287
|
-
* byte ceiling would be crossed. `nextFromSeq` is the first unreturned seq, so a
|
|
288
|
-
* gap left by an excluded event can never be read as "no more events".
|
|
289
|
-
*/
|
|
290
|
-
export declare function sliceEvents(input: SliceInput): SliceResult;
|
|
291
|
-
/** The fields of one observation the DTO keeps after the lease is released. */
|
|
292
|
-
export interface ObservationFacts {
|
|
293
|
-
readonly header: SessionHeader;
|
|
294
|
-
readonly source: "live" | "prepared";
|
|
295
|
-
readonly revision?: string;
|
|
296
|
-
readonly events: readonly SessionEvent[];
|
|
297
|
-
readonly cursor: number;
|
|
298
|
-
readonly inheritedEventCount: number;
|
|
299
|
-
}
|
|
300
|
-
export interface AssembleInput {
|
|
301
|
-
readonly args: HistoryArgs;
|
|
302
|
-
readonly callerSessionId: string;
|
|
303
|
-
readonly targetId: string;
|
|
304
|
-
readonly target: TargetAuthorization;
|
|
305
|
-
readonly facts: ObservationFacts;
|
|
306
|
-
readonly relations: HistoryRelationsView;
|
|
307
|
-
readonly ownCallIds: readonly string[];
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Build one events page.
|
|
311
|
-
*
|
|
312
|
-
* The caller's `throughSeq` pins the window when supplied, so page two of the
|
|
313
|
-
* same audit cannot absorb an append that landed between the calls. A requested
|
|
314
|
-
* bound beyond the snapshot is clamped down to the snapshot, never extended.
|
|
315
|
-
*
|
|
316
|
-
* A *continuation* page has to pass that boundary back, and this function does not
|
|
317
|
-
* fake it: `readHistory` rejects a `fromSeq > 0` call that omits `throughSeq` before
|
|
318
|
-
* reaching here, because each call re-observes the session and `facts.cursor` would
|
|
319
|
-
* otherwise be the *new* boundary. Silently moving it lets the audit absorb events
|
|
320
|
-
* that did not exist when the first page was read, which is exactly what the design
|
|
321
|
-
* forbids.
|
|
322
|
-
*/
|
|
323
|
-
export declare function assembleEventsResult(input: AssembleInput): Extract<HistoryResult, {
|
|
324
|
-
kind: "events";
|
|
325
|
-
}>;
|
|
326
|
-
/**
|
|
327
|
-
* State what rc.3 can and cannot attribute.
|
|
328
|
-
*
|
|
329
|
-
* A live observation is a fixed snapshot of the in-memory log, so every event in
|
|
330
|
-
* it is first-party. A prepared observation is read from persistence, closed,
|
|
331
|
-
* and then extended in memory with synthetic interrupted-turn closers; rc.3
|
|
332
|
-
* exposes neither their marker nor the persisted boundary, and the closers reuse
|
|
333
|
-
* ordinary event types and reasons. Attribution is therefore impossible for a
|
|
334
|
-
* cold read, and this result says so instead of presenting repair events as
|
|
335
|
-
* original evidence.
|
|
336
|
-
*/
|
|
337
|
-
export declare function describeProvenance(facts: Pick<ObservationFacts, "source">): HistoryProvenanceView;
|
|
338
|
-
interface SafeFailure {
|
|
339
|
-
readonly layer: Exclude<HistoryFailureLayer, "authorization">;
|
|
340
|
-
readonly code: string;
|
|
341
|
-
readonly message: string;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Translate one thrown backend error into a safe failure.
|
|
345
|
-
*
|
|
346
|
-
* The original message is never echoed, and no `cause` is attached: both can
|
|
347
|
-
* contain storage paths and ids outside the caller's grant.
|
|
348
|
-
*/
|
|
349
|
-
export declare function classifyBackendFailure(error: unknown): SafeFailure;
|
|
350
|
-
/** Build the `unavailable` DTO for a backend or missing-service failure. */
|
|
351
|
-
export declare function unavailableResult(input: {
|
|
352
|
-
readonly callerSessionId: string | null;
|
|
353
|
-
readonly requestedSessionId: string | null;
|
|
354
|
-
readonly scope: HistoryScope;
|
|
355
|
-
readonly failure: SafeFailure;
|
|
356
|
-
readonly notes?: readonly string[];
|
|
357
|
-
}): Extract<HistoryResult, {
|
|
358
|
-
kind: "unavailable";
|
|
359
|
-
}>;
|
|
360
|
-
/** The failure used when the row has no `sessionQuery` service at all. */
|
|
361
|
-
export declare const MISSING_SESSION_QUERY: SafeFailure;
|
|
362
|
-
/** Build the `denied` DTO for an authorization rejection. */
|
|
363
|
-
export declare function deniedResult(input: {
|
|
364
|
-
readonly callerSessionId: string | null;
|
|
365
|
-
readonly requestedSessionId: string | null;
|
|
366
|
-
readonly scope: HistoryScope;
|
|
367
|
-
readonly code: string;
|
|
368
|
-
readonly message: string;
|
|
369
|
-
}): Extract<HistoryResult, {
|
|
370
|
-
kind: "denied";
|
|
371
|
-
}>;
|
|
372
|
-
/** Build the catalog-only DTO for `scope: "children"` without a target. */
|
|
373
|
-
export declare function childrenResult(input: {
|
|
374
|
-
readonly callerSessionId: string;
|
|
375
|
-
readonly relations: HistoryRelationsView;
|
|
376
|
-
}): Extract<HistoryResult, {
|
|
377
|
-
kind: "children";
|
|
378
|
-
}>;
|
|
379
|
-
/** Render one result as text. Every field is present so an auditor sees the basis. */
|
|
380
|
-
export declare function renderHistoryResult(result: HistoryResult): string;
|
|
381
|
-
/** The declared shape of one result. Kept next to the assembler it describes. */
|
|
382
|
-
export declare const OUTPUT_SCHEMA: JsonSchemaNode;
|
|
383
|
-
export declare const TOOL_DESCRIPTION: string;
|
|
384
|
-
/**
|
|
385
|
-
* The service slices this row reads.
|
|
386
|
-
*
|
|
387
|
-
* `sessionQuery` is deliberately absent: it is not injected, so a typed field for it
|
|
388
|
-
* would tell callers they may pass it while `apply` never reads it. It is fetched by
|
|
389
|
-
* name on each call instead.
|
|
390
|
-
*/
|
|
391
|
-
export interface PstackHistoryHost {
|
|
392
|
-
readonly tools: ToolsHost;
|
|
393
|
-
readonly subagents: SubagentCatalogHost;
|
|
394
|
-
}
|
|
395
|
-
/** What one execute reads. Injected so tests can drive each layer apart. */
|
|
396
|
-
export interface HistoryRuntime {
|
|
397
|
-
readonly subagents: SubagentCatalogHost;
|
|
398
|
-
/** Read per call so a service that arrives or leaves is observed. */
|
|
399
|
-
getSessionQuery(): SessionQueryHost | undefined;
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Read one authorized page.
|
|
403
|
-
*
|
|
404
|
-
* Order matters and is deliberate: the caller is resolved from the execution
|
|
405
|
-
* context, the target is authorized against the catalog, the log is observed,
|
|
406
|
-
* the returned header is authorized again, and only then is a DTO built. The
|
|
407
|
-
* lease is released in `finally` on every path, including a throw from the
|
|
408
|
-
* slicer or the renderer.
|
|
409
|
-
*/
|
|
410
|
-
export declare function readHistory(args: HistoryArgs, exec: ToolRunContext, runtime: HistoryRuntime): Promise<HistoryResult>;
|
|
411
|
-
/** Build the tool for one row. */
|
|
412
|
-
export declare function createHistoryTool(runtime: HistoryRuntime): ToolDefinition;
|
|
413
|
-
/**
|
|
414
|
-
* Register `pstack_history` for this row.
|
|
415
|
-
*
|
|
416
|
-
* `sessionQuery` is read through `ctx.get(...)` on every call rather than injected, so
|
|
417
|
-
* a profile without it still gets the tool and a call returns `unavailable` instead of
|
|
418
|
-
* the tool vanishing. That also makes a later `dispose()` of the service observable:
|
|
419
|
-
* the next call reports the missing layer rather than an empty log.
|
|
420
|
-
*
|
|
421
|
-
* @param ctx - context providing the tool registry, the child catalog, and optionally
|
|
422
|
-
* the query service.
|
|
423
|
-
*/
|
|
424
|
-
export declare function apply(ctx: PstackHistoryHost & {
|
|
425
|
-
get?: (name: string) => SessionQueryHost | undefined;
|
|
426
|
-
}): void;
|
|
427
|
-
//#endregion
|
|
428
|
-
export {};
|
|
429
|
-
//# sourceMappingURL=history.d.mts.map
|