@jitsusama/agentic-harness.core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/advisor/charter.d.ts +14 -0
- package/dist/advisor/charter.js +48 -0
- package/dist/advisor/findings.d.ts +43 -0
- package/dist/advisor/findings.js +82 -0
- package/dist/advisor/index.d.ts +24 -0
- package/dist/advisor/index.js +23 -0
- package/dist/advisor/settings.d.ts +16 -0
- package/dist/advisor/settings.js +30 -0
- package/dist/advisor/substantive.d.ts +14 -0
- package/dist/advisor/substantive.js +33 -0
- package/dist/advisor/tools.d.ts +38 -0
- package/dist/advisor/tools.js +202 -0
- package/dist/attribution/commit-hook.d.ts +53 -0
- package/dist/attribution/commit-hook.js +133 -0
- package/dist/attribution/gh-footer.d.ts +27 -0
- package/dist/attribution/gh-footer.js +80 -0
- package/dist/attribution/index.d.ts +11 -0
- package/dist/attribution/index.js +11 -0
- package/dist/attribution/model-name.d.ts +11 -0
- package/dist/attribution/model-name.js +26 -0
- package/dist/bin/attribution.d.ts +36 -0
- package/dist/bin/attribution.js +82 -0
- package/dist/bin/cli.d.ts +14 -0
- package/dist/bin/cli.js +236 -0
- package/dist/bin/gate-deps.d.ts +23 -0
- package/dist/bin/gate-deps.js +61 -0
- package/dist/bin/guardians.d.ts +51 -0
- package/dist/bin/guardians.js +174 -0
- package/dist/bin/memory.d.ts +16 -0
- package/dist/bin/memory.js +81 -0
- package/dist/bin/notes.d.ts +30 -0
- package/dist/bin/notes.js +67 -0
- package/dist/bin/process-exec.d.ts +14 -0
- package/dist/bin/process-exec.js +31 -0
- package/dist/bin/quest.d.ts +38 -0
- package/dist/bin/quest.js +187 -0
- package/dist/bin/slack-auth.d.ts +49 -0
- package/dist/bin/slack-auth.js +107 -0
- package/dist/clock/index.d.ts +46 -0
- package/dist/clock/index.js +72 -0
- package/dist/command/cwd.d.ts +21 -0
- package/dist/command/cwd.js +60 -0
- package/dist/command/edit.d.ts +14 -0
- package/dist/command/edit.js +22 -0
- package/dist/command/flags.d.ts +29 -0
- package/dist/command/flags.js +111 -0
- package/dist/command/index.d.ts +16 -0
- package/dist/command/index.js +12 -0
- package/dist/command/tokenize.d.ts +7 -0
- package/dist/command/tokenize.js +315 -0
- package/dist/command/types.d.ts +66 -0
- package/dist/command/types.js +9 -0
- package/dist/completion/index.d.ts +17 -0
- package/dist/completion/index.js +16 -0
- package/dist/completion/investigate.d.ts +63 -0
- package/dist/completion/investigate.js +198 -0
- package/dist/completion/resolve.d.ts +29 -0
- package/dist/completion/resolve.js +42 -0
- package/dist/completion/side.d.ts +51 -0
- package/dist/completion/side.js +93 -0
- package/dist/completion/types.d.ts +84 -0
- package/dist/completion/types.js +14 -0
- package/dist/exec/exec.d.ts +38 -0
- package/dist/exec/exec.js +51 -0
- package/dist/exec/index.d.ts +8 -0
- package/dist/exec/index.js +8 -0
- package/dist/gate/decision.d.ts +52 -0
- package/dist/gate/decision.js +68 -0
- package/dist/gate/deps.d.ts +14 -0
- package/dist/gate/deps.js +1 -0
- package/dist/gate/index.d.ts +2 -0
- package/dist/gate/index.js +1 -0
- package/dist/git-cli/index.d.ts +47 -0
- package/dist/git-cli/index.js +127 -0
- package/dist/github-cli/command-spec.d.ts +14 -0
- package/dist/github-cli/command-spec.js +18 -0
- package/dist/github-cli/index.d.ts +71 -0
- package/dist/github-cli/index.js +188 -0
- package/dist/google/apis/calendar.d.ts +64 -0
- package/dist/google/apis/calendar.js +297 -0
- package/dist/google/apis/docs.d.ts +29 -0
- package/dist/google/apis/docs.js +154 -0
- package/dist/google/apis/drive.d.ts +46 -0
- package/dist/google/apis/drive.js +189 -0
- package/dist/google/apis/gmail.d.ts +67 -0
- package/dist/google/apis/gmail.js +374 -0
- package/dist/google/apis/index.d.ts +10 -0
- package/dist/google/apis/index.js +10 -0
- package/dist/google/apis/sheets.d.ts +16 -0
- package/dist/google/apis/sheets.js +54 -0
- package/dist/google/apis/slides.d.ts +16 -0
- package/dist/google/apis/slides.js +40 -0
- package/dist/google/auth/browser.d.ts +5 -0
- package/dist/google/auth/browser.js +27 -0
- package/dist/google/auth/credentials.d.ts +26 -0
- package/dist/google/auth/credentials.js +69 -0
- package/dist/google/auth/errors.d.ts +15 -0
- package/dist/google/auth/errors.js +26 -0
- package/dist/google/auth/index.d.ts +12 -0
- package/dist/google/auth/index.js +12 -0
- package/dist/google/auth/oauth-app.d.ts +15 -0
- package/dist/google/auth/oauth-app.js +20 -0
- package/dist/google/auth/oauth.d.ts +46 -0
- package/dist/google/auth/oauth.js +146 -0
- package/dist/google/auth/server.d.ts +13 -0
- package/dist/google/auth/server.js +70 -0
- package/dist/google/auth/setup-instructions.d.ts +16 -0
- package/dist/google/auth/setup-instructions.js +24 -0
- package/dist/google/auth/store.d.ts +19 -0
- package/dist/google/auth/store.js +27 -0
- package/dist/google/index.d.ts +13 -0
- package/dist/google/index.js +12 -0
- package/dist/google/paths.d.ts +17 -0
- package/dist/google/paths.js +28 -0
- package/dist/google/renderers/calendar.d.ts +23 -0
- package/dist/google/renderers/calendar.js +312 -0
- package/dist/google/renderers/drive.d.ts +31 -0
- package/dist/google/renderers/drive.js +214 -0
- package/dist/google/renderers/email.d.ts +16 -0
- package/dist/google/renderers/email.js +130 -0
- package/dist/google/renderers/index.d.ts +8 -0
- package/dist/google/renderers/index.js +8 -0
- package/dist/google/types.d.ts +143 -0
- package/dist/google/types.js +27 -0
- package/dist/governance/distill.d.ts +31 -0
- package/dist/governance/distill.js +78 -0
- package/dist/governance/index.d.ts +11 -0
- package/dist/governance/index.js +10 -0
- package/dist/governance/render.d.ts +13 -0
- package/dist/governance/render.js +23 -0
- package/dist/governance/store.d.ts +32 -0
- package/dist/governance/store.js +102 -0
- package/dist/governance/types.d.ts +19 -0
- package/dist/governance/types.js +9 -0
- package/dist/guardian/index.d.ts +7 -0
- package/dist/guardian/index.js +7 -0
- package/dist/guardian/types.d.ts +37 -0
- package/dist/guardian/types.js +12 -0
- package/dist/internal/github/cli.d.ts +40 -0
- package/dist/internal/github/cli.js +102 -0
- package/dist/internal/guardian/commit-file.d.ts +7 -0
- package/dist/internal/guardian/commit-file.js +36 -0
- package/dist/internal/guardian/commit-format.d.ts +35 -0
- package/dist/internal/guardian/commit-format.js +63 -0
- package/dist/internal/guardian/commit-shell.d.ts +38 -0
- package/dist/internal/guardian/commit-shell.js +134 -0
- package/dist/internal/guardian/history-gate.d.ts +41 -0
- package/dist/internal/guardian/history-gate.js +76 -0
- package/dist/internal/guardian/prose-gate.d.ts +31 -0
- package/dist/internal/guardian/prose-gate.js +50 -0
- package/dist/internal/guardian/redirect-gate.d.ts +41 -0
- package/dist/internal/guardian/redirect-gate.js +114 -0
- package/dist/internal/guardian/section-gate.d.ts +20 -0
- package/dist/internal/guardian/section-gate.js +36 -0
- package/dist/internal/guardian/title-gate.d.ts +20 -0
- package/dist/internal/guardian/title-gate.js +36 -0
- package/dist/internal/json-array.d.ts +11 -0
- package/dist/internal/json-array.js +40 -0
- package/dist/internal/lsp/registry.d.ts +12 -0
- package/dist/internal/lsp/registry.js +16 -0
- package/dist/internal/notes/discovery.d.ts +59 -0
- package/dist/internal/notes/discovery.js +91 -0
- package/dist/internal/notes/frontmatter.d.ts +52 -0
- package/dist/internal/notes/frontmatter.js +163 -0
- package/dist/internal/notes/id.d.ts +42 -0
- package/dist/internal/notes/id.js +80 -0
- package/dist/internal/notes/io.d.ts +25 -0
- package/dist/internal/notes/io.js +51 -0
- package/dist/internal/notes/sanitize.d.ts +19 -0
- package/dist/internal/notes/sanitize.js +35 -0
- package/dist/internal/process-global.d.ts +20 -0
- package/dist/internal/process-global.js +28 -0
- package/dist/internal/quest/alias-index.d.ts +61 -0
- package/dist/internal/quest/alias-index.js +69 -0
- package/dist/internal/quest/append-journey.d.ts +22 -0
- package/dist/internal/quest/append-journey.js +63 -0
- package/dist/internal/quest/bash-write.d.ts +49 -0
- package/dist/internal/quest/bash-write.js +208 -0
- package/dist/internal/quest/dates.d.ts +14 -0
- package/dist/internal/quest/dates.js +20 -0
- package/dist/internal/quest/discovery.d.ts +96 -0
- package/dist/internal/quest/discovery.js +354 -0
- package/dist/internal/quest/fields.d.ts +37 -0
- package/dist/internal/quest/fields.js +94 -0
- package/dist/internal/quest/frontmatter.d.ts +88 -0
- package/dist/internal/quest/frontmatter.js +630 -0
- package/dist/internal/quest/git-signals.d.ts +53 -0
- package/dist/internal/quest/git-signals.js +192 -0
- package/dist/internal/quest/id.d.ts +50 -0
- package/dist/internal/quest/id.js +116 -0
- package/dist/internal/quest/io.d.ts +54 -0
- package/dist/internal/quest/io.js +233 -0
- package/dist/internal/quest/mentions.d.ts +45 -0
- package/dist/internal/quest/mentions.js +70 -0
- package/dist/internal/quest/mutate.d.ts +38 -0
- package/dist/internal/quest/mutate.js +83 -0
- package/dist/internal/quest/process-liveness.d.ts +98 -0
- package/dist/internal/quest/process-liveness.js +216 -0
- package/dist/internal/quest/quest-doc.d.ts +116 -0
- package/dist/internal/quest/quest-doc.js +239 -0
- package/dist/internal/quest/ranking.d.ts +48 -0
- package/dist/internal/quest/ranking.js +114 -0
- package/dist/internal/quest/reopen.d.ts +65 -0
- package/dist/internal/quest/reopen.js +113 -0
- package/dist/internal/quest/resolve-cwd.d.ts +32 -0
- package/dist/internal/quest/resolve-cwd.js +89 -0
- package/dist/internal/quest/sanitize.d.ts +42 -0
- package/dist/internal/quest/sanitize.js +69 -0
- package/dist/internal/quest/scaffold.d.ts +59 -0
- package/dist/internal/quest/scaffold.js +169 -0
- package/dist/internal/quest/scratch.d.ts +27 -0
- package/dist/internal/quest/scratch.js +106 -0
- package/dist/internal/quest/session-liveness.d.ts +125 -0
- package/dist/internal/quest/session-liveness.js +386 -0
- package/dist/internal/quest/session-ownership.d.ts +22 -0
- package/dist/internal/quest/session-ownership.js +100 -0
- package/dist/internal/quest/session-registry.d.ts +221 -0
- package/dist/internal/quest/session-registry.js +266 -0
- package/dist/internal/quest/status.d.ts +10 -0
- package/dist/internal/quest/status.js +15 -0
- package/dist/internal/quest/structural-journal.d.ts +41 -0
- package/dist/internal/quest/structural-journal.js +67 -0
- package/dist/internal/quest/structural.d.ts +43 -0
- package/dist/internal/quest/structural.js +77 -0
- package/dist/internal/quest/toc.d.ts +28 -0
- package/dist/internal/quest/toc.js +90 -0
- package/dist/internal/quest/trees.d.ts +53 -0
- package/dist/internal/quest/trees.js +145 -0
- package/dist/internal/quest/url-fetchers.d.ts +50 -0
- package/dist/internal/quest/url-fetchers.js +97 -0
- package/dist/internal/quest/write-classifier.d.ts +46 -0
- package/dist/internal/quest/write-classifier.js +59 -0
- package/dist/internal/refs/builtins.d.ts +32 -0
- package/dist/internal/refs/builtins.js +179 -0
- package/dist/internal/refs/registry.d.ts +25 -0
- package/dist/internal/refs/registry.js +42 -0
- package/dist/internal/registry/global-symbol-registry.d.ts +37 -0
- package/dist/internal/registry/global-symbol-registry.js +55 -0
- package/dist/internal/review/registry.d.ts +12 -0
- package/dist/internal/review/registry.js +16 -0
- package/dist/internal/sqlite/db.d.ts +16 -0
- package/dist/internal/sqlite/db.js +26 -0
- package/dist/internal/terminal/builtins.d.ts +8 -0
- package/dist/internal/terminal/builtins.js +14 -0
- package/dist/internal/terminal/drivers/fallback.d.ts +8 -0
- package/dist/internal/terminal/drivers/fallback.js +31 -0
- package/dist/internal/terminal/drivers/shared.d.ts +39 -0
- package/dist/internal/terminal/drivers/shared.js +51 -0
- package/dist/internal/terminal/drivers/tmux.d.ts +14 -0
- package/dist/internal/terminal/drivers/tmux.js +88 -0
- package/dist/internal/terminal/drivers/wezterm.d.ts +35 -0
- package/dist/internal/terminal/drivers/wezterm.js +175 -0
- package/dist/internal/terminal/registry.d.ts +12 -0
- package/dist/internal/terminal/registry.js +16 -0
- package/dist/internal/tree/builtins.d.ts +8 -0
- package/dist/internal/tree/builtins.js +10 -0
- package/dist/internal/tree/providers/git-worktree.d.ts +20 -0
- package/dist/internal/tree/providers/git-worktree.js +279 -0
- package/dist/internal/tree/registry.d.ts +12 -0
- package/dist/internal/tree/registry.js +16 -0
- package/dist/lsp/config.d.ts +77 -0
- package/dist/lsp/config.js +154 -0
- package/dist/lsp/external.d.ts +13 -0
- package/dist/lsp/external.js +52 -0
- package/dist/lsp/format.d.ts +11 -0
- package/dist/lsp/format.js +54 -0
- package/dist/lsp/index.d.ts +17 -0
- package/dist/lsp/index.js +16 -0
- package/dist/lsp/offsets.d.ts +22 -0
- package/dist/lsp/offsets.js +51 -0
- package/dist/lsp/registry.d.ts +28 -0
- package/dist/lsp/registry.js +45 -0
- package/dist/lsp/standalone/backend.d.ts +42 -0
- package/dist/lsp/standalone/backend.js +150 -0
- package/dist/lsp/standalone/document.d.ts +45 -0
- package/dist/lsp/standalone/document.js +81 -0
- package/dist/lsp/standalone/server.d.ts +84 -0
- package/dist/lsp/standalone/server.js +521 -0
- package/dist/lsp/types.d.ts +119 -0
- package/dist/lsp/types.js +13 -0
- package/dist/memory/db.d.ts +15 -0
- package/dist/memory/db.js +25 -0
- package/dist/memory/index.d.ts +12 -0
- package/dist/memory/index.js +11 -0
- package/dist/memory/paths.d.ts +19 -0
- package/dist/memory/paths.js +33 -0
- package/dist/memory/scope.d.ts +14 -0
- package/dist/memory/scope.js +22 -0
- package/dist/memory/store.d.ts +12 -0
- package/dist/memory/store.js +146 -0
- package/dist/memory/types.d.ts +80 -0
- package/dist/memory/types.js +6 -0
- package/dist/notes/types.d.ts +50 -0
- package/dist/notes/types.js +23 -0
- package/dist/notes/verbs/create.d.ts +5 -0
- package/dist/notes/verbs/create.js +55 -0
- package/dist/notes/verbs/mutate.d.ts +8 -0
- package/dist/notes/verbs/mutate.js +152 -0
- package/dist/notes/verbs/queries.d.ts +15 -0
- package/dist/notes/verbs/queries.js +116 -0
- package/dist/notes/verbs/reindex.d.ts +12 -0
- package/dist/notes/verbs/reindex.js +35 -0
- package/dist/notes/verbs/shared.d.ts +37 -0
- package/dist/notes/verbs/shared.js +29 -0
- package/dist/observability/index.d.ts +13 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/recorder.d.ts +50 -0
- package/dist/observability/recorder.js +77 -0
- package/dist/observability/store.d.ts +22 -0
- package/dist/observability/store.js +213 -0
- package/dist/observability/types.d.ts +82 -0
- package/dist/observability/types.js +1 -0
- package/dist/process/index.d.ts +9 -0
- package/dist/process/index.js +9 -0
- package/dist/process/process.d.ts +95 -0
- package/dist/process/process.js +153 -0
- package/dist/prose/block.d.ts +9 -0
- package/dist/prose/block.js +43 -0
- package/dist/prose/detect.d.ts +50 -0
- package/dist/prose/detect.js +217 -0
- package/dist/prose/gate.d.ts +14 -0
- package/dist/prose/gate.js +21 -0
- package/dist/prose/index.d.ts +4 -0
- package/dist/prose/index.js +4 -0
- package/dist/prose/wrap.d.ts +9 -0
- package/dist/prose/wrap.js +47 -0
- package/dist/quest/actions.d.ts +20 -0
- package/dist/quest/actions.js +107 -0
- package/dist/quest/config.d.ts +79 -0
- package/dist/quest/config.js +83 -0
- package/dist/quest/index.d.ts +29 -0
- package/dist/quest/index.js +28 -0
- package/dist/quest/lifecycle.d.ts +365 -0
- package/dist/quest/lifecycle.js +900 -0
- package/dist/quest/lookup.d.ts +243 -0
- package/dist/quest/lookup.js +496 -0
- package/dist/quest/machine.d.ts +48 -0
- package/dist/quest/machine.js +96 -0
- package/dist/quest/render-rows.d.ts +166 -0
- package/dist/quest/render-rows.js +214 -0
- package/dist/quest/state.d.ts +111 -0
- package/dist/quest/state.js +46 -0
- package/dist/quest/types.d.ts +224 -0
- package/dist/quest/types.js +10 -0
- package/dist/quest/verbs/alias.d.ts +9 -0
- package/dist/quest/verbs/alias.js +129 -0
- package/dist/quest/verbs/lifecycle.d.ts +36 -0
- package/dist/quest/verbs/lifecycle.js +407 -0
- package/dist/quest/verbs/queries.d.ts +24 -0
- package/dist/quest/verbs/queries.js +241 -0
- package/dist/quest/verbs/reorder.d.ts +15 -0
- package/dist/quest/verbs/reorder.js +85 -0
- package/dist/quest/verbs/shared.d.ts +63 -0
- package/dist/quest/verbs/shared.js +35 -0
- package/dist/quest/verbs/stage.d.ts +39 -0
- package/dist/quest/verbs/stage.js +506 -0
- package/dist/quest/verbs/structural.d.ts +23 -0
- package/dist/quest/verbs/structural.js +310 -0
- package/dist/quest/verbs/tree-ops.d.ts +20 -0
- package/dist/quest/verbs/tree-ops.js +289 -0
- package/dist/refs/index.d.ts +13 -0
- package/dist/refs/index.js +12 -0
- package/dist/refs/lookup.d.ts +53 -0
- package/dist/refs/lookup.js +102 -0
- package/dist/refs/register.d.ts +34 -0
- package/dist/refs/register.js +44 -0
- package/dist/refs/types.d.ts +81 -0
- package/dist/refs/types.js +17 -0
- package/dist/remote/index.d.ts +9 -0
- package/dist/remote/index.js +9 -0
- package/dist/remote/name.d.ts +22 -0
- package/dist/remote/name.js +30 -0
- package/dist/result/cite.d.ts +84 -0
- package/dist/result/cite.js +127 -0
- package/dist/result/counts.d.ts +15 -0
- package/dist/result/counts.js +17 -0
- package/dist/result/details.d.ts +61 -0
- package/dist/result/details.js +121 -0
- package/dist/result/digest.d.ts +37 -0
- package/dist/result/digest.js +227 -0
- package/dist/result/follow.d.ts +29 -0
- package/dist/result/follow.js +37 -0
- package/dist/result/index.d.ts +26 -0
- package/dist/result/index.js +26 -0
- package/dist/result/listing.d.ts +62 -0
- package/dist/result/listing.js +72 -0
- package/dist/result/location.d.ts +67 -0
- package/dist/result/location.js +125 -0
- package/dist/result/query.d.ts +67 -0
- package/dist/result/query.js +144 -0
- package/dist/result/spill.d.ts +41 -0
- package/dist/result/spill.js +121 -0
- package/dist/result/store.d.ts +83 -0
- package/dist/result/store.js +214 -0
- package/dist/result/view.d.ts +31 -0
- package/dist/result/view.js +38 -0
- package/dist/review/anchor.d.ts +84 -0
- package/dist/review/anchor.js +89 -0
- package/dist/review/ask/agents.d.ts +80 -0
- package/dist/review/ask/agents.js +296 -0
- package/dist/review/ask/anchorable.d.ts +35 -0
- package/dist/review/ask/anchorable.js +76 -0
- package/dist/review/ask/answer.d.ts +54 -0
- package/dist/review/ask/answer.js +209 -0
- package/dist/review/ask/audit.d.ts +71 -0
- package/dist/review/ask/audit.js +158 -0
- package/dist/review/ask/collect.d.ts +41 -0
- package/dist/review/ask/collect.js +82 -0
- package/dist/review/ask/council.d.ts +290 -0
- package/dist/review/ask/council.js +386 -0
- package/dist/review/ask/critique.d.ts +69 -0
- package/dist/review/ask/critique.js +157 -0
- package/dist/review/ask/harvest.d.ts +119 -0
- package/dist/review/ask/harvest.js +409 -0
- package/dist/review/ask/identity.d.ts +93 -0
- package/dist/review/ask/identity.js +134 -0
- package/dist/review/ask/judge.d.ts +37 -0
- package/dist/review/ask/judge.js +140 -0
- package/dist/review/ask/persona.d.ts +84 -0
- package/dist/review/ask/persona.js +127 -0
- package/dist/review/ask/progress.d.ts +117 -0
- package/dist/review/ask/progress.js +137 -0
- package/dist/review/ask/prompt.d.ts +131 -0
- package/dist/review/ask/prompt.js +242 -0
- package/dist/review/ask/roster.d.ts +94 -0
- package/dist/review/ask/roster.js +338 -0
- package/dist/review/ask/run.d.ts +435 -0
- package/dist/review/ask/run.js +340 -0
- package/dist/review/ask/span.d.ts +70 -0
- package/dist/review/ask/span.js +166 -0
- package/dist/review/ask/stack-round.d.ts +66 -0
- package/dist/review/ask/stack-round.js +125 -0
- package/dist/review/ask/start.d.ts +48 -0
- package/dist/review/ask/start.js +118 -0
- package/dist/review/ask/store.d.ts +83 -0
- package/dist/review/ask/store.js +226 -0
- package/dist/review/ask/wire.d.ts +89 -0
- package/dist/review/ask/wire.js +204 -0
- package/dist/review/attach.d.ts +161 -0
- package/dist/review/attach.js +357 -0
- package/dist/review/authoring.d.ts +84 -0
- package/dist/review/authoring.js +203 -0
- package/dist/review/backed.d.ts +90 -0
- package/dist/review/backed.js +168 -0
- package/dist/review/bind.d.ts +75 -0
- package/dist/review/bind.js +223 -0
- package/dist/review/budget.d.ts +133 -0
- package/dist/review/budget.js +278 -0
- package/dist/review/capabilities.d.ts +217 -0
- package/dist/review/capabilities.js +46 -0
- package/dist/review/change.d.ts +155 -0
- package/dist/review/change.js +15 -0
- package/dist/review/checks.d.ts +56 -0
- package/dist/review/checks.js +11 -0
- package/dist/review/config.d.ts +71 -0
- package/dist/review/config.js +125 -0
- package/dist/review/conventions.d.ts +35 -0
- package/dist/review/conventions.js +58 -0
- package/dist/review/conversation.d.ts +98 -0
- package/dist/review/conversation.js +16 -0
- package/dist/review/decided.d.ts +58 -0
- package/dist/review/decided.js +67 -0
- package/dist/review/diff.d.ts +116 -0
- package/dist/review/diff.js +237 -0
- package/dist/review/draft/continuation.d.ts +23 -0
- package/dist/review/draft/continuation.js +32 -0
- package/dist/review/draft/fanout.d.ts +57 -0
- package/dist/review/draft/fanout.js +46 -0
- package/dist/review/draft/handle.d.ts +55 -0
- package/dist/review/draft/handle.js +110 -0
- package/dist/review/draft/plan.d.ts +112 -0
- package/dist/review/draft/plan.js +343 -0
- package/dist/review/draft/publish.d.ts +38 -0
- package/dist/review/draft/publish.js +118 -0
- package/dist/review/draft/render.d.ts +32 -0
- package/dist/review/draft/render.js +100 -0
- package/dist/review/draft/state.d.ts +98 -0
- package/dist/review/draft/state.js +83 -0
- package/dist/review/draft/store.d.ts +33 -0
- package/dist/review/draft/store.js +100 -0
- package/dist/review/elsewhere.d.ts +27 -0
- package/dist/review/elsewhere.js +39 -0
- package/dist/review/engine.d.ts +106 -0
- package/dist/review/engine.js +243 -0
- package/dist/review/events.d.ts +59 -0
- package/dist/review/events.js +35 -0
- package/dist/review/failed.d.ts +46 -0
- package/dist/review/failed.js +56 -0
- package/dist/review/finding.d.ts +81 -0
- package/dist/review/finding.js +85 -0
- package/dist/review/fix.d.ts +147 -0
- package/dist/review/fix.js +175 -0
- package/dist/review/followup.d.ts +84 -0
- package/dist/review/followup.js +123 -0
- package/dist/review/index.d.ts +134 -0
- package/dist/review/index.js +80 -0
- package/dist/review/keys.d.ts +23 -0
- package/dist/review/keys.js +40 -0
- package/dist/review/landing.d.ts +37 -0
- package/dist/review/landing.js +68 -0
- package/dist/review/lenses.d.ts +132 -0
- package/dist/review/lenses.js +430 -0
- package/dist/review/propose-from.d.ts +76 -0
- package/dist/review/propose-from.js +86 -0
- package/dist/review/provider.d.ts +306 -0
- package/dist/review/provider.js +16 -0
- package/dist/review/providers/git/index.d.ts +23 -0
- package/dist/review/providers/git/index.js +214 -0
- package/dist/review/providers/github/authoring.d.ts +22 -0
- package/dist/review/providers/github/authoring.js +350 -0
- package/dist/review/providers/github/claims.d.ts +49 -0
- package/dist/review/providers/github/claims.js +136 -0
- package/dist/review/providers/github/conversation.d.ts +18 -0
- package/dist/review/providers/github/conversation.js +455 -0
- package/dist/review/providers/github/fields.d.ts +30 -0
- package/dist/review/providers/github/fields.js +47 -0
- package/dist/review/providers/github/index.d.ts +15 -0
- package/dist/review/providers/github/index.js +110 -0
- package/dist/review/providers/github/proposals.d.ts +14 -0
- package/dist/review/providers/github/proposals.js +298 -0
- package/dist/review/providers/github/queue.d.ts +46 -0
- package/dist/review/providers/github/queue.js +122 -0
- package/dist/review/providers/github/stacking.d.ts +20 -0
- package/dist/review/providers/github/stacking.js +107 -0
- package/dist/review/queue.d.ts +43 -0
- package/dist/review/queue.js +56 -0
- package/dist/review/reactable.d.ts +93 -0
- package/dist/review/reactable.js +140 -0
- package/dist/review/register.d.ts +52 -0
- package/dist/review/register.js +53 -0
- package/dist/review/resolve.d.ts +58 -0
- package/dist/review/resolve.js +150 -0
- package/dist/review/retarget.d.ts +73 -0
- package/dist/review/retarget.js +82 -0
- package/dist/review/revisited.d.ts +77 -0
- package/dist/review/revisited.js +121 -0
- package/dist/review/stack.d.ts +110 -0
- package/dist/review/stack.js +52 -0
- package/dist/sections/block.d.ts +9 -0
- package/dist/sections/block.js +42 -0
- package/dist/sections/detect.d.ts +31 -0
- package/dist/sections/detect.js +67 -0
- package/dist/sections/gate.d.ts +21 -0
- package/dist/sections/gate.js +22 -0
- package/dist/sections/index.d.ts +5 -0
- package/dist/sections/index.js +5 -0
- package/dist/sections/sanctioned.d.ts +13 -0
- package/dist/sections/sanctioned.js +21 -0
- package/dist/shell/index.d.ts +8 -0
- package/dist/shell/index.js +8 -0
- package/dist/shell/parse.d.ts +125 -0
- package/dist/shell/parse.js +298 -0
- package/dist/slack/api/channels.d.ts +12 -0
- package/dist/slack/api/channels.js +28 -0
- package/dist/slack/api/client.d.ts +94 -0
- package/dist/slack/api/client.js +272 -0
- package/dist/slack/api/files.d.ts +95 -0
- package/dist/slack/api/files.js +223 -0
- package/dist/slack/api/index.d.ts +11 -0
- package/dist/slack/api/index.js +11 -0
- package/dist/slack/api/messages.d.ts +98 -0
- package/dist/slack/api/messages.js +292 -0
- package/dist/slack/api/reactions.d.ts +47 -0
- package/dist/slack/api/reactions.js +50 -0
- package/dist/slack/api/resolve-conversations.d.ts +43 -0
- package/dist/slack/api/resolve-conversations.js +130 -0
- package/dist/slack/api/resolve-messages.d.ts +29 -0
- package/dist/slack/api/resolve-messages.js +93 -0
- package/dist/slack/api/resolve-users.d.ts +27 -0
- package/dist/slack/api/resolve-users.js +73 -0
- package/dist/slack/api/search.d.ts +86 -0
- package/dist/slack/api/search.js +186 -0
- package/dist/slack/api/users.d.ts +12 -0
- package/dist/slack/api/users.js +33 -0
- package/dist/slack/auth/browser-extract.d.ts +33 -0
- package/dist/slack/auth/browser-extract.js +201 -0
- package/dist/slack/auth/browser.d.ts +5 -0
- package/dist/slack/auth/browser.js +25 -0
- package/dist/slack/auth/credentials.d.ts +14 -0
- package/dist/slack/auth/credentials.js +24 -0
- package/dist/slack/auth/errors.d.ts +9 -0
- package/dist/slack/auth/errors.js +19 -0
- package/dist/slack/auth/extract.d.ts +23 -0
- package/dist/slack/auth/extract.js +44 -0
- package/dist/slack/auth/index.d.ts +12 -0
- package/dist/slack/auth/index.js +11 -0
- package/dist/slack/auth/oauth-app.d.ts +11 -0
- package/dist/slack/auth/oauth-app.js +20 -0
- package/dist/slack/auth/oauth.d.ts +31 -0
- package/dist/slack/auth/oauth.js +82 -0
- package/dist/slack/auth/server.d.ts +14 -0
- package/dist/slack/auth/server.js +75 -0
- package/dist/slack/auth/store.d.ts +17 -0
- package/dist/slack/auth/store.js +27 -0
- package/dist/slack/block-message.d.ts +9 -0
- package/dist/slack/block-message.js +30 -0
- package/dist/slack/blocks.d.ts +94 -0
- package/dist/slack/blocks.js +765 -0
- package/dist/slack/content-gate.d.ts +12 -0
- package/dist/slack/content-gate.js +22 -0
- package/dist/slack/detect.d.ts +31 -0
- package/dist/slack/detect.js +125 -0
- package/dist/slack/index.d.ts +18 -0
- package/dist/slack/index.js +17 -0
- package/dist/slack/paths.d.ts +28 -0
- package/dist/slack/paths.js +46 -0
- package/dist/slack/renderers/channel.d.ts +6 -0
- package/dist/slack/renderers/channel.js +27 -0
- package/dist/slack/renderers/index.d.ts +9 -0
- package/dist/slack/renderers/index.js +9 -0
- package/dist/slack/renderers/message.d.ts +21 -0
- package/dist/slack/renderers/message.js +214 -0
- package/dist/slack/renderers/reactions.d.ts +8 -0
- package/dist/slack/renderers/reactions.js +43 -0
- package/dist/slack/renderers/search.d.ts +6 -0
- package/dist/slack/renderers/search.js +39 -0
- package/dist/slack/renderers/user.d.ts +6 -0
- package/dist/slack/renderers/user.js +32 -0
- package/dist/slack/resolvers/cache.d.ts +29 -0
- package/dist/slack/resolvers/cache.js +70 -0
- package/dist/slack/resolvers/conversation-cache.d.ts +42 -0
- package/dist/slack/resolvers/conversation-cache.js +128 -0
- package/dist/slack/resolvers/conversation.d.ts +44 -0
- package/dist/slack/resolvers/conversation.js +229 -0
- package/dist/slack/resolvers/index.d.ts +8 -0
- package/dist/slack/resolvers/index.js +8 -0
- package/dist/slack/resolvers/target.d.ts +19 -0
- package/dist/slack/resolvers/target.js +45 -0
- package/dist/slack/resolvers/url.d.ts +20 -0
- package/dist/slack/resolvers/url.js +22 -0
- package/dist/slack/resolvers/user.d.ts +54 -0
- package/dist/slack/resolvers/user.js +134 -0
- package/dist/slack/types.d.ts +180 -0
- package/dist/slack/types.js +13 -0
- package/dist/tdd/attest.d.ts +21 -0
- package/dist/tdd/attest.js +21 -0
- package/dist/tdd/discipline.d.ts +11 -0
- package/dist/tdd/discipline.js +28 -0
- package/dist/tdd/index.d.ts +14 -0
- package/dist/tdd/index.js +13 -0
- package/dist/tdd/machine.d.ts +48 -0
- package/dist/tdd/machine.js +139 -0
- package/dist/tdd/presentation.d.ts +34 -0
- package/dist/tdd/presentation.js +38 -0
- package/dist/tdd/queries.d.ts +10 -0
- package/dist/tdd/queries.js +22 -0
- package/dist/terminal/index.d.ts +12 -0
- package/dist/terminal/index.js +11 -0
- package/dist/terminal/register.d.ts +21 -0
- package/dist/terminal/register.js +31 -0
- package/dist/terminal/resolve.d.ts +63 -0
- package/dist/terminal/resolve.js +117 -0
- package/dist/terminal/types.d.ts +134 -0
- package/dist/terminal/types.js +19 -0
- package/dist/thinking/index.d.ts +20 -0
- package/dist/thinking/index.js +27 -0
- package/dist/title/block.d.ts +9 -0
- package/dist/title/block.js +32 -0
- package/dist/title/detect.d.ts +25 -0
- package/dist/title/detect.js +154 -0
- package/dist/title/gate.d.ts +19 -0
- package/dist/title/gate.js +21 -0
- package/dist/title/index.d.ts +3 -0
- package/dist/title/index.js +3 -0
- package/dist/tree/index.d.ts +18 -0
- package/dist/tree/index.js +17 -0
- package/dist/tree/register.d.ts +21 -0
- package/dist/tree/register.js +31 -0
- package/dist/tree/resolve.d.ts +20 -0
- package/dist/tree/resolve.js +31 -0
- package/dist/tree/types.d.ts +83 -0
- package/dist/tree/types.js +12 -0
- package/dist/ui/count.d.ts +29 -0
- package/dist/ui/count.js +35 -0
- package/dist/ui/path.d.ts +25 -0
- package/dist/ui/path.js +40 -0
- package/dist/verify/index.d.ts +17 -0
- package/dist/verify/index.js +14 -0
- package/dist/verify/project.d.ts +21 -0
- package/dist/verify/project.js +49 -0
- package/dist/verify/resolve.d.ts +26 -0
- package/dist/verify/resolve.js +27 -0
- package/dist/verify/run.d.ts +31 -0
- package/dist/verify/run.js +145 -0
- package/dist/web/a11y/announcements.d.ts +67 -0
- package/dist/web/a11y/announcements.js +116 -0
- package/dist/web/a11y/budget.d.ts +75 -0
- package/dist/web/a11y/budget.js +97 -0
- package/dist/web/a11y/focus.d.ts +37 -0
- package/dist/web/a11y/focus.js +106 -0
- package/dist/web/a11y/index.d.ts +19 -0
- package/dist/web/a11y/index.js +25 -0
- package/dist/web/a11y/naming.d.ts +23 -0
- package/dist/web/a11y/naming.js +55 -0
- package/dist/web/a11y/outline.d.ts +23 -0
- package/dist/web/a11y/outline.js +42 -0
- package/dist/web/a11y/reading.d.ts +12 -0
- package/dist/web/a11y/reading.js +101 -0
- package/dist/web/a11y/scope.d.ts +23 -0
- package/dist/web/a11y/scope.js +99 -0
- package/dist/web/a11y/states.d.ts +22 -0
- package/dist/web/a11y/states.js +53 -0
- package/dist/web/a11y/tree.d.ts +124 -0
- package/dist/web/a11y/tree.js +269 -0
- package/dist/web/a11y/walk.d.ts +225 -0
- package/dist/web/a11y/walk.js +568 -0
- package/dist/web/a11y/walkprobe.d.ts +44 -0
- package/dist/web/a11y/walkprobe.js +365 -0
- package/dist/web/audit/axe.d.ts +219 -0
- package/dist/web/audit/axe.js +322 -0
- package/dist/web/audit/behind.d.ts +63 -0
- package/dist/web/audit/behind.js +142 -0
- package/dist/web/audit/capture.d.ts +43 -0
- package/dist/web/audit/capture.js +185 -0
- package/dist/web/audit/colour.d.ts +85 -0
- package/dist/web/audit/colour.js +189 -0
- package/dist/web/audit/contrast.d.ts +74 -0
- package/dist/web/audit/contrast.js +104 -0
- package/dist/web/audit/health.d.ts +27 -0
- package/dist/web/audit/health.js +57 -0
- package/dist/web/audit/index.d.ts +22 -0
- package/dist/web/audit/index.js +22 -0
- package/dist/web/audit/pair.d.ts +55 -0
- package/dist/web/audit/pair.js +157 -0
- package/dist/web/audit/probe.d.ts +31 -0
- package/dist/web/audit/probe.js +189 -0
- package/dist/web/audit/report.d.ts +22 -0
- package/dist/web/audit/report.js +250 -0
- package/dist/web/audit/structure.d.ts +126 -0
- package/dist/web/audit/structure.js +595 -0
- package/dist/web/audit/sweep.d.ts +66 -0
- package/dist/web/audit/sweep.js +117 -0
- package/dist/web/audit/target.d.ts +89 -0
- package/dist/web/audit/target.js +168 -0
- package/dist/web/audit/verdict.d.ts +48 -0
- package/dist/web/audit/verdict.js +52 -0
- package/dist/web/audit/visual.d.ts +161 -0
- package/dist/web/audit/visual.js +297 -0
- package/dist/web/browser.d.ts +213 -0
- package/dist/web/browser.js +927 -0
- package/dist/web/compare/images.d.ts +45 -0
- package/dist/web/compare/images.js +101 -0
- package/dist/web/compare/index.d.ts +15 -0
- package/dist/web/compare/index.js +15 -0
- package/dist/web/compare/provenance.d.ts +48 -0
- package/dist/web/compare/provenance.js +86 -0
- package/dist/web/compare/regions.d.ts +78 -0
- package/dist/web/compare/regions.js +211 -0
- package/dist/web/cookies/extract.d.ts +26 -0
- package/dist/web/cookies/extract.js +167 -0
- package/dist/web/cookies/index.d.ts +8 -0
- package/dist/web/cookies/index.js +7 -0
- package/dist/web/cookies/inject.d.ts +13 -0
- package/dist/web/cookies/inject.js +27 -0
- package/dist/web/cookies/setup.d.ts +31 -0
- package/dist/web/cookies/setup.js +94 -0
- package/dist/web/design/index.d.ts +9 -0
- package/dist/web/design/index.js +9 -0
- package/dist/web/design/inventory.d.ts +126 -0
- package/dist/web/design/inventory.js +324 -0
- package/dist/web/design/probe.d.ts +24 -0
- package/dist/web/design/probe.js +88 -0
- package/dist/web/element/actionable.d.ts +34 -0
- package/dist/web/element/actionable.js +48 -0
- package/dist/web/element/animations.d.ts +48 -0
- package/dist/web/element/animations.js +74 -0
- package/dist/web/element/box.d.ts +53 -0
- package/dist/web/element/box.js +58 -0
- package/dist/web/element/hover.d.ts +75 -0
- package/dist/web/element/hover.js +172 -0
- package/dist/web/element/index.d.ts +17 -0
- package/dist/web/element/index.js +17 -0
- package/dist/web/element/listeners.d.ts +72 -0
- package/dist/web/element/listeners.js +98 -0
- package/dist/web/element/measure.d.ts +40 -0
- package/dist/web/element/measure.js +118 -0
- package/dist/web/element/probes.d.ts +108 -0
- package/dist/web/element/probes.js +195 -0
- package/dist/web/element/pseudo.d.ts +51 -0
- package/dist/web/element/pseudo.js +96 -0
- package/dist/web/element/view.d.ts +30 -0
- package/dist/web/element/view.js +117 -0
- package/dist/web/element/visibility.d.ts +42 -0
- package/dist/web/element/visibility.js +67 -0
- package/dist/web/envelope/artifacts.d.ts +23 -0
- package/dist/web/envelope/artifacts.js +45 -0
- package/dist/web/envelope/index.d.ts +9 -0
- package/dist/web/envelope/index.js +9 -0
- package/dist/web/envelope/naming.d.ts +23 -0
- package/dist/web/envelope/naming.js +43 -0
- package/dist/web/envelope/paged.d.ts +42 -0
- package/dist/web/envelope/paged.js +99 -0
- package/dist/web/envelope/sink.d.ts +43 -0
- package/dist/web/envelope/sink.js +67 -0
- package/dist/web/environment/devices.d.ts +65 -0
- package/dist/web/environment/devices.js +82 -0
- package/dist/web/environment/emulation.d.ts +124 -0
- package/dist/web/environment/emulation.js +258 -0
- package/dist/web/environment/index.d.ts +15 -0
- package/dist/web/environment/index.js +15 -0
- package/dist/web/environment/probes.d.ts +18 -0
- package/dist/web/environment/probes.js +40 -0
- package/dist/web/environment/shaping.d.ts +90 -0
- package/dist/web/environment/shaping.js +141 -0
- package/dist/web/environment/status.d.ts +51 -0
- package/dist/web/environment/status.js +109 -0
- package/dist/web/environment/storage.d.ts +55 -0
- package/dist/web/environment/storage.js +142 -0
- package/dist/web/environment/tabs.d.ts +32 -0
- package/dist/web/environment/tabs.js +47 -0
- package/dist/web/environment/view.d.ts +10 -0
- package/dist/web/environment/view.js +42 -0
- package/dist/web/evaluate/index.d.ts +6 -0
- package/dist/web/evaluate/index.js +6 -0
- package/dist/web/evaluate/outcome.d.ts +74 -0
- package/dist/web/evaluate/outcome.js +91 -0
- package/dist/web/evaluate/probe.d.ts +31 -0
- package/dist/web/evaluate/probe.js +303 -0
- package/dist/web/index.d.ts +47 -0
- package/dist/web/index.js +47 -0
- package/dist/web/input/index.d.ts +11 -0
- package/dist/web/input/index.js +11 -0
- package/dist/web/input/keys.d.ts +48 -0
- package/dist/web/input/keys.js +189 -0
- package/dist/web/input/pointer.d.ts +56 -0
- package/dist/web/input/pointer.js +77 -0
- package/dist/web/input/touch.d.ts +61 -0
- package/dist/web/input/touch.js +83 -0
- package/dist/web/mermaid.d.ts +69 -0
- package/dist/web/mermaid.js +223 -0
- package/dist/web/paths.d.ts +16 -0
- package/dist/web/paths.js +27 -0
- package/dist/web/perf/heap.d.ts +42 -0
- package/dist/web/perf/heap.js +73 -0
- package/dist/web/perf/index.d.ts +14 -0
- package/dist/web/perf/index.js +14 -0
- package/dist/web/perf/layers.d.ts +98 -0
- package/dist/web/perf/layers.js +165 -0
- package/dist/web/perf/probe.d.ts +26 -0
- package/dist/web/perf/probe.js +123 -0
- package/dist/web/perf/profile.d.ts +53 -0
- package/dist/web/perf/profile.js +97 -0
- package/dist/web/perf/trace.d.ts +152 -0
- package/dist/web/perf/trace.js +429 -0
- package/dist/web/perf/view.d.ts +6 -0
- package/dist/web/perf/view.js +86 -0
- package/dist/web/perf/vitals.d.ts +141 -0
- package/dist/web/perf/vitals.js +175 -0
- package/dist/web/reader.d.ts +131 -0
- package/dist/web/reader.js +340 -0
- package/dist/web/screenshot.d.ts +50 -0
- package/dist/web/screenshot.js +108 -0
- package/dist/web/search.d.ts +49 -0
- package/dist/web/search.js +137 -0
- package/dist/web/session/artifacts.d.ts +32 -0
- package/dist/web/session/artifacts.js +47 -0
- package/dist/web/session/emulation.d.ts +118 -0
- package/dist/web/session/emulation.js +307 -0
- package/dist/web/session/recording.d.ts +51 -0
- package/dist/web/session/recording.js +64 -0
- package/dist/web/session/settling.d.ts +42 -0
- package/dist/web/session/settling.js +104 -0
- package/dist/web/session/shaping.d.ts +48 -0
- package/dist/web/session/shaping.js +113 -0
- package/dist/web/session/sourcemaps.d.ts +64 -0
- package/dist/web/session/sourcemaps.js +135 -0
- package/dist/web/session/telemetry.d.ts +219 -0
- package/dist/web/session/telemetry.js +486 -0
- package/dist/web/session/wires.d.ts +22 -0
- package/dist/web/session/wires.js +11 -0
- package/dist/web/session.d.ts +1153 -0
- package/dist/web/session.js +3400 -0
- package/dist/web/snapshot/deep.d.ts +36 -0
- package/dist/web/snapshot/deep.js +91 -0
- package/dist/web/snapshot/flatten.d.ts +101 -0
- package/dist/web/snapshot/flatten.js +131 -0
- package/dist/web/snapshot/index.d.ts +8 -0
- package/dist/web/snapshot/index.js +10 -0
- package/dist/web/snapshot/presented.d.ts +32 -0
- package/dist/web/snapshot/presented.js +74 -0
- package/dist/web/snapshot/query.d.ts +67 -0
- package/dist/web/snapshot/query.js +136 -0
- package/dist/web/sourcemap/index.d.ts +9 -0
- package/dist/web/sourcemap/index.js +9 -0
- package/dist/web/sourcemap/mappings.d.ts +111 -0
- package/dist/web/sourcemap/mappings.js +218 -0
- package/dist/web/styles/capture.d.ts +49 -0
- package/dist/web/styles/capture.js +85 -0
- package/dist/web/styles/cascade.d.ts +107 -0
- package/dist/web/styles/cascade.js +275 -0
- package/dist/web/styles/curation.d.ts +45 -0
- package/dist/web/styles/curation.js +282 -0
- package/dist/web/styles/index.d.ts +10 -0
- package/dist/web/styles/index.js +10 -0
- package/dist/web/target/index.d.ts +7 -0
- package/dist/web/target/index.js +7 -0
- package/dist/web/target/refusals.d.ts +59 -0
- package/dist/web/target/refusals.js +305 -0
- package/dist/web/target/target.d.ts +59 -0
- package/dist/web/target/target.js +94 -0
- package/dist/web/telemetry/buffer.d.ts +35 -0
- package/dist/web/telemetry/buffer.js +72 -0
- package/dist/web/telemetry/console.d.ts +127 -0
- package/dist/web/telemetry/console.js +217 -0
- package/dist/web/telemetry/dialogs.d.ts +41 -0
- package/dist/web/telemetry/dialogs.js +38 -0
- package/dist/web/telemetry/downloads.d.ts +42 -0
- package/dist/web/telemetry/downloads.js +65 -0
- package/dist/web/telemetry/failure.d.ts +31 -0
- package/dist/web/telemetry/failure.js +72 -0
- package/dist/web/telemetry/har.d.ts +97 -0
- package/dist/web/telemetry/har.js +227 -0
- package/dist/web/telemetry/index.d.ts +18 -0
- package/dist/web/telemetry/index.js +18 -0
- package/dist/web/telemetry/lifecycle.d.ts +69 -0
- package/dist/web/telemetry/lifecycle.js +120 -0
- package/dist/web/telemetry/network.d.ts +152 -0
- package/dist/web/telemetry/network.js +130 -0
- package/dist/web/telemetry/requests.d.ts +31 -0
- package/dist/web/telemetry/requests.js +119 -0
- package/dist/web/telemetry/sockets.d.ts +56 -0
- package/dist/web/telemetry/sockets.js +101 -0
- package/dist/web/telemetry/view.d.ts +16 -0
- package/dist/web/telemetry/view.js +125 -0
- package/dist/web/wait/conditions.d.ts +87 -0
- package/dist/web/wait/conditions.js +100 -0
- package/dist/web/wait/index.d.ts +6 -0
- package/dist/web/wait/index.js +6 -0
- package/dist/web/wait/settle.d.ts +54 -0
- package/dist/web/wait/settle.js +84 -0
- package/dist/work/ask.d.ts +45 -0
- package/dist/work/ask.js +85 -0
- package/dist/work/author.d.ts +61 -0
- package/dist/work/author.js +144 -0
- package/dist/work/broker.d.ts +151 -0
- package/dist/work/broker.js +165 -0
- package/dist/work/events.d.ts +98 -0
- package/dist/work/events.js +57 -0
- package/dist/work/history.d.ts +69 -0
- package/dist/work/history.js +174 -0
- package/dist/work/index.d.ts +49 -0
- package/dist/work/index.js +33 -0
- package/dist/work/inplay.d.ts +43 -0
- package/dist/work/inplay.js +42 -0
- package/dist/work/memory.d.ts +84 -0
- package/dist/work/memory.js +203 -0
- package/dist/work/objection.d.ts +92 -0
- package/dist/work/objection.js +72 -0
- package/dist/work/provider.d.ts +79 -0
- package/dist/work/provider.js +45 -0
- package/dist/work/providers/git.d.ts +29 -0
- package/dist/work/providers/git.js +87 -0
- package/dist/work/publish.d.ts +53 -0
- package/dist/work/publish.js +139 -0
- package/dist/work/rebase.d.ts +78 -0
- package/dist/work/rebase.js +261 -0
- package/dist/work/reclaim.d.ts +56 -0
- package/dist/work/reclaim.js +52 -0
- package/dist/work/register.d.ts +29 -0
- package/dist/work/register.js +41 -0
- package/dist/work/stack.d.ts +126 -0
- package/dist/work/stack.js +243 -0
- package/dist/work/stacks.d.ts +156 -0
- package/dist/work/stacks.js +524 -0
- package/dist/work/survey.d.ts +52 -0
- package/dist/work/survey.js +58 -0
- package/dist/work/tidy.d.ts +147 -0
- package/dist/work/tidy.js +136 -0
- package/dist/work/tree.d.ts +120 -0
- package/dist/work/tree.js +69 -0
- package/dist/work/unattended.d.ts +40 -0
- package/dist/work/unattended.js +57 -0
- package/package.json +145 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP backend registry: process-global map from backend name to
|
|
3
|
+
* `LspBackendEntry`. Mirrors the refs, terminal and tree
|
|
4
|
+
* libraries; uses the same shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import type { LspBackendEntry } from "../../lsp/types.js";
|
|
8
|
+
export declare const register: (entry: LspBackendEntry) => void;
|
|
9
|
+
export declare const unregister: (name: string) => void;
|
|
10
|
+
export declare const clear: () => void;
|
|
11
|
+
export declare const get: (name: string) => LspBackendEntry | undefined;
|
|
12
|
+
export declare const list: () => LspBackendEntry[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP backend registry: process-global map from backend name to
|
|
3
|
+
* `LspBackendEntry`. Mirrors the refs, terminal and tree
|
|
4
|
+
* libraries; uses the same shared `createGlobalSymbolRegistry`
|
|
5
|
+
* helper.
|
|
6
|
+
*/
|
|
7
|
+
import { createGlobalSymbolRegistry } from "../registry/global-symbol-registry.js";
|
|
8
|
+
const registry = createGlobalSymbolRegistry({
|
|
9
|
+
slot: "pi:agentic-harness:lsp-backends",
|
|
10
|
+
getId: (entry) => entry.name,
|
|
11
|
+
});
|
|
12
|
+
export const register = (entry) => registry.register(entry);
|
|
13
|
+
export const unregister = (name) => registry.unregister(name);
|
|
14
|
+
export const clear = () => registry.clear();
|
|
15
|
+
export const get = (name) => registry.get(name);
|
|
16
|
+
export const list = () => registry.list();
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notes discovery: walk a notes root on disk and build an
|
|
3
|
+
* in-memory index.
|
|
4
|
+
*
|
|
5
|
+
* Canonical disk layout (within `notesRoot`):
|
|
6
|
+
*
|
|
7
|
+
* NOTE-20130120-3MX6UQ/
|
|
8
|
+
* README.md
|
|
9
|
+
* attachment-1.jpg
|
|
10
|
+
* NOTE-20260822-AJ1W97/ (parent of the note
|
|
11
|
+
* README.md above, via its own
|
|
12
|
+
* `parent:` field --
|
|
13
|
+
* lives flat at the
|
|
14
|
+
* notes root, not
|
|
15
|
+
* nested in its
|
|
16
|
+
* parent's directory)
|
|
17
|
+
*
|
|
18
|
+
* All notes live as immediate children of `notesRoot`.
|
|
19
|
+
* Hierarchy is expressed by the `parent:` front-matter field
|
|
20
|
+
* on each note, not by directory nesting -- the same
|
|
21
|
+
* invariant quest enforces for its own tree
|
|
22
|
+
* (`internal/quest/discovery.ts`), and for the same reason:
|
|
23
|
+
* a note's location on disk should never need to change just
|
|
24
|
+
* because its place in a hierarchy does.
|
|
25
|
+
*
|
|
26
|
+
* A directory whose name doesn't match the `NOTE-*` id shape
|
|
27
|
+
* is skipped, not an error -- `.git`, `.claude`, scratch
|
|
28
|
+
* directories and the like are expected to sit alongside the
|
|
29
|
+
* notes.
|
|
30
|
+
*/
|
|
31
|
+
import type { NoteDoc } from "../../notes/types.js";
|
|
32
|
+
/** One discovered note. */
|
|
33
|
+
export interface NoteEntry {
|
|
34
|
+
/** The note's directory name, equal to its id. */
|
|
35
|
+
dir: string;
|
|
36
|
+
doc: NoteDoc;
|
|
37
|
+
}
|
|
38
|
+
/** The whole tree, indexed for lookup and hierarchy traversal. */
|
|
39
|
+
export interface NoteIndex {
|
|
40
|
+
/** Every discovered note by id. */
|
|
41
|
+
notes: Map<string, NoteEntry>;
|
|
42
|
+
/**
|
|
43
|
+
* Parent-to-children adjacency. The empty key `""` holds
|
|
44
|
+
* every note with no `parent` set.
|
|
45
|
+
*/
|
|
46
|
+
children: Map<string, string[]>;
|
|
47
|
+
}
|
|
48
|
+
interface DiscoveryError {
|
|
49
|
+
dir: string;
|
|
50
|
+
message: string;
|
|
51
|
+
}
|
|
52
|
+
/** Result of a discovery walk. */
|
|
53
|
+
export interface DiscoveryResult {
|
|
54
|
+
index: NoteIndex;
|
|
55
|
+
errors: DiscoveryError[];
|
|
56
|
+
}
|
|
57
|
+
/** Walk `notesRoot` and build a `NoteIndex` of every note found. */
|
|
58
|
+
export declare function discoverNotes(notesRoot: string): DiscoveryResult;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notes discovery: walk a notes root on disk and build an
|
|
3
|
+
* in-memory index.
|
|
4
|
+
*
|
|
5
|
+
* Canonical disk layout (within `notesRoot`):
|
|
6
|
+
*
|
|
7
|
+
* NOTE-20130120-3MX6UQ/
|
|
8
|
+
* README.md
|
|
9
|
+
* attachment-1.jpg
|
|
10
|
+
* NOTE-20260822-AJ1W97/ (parent of the note
|
|
11
|
+
* README.md above, via its own
|
|
12
|
+
* `parent:` field --
|
|
13
|
+
* lives flat at the
|
|
14
|
+
* notes root, not
|
|
15
|
+
* nested in its
|
|
16
|
+
* parent's directory)
|
|
17
|
+
*
|
|
18
|
+
* All notes live as immediate children of `notesRoot`.
|
|
19
|
+
* Hierarchy is expressed by the `parent:` front-matter field
|
|
20
|
+
* on each note, not by directory nesting -- the same
|
|
21
|
+
* invariant quest enforces for its own tree
|
|
22
|
+
* (`internal/quest/discovery.ts`), and for the same reason:
|
|
23
|
+
* a note's location on disk should never need to change just
|
|
24
|
+
* because its place in a hierarchy does.
|
|
25
|
+
*
|
|
26
|
+
* A directory whose name doesn't match the `NOTE-*` id shape
|
|
27
|
+
* is skipped, not an error -- `.git`, `.claude`, scratch
|
|
28
|
+
* directories and the like are expected to sit alongside the
|
|
29
|
+
* notes.
|
|
30
|
+
*/
|
|
31
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
32
|
+
import { join } from "node:path";
|
|
33
|
+
import { parseNoteFrontMatter } from "./frontmatter.js";
|
|
34
|
+
import { isId } from "./id.js";
|
|
35
|
+
function readMaybe(path) {
|
|
36
|
+
try {
|
|
37
|
+
return readFileSync(path, "utf8");
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Walk `notesRoot` and build a `NoteIndex` of every note found. */
|
|
44
|
+
export function discoverNotes(notesRoot) {
|
|
45
|
+
const notes = new Map();
|
|
46
|
+
const children = new Map();
|
|
47
|
+
const errors = [];
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
entries = readdirSync(notesRoot, { withFileTypes: true })
|
|
51
|
+
.filter((e) => e.isDirectory() && isId(e.name))
|
|
52
|
+
.map((e) => e.name);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
errors.push({
|
|
56
|
+
dir: notesRoot,
|
|
57
|
+
message: err instanceof Error ? err.message : String(err),
|
|
58
|
+
});
|
|
59
|
+
return { index: { notes, children }, errors };
|
|
60
|
+
}
|
|
61
|
+
for (const dir of entries) {
|
|
62
|
+
const readmePath = join(notesRoot, dir, "README.md");
|
|
63
|
+
const text = readMaybe(readmePath);
|
|
64
|
+
if (text === undefined) {
|
|
65
|
+
errors.push({ dir, message: `missing ${readmePath}` });
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const parsed = parseNoteFrontMatter(text);
|
|
69
|
+
if (!parsed) {
|
|
70
|
+
errors.push({ dir, message: "invalid or missing front matter" });
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (parsed.frontMatter.id !== dir) {
|
|
74
|
+
errors.push({
|
|
75
|
+
dir,
|
|
76
|
+
message: `front-matter id "${parsed.frontMatter.id}" does not match directory name`,
|
|
77
|
+
});
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
notes.set(dir, { dir, doc: parsed });
|
|
81
|
+
}
|
|
82
|
+
for (const entry of notes.values()) {
|
|
83
|
+
const parentKey = entry.doc.frontMatter.parent ?? "";
|
|
84
|
+
const list = children.get(parentKey) ?? [];
|
|
85
|
+
list.push(entry.dir);
|
|
86
|
+
children.set(parentKey, list);
|
|
87
|
+
}
|
|
88
|
+
for (const list of children.values())
|
|
89
|
+
list.sort();
|
|
90
|
+
return { index: { notes, children }, errors };
|
|
91
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Front-matter parser and serializer for note READMEs.
|
|
3
|
+
*
|
|
4
|
+
* The block is YAML between two `---` fences. We use the
|
|
5
|
+
* `yaml` library for both directions rather than hand-rolled
|
|
6
|
+
* regex parsing, the same choice quest's own frontmatter
|
|
7
|
+
* module makes (`internal/quest/frontmatter.ts`) and for the
|
|
8
|
+
* same reason: a title or source string containing a colon,
|
|
9
|
+
* a quote, or a backslash is exactly the kind of value a
|
|
10
|
+
* regex-based reader/writer round-trips incorrectly, and
|
|
11
|
+
* silently -- an earlier prototype of this library hand-rolled
|
|
12
|
+
* its own escaping and produced titles with accumulating
|
|
13
|
+
* doubled backslashes on repeated edits before this was
|
|
14
|
+
* caught. A real YAML parser has no such failure mode.
|
|
15
|
+
*
|
|
16
|
+
* Validation rules:
|
|
17
|
+
*
|
|
18
|
+
* - `id`, `type`, `title`, `created`, `updated` are
|
|
19
|
+
* required; a missing or invalid one makes the whole parse
|
|
20
|
+
* fail so callers surface a clean error instead of writing
|
|
21
|
+
* back a corrupted file.
|
|
22
|
+
* - `type` is a strict enum; an unrecognised value fails
|
|
23
|
+
* the parse rather than being coerced to a guess.
|
|
24
|
+
* - `tags` defaults to `[]` rather than being omitted, so
|
|
25
|
+
* callers never have to distinguish "no tags" from "tags
|
|
26
|
+
* field missing".
|
|
27
|
+
* - `parent` and `source` are optional and only appear in
|
|
28
|
+
* the serialized output when set.
|
|
29
|
+
*/
|
|
30
|
+
import { type NoteFrontMatter } from "../../notes/types.js";
|
|
31
|
+
/** Split a note's text into its raw front-matter YAML and body. */
|
|
32
|
+
export declare function splitFrontMatter(text: string): {
|
|
33
|
+
fmText: string;
|
|
34
|
+
body: string;
|
|
35
|
+
} | undefined;
|
|
36
|
+
/** Reasons a front-matter block might fail to parse, for a caller to surface. */
|
|
37
|
+
export declare function noteFrontMatterProblem(text: string): string | undefined;
|
|
38
|
+
/** Parse a note's full text into front matter plus body, or `undefined` if invalid. */
|
|
39
|
+
export declare function parseNoteFrontMatter(text: string): {
|
|
40
|
+
frontMatter: NoteFrontMatter;
|
|
41
|
+
body: string;
|
|
42
|
+
} | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Serialize front matter back to a YAML block, in a fixed
|
|
45
|
+
* field order (id, type, title, created, updated, tags,
|
|
46
|
+
* parent, source) so a diff on a note that only changed one
|
|
47
|
+
* field's value shows one changed line, not a reordered
|
|
48
|
+
* block.
|
|
49
|
+
*/
|
|
50
|
+
export declare function serializeNoteFrontMatter(fm: NoteFrontMatter): string;
|
|
51
|
+
/** Assemble a note's full file text from front matter and body. */
|
|
52
|
+
export declare function serializeNote(fm: NoteFrontMatter, body: string): string;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Front-matter parser and serializer for note READMEs.
|
|
3
|
+
*
|
|
4
|
+
* The block is YAML between two `---` fences. We use the
|
|
5
|
+
* `yaml` library for both directions rather than hand-rolled
|
|
6
|
+
* regex parsing, the same choice quest's own frontmatter
|
|
7
|
+
* module makes (`internal/quest/frontmatter.ts`) and for the
|
|
8
|
+
* same reason: a title or source string containing a colon,
|
|
9
|
+
* a quote, or a backslash is exactly the kind of value a
|
|
10
|
+
* regex-based reader/writer round-trips incorrectly, and
|
|
11
|
+
* silently -- an earlier prototype of this library hand-rolled
|
|
12
|
+
* its own escaping and produced titles with accumulating
|
|
13
|
+
* doubled backslashes on repeated edits before this was
|
|
14
|
+
* caught. A real YAML parser has no such failure mode.
|
|
15
|
+
*
|
|
16
|
+
* Validation rules:
|
|
17
|
+
*
|
|
18
|
+
* - `id`, `type`, `title`, `created`, `updated` are
|
|
19
|
+
* required; a missing or invalid one makes the whole parse
|
|
20
|
+
* fail so callers surface a clean error instead of writing
|
|
21
|
+
* back a corrupted file.
|
|
22
|
+
* - `type` is a strict enum; an unrecognised value fails
|
|
23
|
+
* the parse rather than being coerced to a guess.
|
|
24
|
+
* - `tags` defaults to `[]` rather than being omitted, so
|
|
25
|
+
* callers never have to distinguish "no tags" from "tags
|
|
26
|
+
* field missing".
|
|
27
|
+
* - `parent` and `source` are optional and only appear in
|
|
28
|
+
* the serialized output when set.
|
|
29
|
+
*/
|
|
30
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
31
|
+
import { NOTE_TYPES } from "../../notes/types.js";
|
|
32
|
+
/** Split a note's text into its raw front-matter YAML and body. */
|
|
33
|
+
export function splitFrontMatter(text) {
|
|
34
|
+
const lines = text.split("\n");
|
|
35
|
+
if (lines[0]?.trim() !== "---")
|
|
36
|
+
return undefined;
|
|
37
|
+
let end = -1;
|
|
38
|
+
for (let i = 1; i < lines.length; i++) {
|
|
39
|
+
if (lines[i].trim() === "---") {
|
|
40
|
+
end = i;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (end === -1)
|
|
45
|
+
return undefined;
|
|
46
|
+
const fmText = lines.slice(1, end).join("\n");
|
|
47
|
+
let body = lines.slice(end + 1).join("\n");
|
|
48
|
+
if (body.startsWith("\n"))
|
|
49
|
+
body = body.slice(1);
|
|
50
|
+
return { fmText, body };
|
|
51
|
+
}
|
|
52
|
+
function parseFrontMatterBlock(text) {
|
|
53
|
+
const split = splitFrontMatter(text);
|
|
54
|
+
if (!split)
|
|
55
|
+
return undefined;
|
|
56
|
+
let raw;
|
|
57
|
+
try {
|
|
58
|
+
raw = parseYaml(split.fmText) ?? {};
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return raw;
|
|
67
|
+
}
|
|
68
|
+
function asEnum(value, options) {
|
|
69
|
+
if (typeof value !== "string")
|
|
70
|
+
return undefined;
|
|
71
|
+
return options.includes(value) ? value : undefined;
|
|
72
|
+
}
|
|
73
|
+
function asString(value) {
|
|
74
|
+
if (typeof value === "string" && value.length > 0)
|
|
75
|
+
return value;
|
|
76
|
+
// created/updated timestamps and ids are always strings on write, but
|
|
77
|
+
// a hand-edited file could plausibly leave one unquoted; YAML would
|
|
78
|
+
// then hand back a number or Date for some shapes. Round-trip those
|
|
79
|
+
// back to string rather than failing the whole parse over it.
|
|
80
|
+
if (typeof value === "number")
|
|
81
|
+
return String(value);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
function asStringArray(value) {
|
|
85
|
+
if (!Array.isArray(value))
|
|
86
|
+
return [];
|
|
87
|
+
return value.filter((v) => typeof v === "string" && v.length > 0);
|
|
88
|
+
}
|
|
89
|
+
/** Reasons a front-matter block might fail to parse, for a caller to surface. */
|
|
90
|
+
export function noteFrontMatterProblem(text) {
|
|
91
|
+
const raw = parseFrontMatterBlock(text);
|
|
92
|
+
if (!raw)
|
|
93
|
+
return "no valid front-matter block (missing --- fences or invalid YAML)";
|
|
94
|
+
if (!asString(raw.id))
|
|
95
|
+
return "missing or invalid id";
|
|
96
|
+
if (!asEnum(raw.type, NOTE_TYPES)) {
|
|
97
|
+
return `missing or invalid type (must be one of: ${NOTE_TYPES.join(", ")})`;
|
|
98
|
+
}
|
|
99
|
+
if (!asString(raw.title))
|
|
100
|
+
return "missing or invalid title";
|
|
101
|
+
if (!asString(raw.created))
|
|
102
|
+
return "missing or invalid created";
|
|
103
|
+
if (!asString(raw.updated))
|
|
104
|
+
return "missing or invalid updated";
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
/** Parse a note's full text into front matter plus body, or `undefined` if invalid. */
|
|
108
|
+
export function parseNoteFrontMatter(text) {
|
|
109
|
+
const split = splitFrontMatter(text);
|
|
110
|
+
if (!split)
|
|
111
|
+
return undefined;
|
|
112
|
+
const raw = parseFrontMatterBlock(text);
|
|
113
|
+
if (!raw)
|
|
114
|
+
return undefined;
|
|
115
|
+
const id = asString(raw.id);
|
|
116
|
+
const type = asEnum(raw.type, NOTE_TYPES);
|
|
117
|
+
const title = asString(raw.title);
|
|
118
|
+
const created = asString(raw.created);
|
|
119
|
+
const updated = asString(raw.updated);
|
|
120
|
+
if (!id || !type || !title || !created || !updated)
|
|
121
|
+
return undefined;
|
|
122
|
+
const frontMatter = {
|
|
123
|
+
id,
|
|
124
|
+
type,
|
|
125
|
+
title,
|
|
126
|
+
created,
|
|
127
|
+
updated,
|
|
128
|
+
tags: asStringArray(raw.tags),
|
|
129
|
+
};
|
|
130
|
+
const parent = asString(raw.parent);
|
|
131
|
+
if (parent)
|
|
132
|
+
frontMatter.parent = parent;
|
|
133
|
+
const source = asString(raw.source);
|
|
134
|
+
if (source)
|
|
135
|
+
frontMatter.source = source;
|
|
136
|
+
return { frontMatter, body: split.body };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Serialize front matter back to a YAML block, in a fixed
|
|
140
|
+
* field order (id, type, title, created, updated, tags,
|
|
141
|
+
* parent, source) so a diff on a note that only changed one
|
|
142
|
+
* field's value shows one changed line, not a reordered
|
|
143
|
+
* block.
|
|
144
|
+
*/
|
|
145
|
+
export function serializeNoteFrontMatter(fm) {
|
|
146
|
+
const ordered = {
|
|
147
|
+
id: fm.id,
|
|
148
|
+
type: fm.type,
|
|
149
|
+
title: fm.title,
|
|
150
|
+
created: fm.created,
|
|
151
|
+
updated: fm.updated,
|
|
152
|
+
tags: fm.tags,
|
|
153
|
+
};
|
|
154
|
+
if (fm.parent)
|
|
155
|
+
ordered.parent = fm.parent;
|
|
156
|
+
if (fm.source)
|
|
157
|
+
ordered.source = fm.source;
|
|
158
|
+
return stringifyYaml(ordered, { lineWidth: 0 }).trimEnd();
|
|
159
|
+
}
|
|
160
|
+
/** Assemble a note's full file text from front matter and body. */
|
|
161
|
+
export function serializeNote(fm, body) {
|
|
162
|
+
return `---\n${serializeNoteFrontMatter(fm)}\n---\n\n${body.replace(/^\n+/, "")}`;
|
|
163
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Note ID minting and validation.
|
|
3
|
+
*
|
|
4
|
+
* IDs are deterministic in shape, random in suffix, the same
|
|
5
|
+
* pattern quest uses for its own ids (see
|
|
6
|
+
* `internal/quest/id.ts`):
|
|
7
|
+
*
|
|
8
|
+
* NOTE-YYYYMMDD-XXXXXX
|
|
9
|
+
*
|
|
10
|
+
* `YYYYMMDD` is the note's creation date (local timezone, or
|
|
11
|
+
* whatever the original source recorded) so ids sort
|
|
12
|
+
* chronologically by construction. `XXXXXX` is a
|
|
13
|
+
* six-character base-36 (upper) random suffix, giving
|
|
14
|
+
* roughly 2.18 billion distinct ids per day -- collisions in
|
|
15
|
+
* practice require an explicit check, not a probability
|
|
16
|
+
* argument.
|
|
17
|
+
*
|
|
18
|
+
* Unlike quest, there is exactly one prefix here: a note
|
|
19
|
+
* owns no child documents of a different kind, so there is
|
|
20
|
+
* nothing for a second prefix to distinguish.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Mint a fresh id. `date` defaults to now; tests and
|
|
24
|
+
* backdated imports pass a fixed date so the `YYYYMMDD`
|
|
25
|
+
* portion reflects the note's real creation date rather than
|
|
26
|
+
* the moment it was minted.
|
|
27
|
+
*/
|
|
28
|
+
export declare function mintId(date?: Date): string;
|
|
29
|
+
/**
|
|
30
|
+
* Mint a fresh id from an already-formatted `YYYYMMDD` (or
|
|
31
|
+
* longer, e.g. `YYYYMMDDTHHMMSSZ`) string, the shape a note's
|
|
32
|
+
* own `created` front-matter field is in. Falls back to
|
|
33
|
+
* today's date when the string doesn't start with eight
|
|
34
|
+
* digits, rather than throwing -- a malformed or missing
|
|
35
|
+
* `created` field on import is a data-quality problem to
|
|
36
|
+
* flag separately, not a reason to refuse minting an id.
|
|
37
|
+
*/
|
|
38
|
+
export declare function mintIdFromDateString(dateString: string | undefined): string;
|
|
39
|
+
/** Quick validation: is this string a valid note id? */
|
|
40
|
+
export declare function isId(text: string): boolean;
|
|
41
|
+
/** Extract the `YYYYMMDD` date portion from an id, or `undefined`. */
|
|
42
|
+
export declare function dateOf(id: string): string | undefined;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Note ID minting and validation.
|
|
3
|
+
*
|
|
4
|
+
* IDs are deterministic in shape, random in suffix, the same
|
|
5
|
+
* pattern quest uses for its own ids (see
|
|
6
|
+
* `internal/quest/id.ts`):
|
|
7
|
+
*
|
|
8
|
+
* NOTE-YYYYMMDD-XXXXXX
|
|
9
|
+
*
|
|
10
|
+
* `YYYYMMDD` is the note's creation date (local timezone, or
|
|
11
|
+
* whatever the original source recorded) so ids sort
|
|
12
|
+
* chronologically by construction. `XXXXXX` is a
|
|
13
|
+
* six-character base-36 (upper) random suffix, giving
|
|
14
|
+
* roughly 2.18 billion distinct ids per day -- collisions in
|
|
15
|
+
* practice require an explicit check, not a probability
|
|
16
|
+
* argument.
|
|
17
|
+
*
|
|
18
|
+
* Unlike quest, there is exactly one prefix here: a note
|
|
19
|
+
* owns no child documents of a different kind, so there is
|
|
20
|
+
* nothing for a second prefix to distinguish.
|
|
21
|
+
*/
|
|
22
|
+
import { randomBytes } from "node:crypto";
|
|
23
|
+
const PREFIX = "NOTE";
|
|
24
|
+
// YYYY: 1900-2999. MM: 01-12. DD: 01-31. Shape check, not a
|
|
25
|
+
// calendar validator -- rejects the obvious garbage
|
|
26
|
+
// (00000000, 20261345) a bare `\d{8}` would accept, without
|
|
27
|
+
// the cost of real calendar math nothing here needs.
|
|
28
|
+
const DATE_PATTERN = "(?:19|2[0-9])\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])";
|
|
29
|
+
const ID_REGEX = new RegExp(`^${PREFIX}-(${DATE_PATTERN})-([0-9A-Z]{6})$`);
|
|
30
|
+
function pad(n) {
|
|
31
|
+
return String(n).padStart(2, "0");
|
|
32
|
+
}
|
|
33
|
+
function ymd(date) {
|
|
34
|
+
return `${date.getFullYear()}${pad(date.getMonth() + 1)}${pad(date.getDate())}`;
|
|
35
|
+
}
|
|
36
|
+
/** Build a six-character base-36 uppercase random suffix. */
|
|
37
|
+
function randomSuffix() {
|
|
38
|
+
const bytes = randomBytes(6);
|
|
39
|
+
const out = [];
|
|
40
|
+
for (let i = 0; i < 6; i++) {
|
|
41
|
+
out.push((bytes[i] % 36).toString(36).toUpperCase());
|
|
42
|
+
}
|
|
43
|
+
return out.join("");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Mint a fresh id. `date` defaults to now; tests and
|
|
47
|
+
* backdated imports pass a fixed date so the `YYYYMMDD`
|
|
48
|
+
* portion reflects the note's real creation date rather than
|
|
49
|
+
* the moment it was minted.
|
|
50
|
+
*/
|
|
51
|
+
export function mintId(date = new Date()) {
|
|
52
|
+
return `${PREFIX}-${ymd(date)}-${randomSuffix()}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Mint a fresh id from an already-formatted `YYYYMMDD` (or
|
|
56
|
+
* longer, e.g. `YYYYMMDDTHHMMSSZ`) string, the shape a note's
|
|
57
|
+
* own `created` front-matter field is in. Falls back to
|
|
58
|
+
* today's date when the string doesn't start with eight
|
|
59
|
+
* digits, rather than throwing -- a malformed or missing
|
|
60
|
+
* `created` field on import is a data-quality problem to
|
|
61
|
+
* flag separately, not a reason to refuse minting an id.
|
|
62
|
+
*/
|
|
63
|
+
export function mintIdFromDateString(dateString) {
|
|
64
|
+
const match = dateString?.match(/^(\d{8})/);
|
|
65
|
+
const datePart = match?.[1];
|
|
66
|
+
if (!datePart)
|
|
67
|
+
return mintId();
|
|
68
|
+
const year = Number(datePart.slice(0, 4));
|
|
69
|
+
const month = Number(datePart.slice(4, 6));
|
|
70
|
+
const day = Number(datePart.slice(6, 8));
|
|
71
|
+
return mintId(new Date(year, month - 1, day));
|
|
72
|
+
}
|
|
73
|
+
/** Quick validation: is this string a valid note id? */
|
|
74
|
+
export function isId(text) {
|
|
75
|
+
return ID_REGEX.test(text);
|
|
76
|
+
}
|
|
77
|
+
/** Extract the `YYYYMMDD` date portion from an id, or `undefined`. */
|
|
78
|
+
export function dateOf(id) {
|
|
79
|
+
return ID_REGEX.exec(id)?.[1];
|
|
80
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file writes for note READMEs.
|
|
3
|
+
*
|
|
4
|
+
* The "read text, parse, mutate, write text" sequence every
|
|
5
|
+
* mutating verb runs is not atomic against a concurrent
|
|
6
|
+
* reader on a slow disk: a naive write can leave a reader
|
|
7
|
+
* seeing half a file. We write to a sibling temp file, fsync,
|
|
8
|
+
* then rename over the target, so an observer always sees
|
|
9
|
+
* the old or the new file in full -- the same pattern quest
|
|
10
|
+
* uses (`internal/quest/io.ts`).
|
|
11
|
+
*
|
|
12
|
+
* Unlike quest, there is no cross-process lock here. Quest
|
|
13
|
+
* needs one because two pi sessions can legitimately attach
|
|
14
|
+
* to and mutate the same quest concurrently; a notes archive
|
|
15
|
+
* has no equivalent multi-writer scenario -- it's a single
|
|
16
|
+
* user's single-writer CLI. If that ever changes, port
|
|
17
|
+
* quest's `withQuestLock` rather than inventing a new one.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Write `data` to `path` atomically: write to a sibling temp
|
|
21
|
+
* file in the same directory, fsync, then rename. The rename
|
|
22
|
+
* is atomic on POSIX filesystems for files on the same
|
|
23
|
+
* volume, which a sibling temp file always is.
|
|
24
|
+
*/
|
|
25
|
+
export declare function atomicWriteFile(path: string, data: string): void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic file writes for note READMEs.
|
|
3
|
+
*
|
|
4
|
+
* The "read text, parse, mutate, write text" sequence every
|
|
5
|
+
* mutating verb runs is not atomic against a concurrent
|
|
6
|
+
* reader on a slow disk: a naive write can leave a reader
|
|
7
|
+
* seeing half a file. We write to a sibling temp file, fsync,
|
|
8
|
+
* then rename over the target, so an observer always sees
|
|
9
|
+
* the old or the new file in full -- the same pattern quest
|
|
10
|
+
* uses (`internal/quest/io.ts`).
|
|
11
|
+
*
|
|
12
|
+
* Unlike quest, there is no cross-process lock here. Quest
|
|
13
|
+
* needs one because two pi sessions can legitimately attach
|
|
14
|
+
* to and mutate the same quest concurrently; a notes archive
|
|
15
|
+
* has no equivalent multi-writer scenario -- it's a single
|
|
16
|
+
* user's single-writer CLI. If that ever changes, port
|
|
17
|
+
* quest's `withQuestLock` rather than inventing a new one.
|
|
18
|
+
*/
|
|
19
|
+
import { closeSync, fsyncSync, openSync, renameSync, unlinkSync, writeSync, } from "node:fs";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
|
+
/**
|
|
22
|
+
* Write `data` to `path` atomically: write to a sibling temp
|
|
23
|
+
* file in the same directory, fsync, then rename. The rename
|
|
24
|
+
* is atomic on POSIX filesystems for files on the same
|
|
25
|
+
* volume, which a sibling temp file always is.
|
|
26
|
+
*/
|
|
27
|
+
export function atomicWriteFile(path, data) {
|
|
28
|
+
const dir = dirname(path);
|
|
29
|
+
const tmp = join(dir, `.${path.split("/").pop()}.tmp-${process.pid}-${Math.random().toString(36).slice(2, 10)}`);
|
|
30
|
+
const fd = openSync(tmp, "w");
|
|
31
|
+
try {
|
|
32
|
+
writeSync(fd, data);
|
|
33
|
+
fsyncSync(fd);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
closeSync(fd);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
renameSync(tmp, path);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
try {
|
|
43
|
+
unlinkSync(tmp);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Best-effort cleanup; the temp's leftover state is
|
|
47
|
+
// safe to leave in place and is not user-visible.
|
|
48
|
+
}
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-safe filename sanitizing.
|
|
3
|
+
*
|
|
4
|
+
* Unrelated to quest's `internal/quest/sanitize.ts`, which
|
|
5
|
+
* defends against prompt injection in text the agent reads
|
|
6
|
+
* back. This one has a narrower, mechanical job: take a
|
|
7
|
+
* human title (from an import, or typed by a caller) and
|
|
8
|
+
* produce something every filesystem this tool runs on can
|
|
9
|
+
* actually name a file, without silently truncating or
|
|
10
|
+
* colliding.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Sanitize a string for use as a filename component (not a
|
|
14
|
+
* full path -- callers add their own extension/directory).
|
|
15
|
+
* Collapses whitespace, strips characters invalid on
|
|
16
|
+
* Windows/macOS/Linux filesystems, trims trailing dots and
|
|
17
|
+
* spaces (Windows rejects both), and clamps length.
|
|
18
|
+
*/
|
|
19
|
+
export declare function sanitizeFilename(name: string, maxLen?: number): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-safe filename sanitizing.
|
|
3
|
+
*
|
|
4
|
+
* Unrelated to quest's `internal/quest/sanitize.ts`, which
|
|
5
|
+
* defends against prompt injection in text the agent reads
|
|
6
|
+
* back. This one has a narrower, mechanical job: take a
|
|
7
|
+
* human title (from an import, or typed by a caller) and
|
|
8
|
+
* produce something every filesystem this tool runs on can
|
|
9
|
+
* actually name a file, without silently truncating or
|
|
10
|
+
* colliding.
|
|
11
|
+
*/
|
|
12
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: intentionally stripping control characters from filenames, not matching them as text
|
|
13
|
+
const INVALID_CHARS_RE = /[/\\:*?"<>|\x00-\x1f]/g;
|
|
14
|
+
const WHITESPACE_RE = /\s+/g;
|
|
15
|
+
/**
|
|
16
|
+
* Sanitize a string for use as a filename component (not a
|
|
17
|
+
* full path -- callers add their own extension/directory).
|
|
18
|
+
* Collapses whitespace, strips characters invalid on
|
|
19
|
+
* Windows/macOS/Linux filesystems, trims trailing dots and
|
|
20
|
+
* spaces (Windows rejects both), and clamps length.
|
|
21
|
+
*/
|
|
22
|
+
export function sanitizeFilename(name, maxLen = 150) {
|
|
23
|
+
// Whitespace normalizes first: \x00-\x1f in INVALID_CHARS_RE
|
|
24
|
+
// includes tab, so running that pass first would turn each tab
|
|
25
|
+
// into its own literal "-" (two tabs -> "--") instead of
|
|
26
|
+
// collapsing the run into a single space the way a space or
|
|
27
|
+
// newline run does.
|
|
28
|
+
const cleaned = name
|
|
29
|
+
.trim()
|
|
30
|
+
.replace(WHITESPACE_RE, " ")
|
|
31
|
+
.replace(INVALID_CHARS_RE, "-")
|
|
32
|
+
.trim()
|
|
33
|
+
.replace(/[. ]+$/, "");
|
|
34
|
+
return (cleaned || "file").slice(0, maxLen);
|
|
35
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-global singletons shared across module instances.
|
|
3
|
+
*
|
|
4
|
+
* A host that loads a library's modules more than once per process
|
|
5
|
+
* (pi loads each extension as its own module instance) does not get
|
|
6
|
+
* one registry from a module-level `const registry = new Map()`: each
|
|
7
|
+
* loader that imports the module gets its own. Anything one caller
|
|
8
|
+
* writes and another reads (a recorder sink, a prompt contributor, an
|
|
9
|
+
* LSP backend, the shared browser) must therefore live on
|
|
10
|
+
* `globalThis` under a shared key rather than in a module variable.
|
|
11
|
+
* `Symbol.for` gives every module instance the same key, and
|
|
12
|
+
* `globalThis` is shared across them, so the value is genuinely one
|
|
13
|
+
* per process.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Get the process-global value for `key`, creating it once with
|
|
17
|
+
* `create` on first access. Every caller in the process, in any
|
|
18
|
+
* module instance, receives the same value.
|
|
19
|
+
*/
|
|
20
|
+
export declare function processGlobal<T>(key: string, create: () => T): T;
|