@nanonets/graft 0.24.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ask/ask.d.ts +8 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +33 -12
- package/dist/ask/ask.js.map +1 -1
- package/dist/claude/hook-io.d.ts +44 -0
- package/dist/claude/hook-io.d.ts.map +1 -0
- package/dist/claude/hook-io.js +144 -0
- package/dist/claude/hook-io.js.map +1 -0
- package/dist/claude/skills-hook-util.d.ts +25 -0
- package/dist/claude/skills-hook-util.d.ts.map +1 -0
- package/dist/claude/skills-hook-util.js +71 -0
- package/dist/claude/skills-hook-util.js.map +1 -0
- package/dist/cli-picker.d.ts +24 -0
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +36 -5
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +278 -29
- package/dist/cli.js.map +1 -1
- package/dist/cloud/lookup-activity.d.ts +16 -0
- package/dist/cloud/lookup-activity.d.ts.map +1 -0
- package/dist/cloud/lookup-activity.js +56 -0
- package/dist/cloud/lookup-activity.js.map +1 -0
- package/dist/cloud/nudge.d.ts.map +1 -1
- package/dist/cloud/nudge.js +3 -0
- package/dist/cloud/nudge.js.map +1 -1
- package/dist/cloud/onboarding.d.ts +237 -0
- package/dist/cloud/onboarding.d.ts.map +1 -0
- package/dist/cloud/onboarding.js +536 -0
- package/dist/cloud/onboarding.js.map +1 -0
- package/dist/cloud/pair.d.ts +76 -0
- package/dist/cloud/pair.d.ts.map +1 -0
- package/dist/cloud/pair.js +249 -0
- package/dist/cloud/pair.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +10 -2
- package/dist/cloud/workspace-sync.d.ts.map +1 -1
- package/dist/cloud/workspace-sync.js +119 -7
- package/dist/cloud/workspace-sync.js.map +1 -1
- package/dist/cloud/workspace.d.ts +22 -1
- package/dist/cloud/workspace.d.ts.map +1 -1
- package/dist/cloud/workspace.js +16 -1
- package/dist/cloud/workspace.js.map +1 -1
- package/dist/graph/native.d.ts +2 -0
- package/dist/graph/native.d.ts.map +1 -1
- package/dist/graph/native.js +29 -4
- package/dist/graph/native.js.map +1 -1
- package/dist/hosts/claude-global.d.ts +14 -0
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +38 -3
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/init/install-record.d.ts +21 -0
- package/dist/init/install-record.d.ts.map +1 -0
- package/dist/init/install-record.js +144 -0
- package/dist/init/install-record.js.map +1 -0
- package/dist/init/plain-file.d.ts +11 -0
- package/dist/init/plain-file.d.ts.map +1 -0
- package/dist/init/plain-file.js +80 -0
- package/dist/init/plain-file.js.map +1 -0
- package/dist/mcp/brains.d.ts +72 -0
- package/dist/mcp/brains.d.ts.map +1 -0
- package/dist/mcp/brains.js +220 -0
- package/dist/mcp/brains.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +40 -5
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +7 -2
- package/dist/mcp/tools.js.map +1 -1
- package/dist/notes/cold-start.d.ts +30 -1
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +98 -19
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/every-repo.d.ts +18 -0
- package/dist/notes/every-repo.d.ts.map +1 -0
- package/dist/notes/every-repo.js +86 -0
- package/dist/notes/every-repo.js.map +1 -0
- package/dist/notes/guardrails.d.ts +8 -0
- package/dist/notes/guardrails.d.ts.map +1 -0
- package/dist/notes/guardrails.js +38 -0
- package/dist/notes/guardrails.js.map +1 -0
- package/dist/notes/lesson-index.d.ts +13 -0
- package/dist/notes/lesson-index.d.ts.map +1 -0
- package/dist/notes/lesson-index.js +135 -0
- package/dist/notes/lesson-index.js.map +1 -0
- package/dist/notes/linked-learnings.d.ts +8 -0
- package/dist/notes/linked-learnings.d.ts.map +1 -0
- package/dist/notes/linked-learnings.js +113 -0
- package/dist/notes/linked-learnings.js.map +1 -0
- package/dist/notes/replace.d.ts +14 -0
- package/dist/notes/replace.d.ts.map +1 -0
- package/dist/notes/replace.js +38 -0
- package/dist/notes/replace.js.map +1 -0
- package/dist/notes/repo-notes-dir.d.ts +2 -0
- package/dist/notes/repo-notes-dir.d.ts.map +1 -0
- package/dist/notes/repo-notes-dir.js +16 -0
- package/dist/notes/repo-notes-dir.js.map +1 -0
- package/dist/skills/anchors-cli.d.ts +33 -0
- package/dist/skills/anchors-cli.d.ts.map +1 -0
- package/dist/skills/anchors-cli.js +274 -0
- package/dist/skills/anchors-cli.js.map +1 -0
- package/dist/skills/anchors-git.d.ts +29 -0
- package/dist/skills/anchors-git.d.ts.map +1 -0
- package/dist/skills/anchors-git.js +241 -0
- package/dist/skills/anchors-git.js.map +1 -0
- package/dist/skills/anchors-wide.d.ts +25 -0
- package/dist/skills/anchors-wide.d.ts.map +1 -0
- package/dist/skills/anchors-wide.js +481 -0
- package/dist/skills/anchors-wide.js.map +1 -0
- package/dist/skills/anchors.d.ts +32 -0
- package/dist/skills/anchors.d.ts.map +1 -0
- package/dist/skills/anchors.js +485 -0
- package/dist/skills/anchors.js.map +1 -0
- package/dist/skills/check-result.d.ts +26 -0
- package/dist/skills/check-result.d.ts.map +1 -0
- package/dist/skills/check-result.js +46 -0
- package/dist/skills/check-result.js.map +1 -0
- package/dist/skills/codex-sandbox.d.ts +6 -0
- package/dist/skills/codex-sandbox.d.ts.map +1 -0
- package/dist/skills/codex-sandbox.js +55 -0
- package/dist/skills/codex-sandbox.js.map +1 -0
- package/dist/skills/compile-split.d.ts +57 -0
- package/dist/skills/compile-split.d.ts.map +1 -0
- package/dist/skills/compile-split.js +532 -0
- package/dist/skills/compile-split.js.map +1 -0
- package/dist/skills/compile-version.d.ts +37 -0
- package/dist/skills/compile-version.d.ts.map +1 -0
- package/dist/skills/compile-version.js +56 -0
- package/dist/skills/compile-version.js.map +1 -0
- package/dist/skills/compile-waits.d.ts +12 -0
- package/dist/skills/compile-waits.d.ts.map +1 -0
- package/dist/skills/compile-waits.js +52 -0
- package/dist/skills/compile-waits.js.map +1 -0
- package/dist/skills/compile-words.d.ts +82 -0
- package/dist/skills/compile-words.d.ts.map +1 -0
- package/dist/skills/compile-words.js +385 -0
- package/dist/skills/compile-words.js.map +1 -0
- package/dist/skills/compile.d.ts +35 -0
- package/dist/skills/compile.d.ts.map +1 -0
- package/dist/skills/compile.js +488 -0
- package/dist/skills/compile.js.map +1 -0
- package/dist/skills/credit-facts.d.ts +8 -0
- package/dist/skills/credit-facts.d.ts.map +1 -0
- package/dist/skills/credit-facts.js +32 -0
- package/dist/skills/credit-facts.js.map +1 -0
- package/dist/skills/directive-words.d.ts +11 -0
- package/dist/skills/directive-words.d.ts.map +1 -0
- package/dist/skills/directive-words.js +33 -0
- package/dist/skills/directive-words.js.map +1 -0
- package/dist/skills/fidelity.d.ts +42 -0
- package/dist/skills/fidelity.d.ts.map +1 -0
- package/dist/skills/fidelity.js +138 -0
- package/dist/skills/fidelity.js.map +1 -0
- package/dist/skills/forget-notice.d.ts +44 -0
- package/dist/skills/forget-notice.d.ts.map +1 -0
- package/dist/skills/forget-notice.js +131 -0
- package/dist/skills/forget-notice.js.map +1 -0
- package/dist/skills/found-skill.d.ts +35 -0
- package/dist/skills/found-skill.d.ts.map +1 -0
- package/dist/skills/found-skill.js +66 -0
- package/dist/skills/found-skill.js.map +1 -0
- package/dist/skills/front-version.d.ts +12 -0
- package/dist/skills/front-version.d.ts.map +1 -0
- package/dist/skills/front-version.js +87 -0
- package/dist/skills/front-version.js.map +1 -0
- package/dist/skills/host-facts.d.ts +51 -0
- package/dist/skills/host-facts.d.ts.map +1 -0
- package/dist/skills/host-facts.js +134 -0
- package/dist/skills/host-facts.js.map +1 -0
- package/dist/skills/ledger.d.ts +43 -0
- package/dist/skills/ledger.d.ts.map +1 -0
- package/dist/skills/ledger.js +336 -0
- package/dist/skills/ledger.js.map +1 -0
- package/dist/skills/lessons.d.ts +60 -0
- package/dist/skills/lessons.d.ts.map +1 -0
- package/dist/skills/lessons.js +396 -0
- package/dist/skills/lessons.js.map +1 -0
- package/dist/skills/offer-answers.d.ts +20 -0
- package/dist/skills/offer-answers.d.ts.map +1 -0
- package/dist/skills/offer-answers.js +51 -0
- package/dist/skills/offer-answers.js.map +1 -0
- package/dist/skills/own-folder.d.ts +9 -0
- package/dist/skills/own-folder.d.ts.map +1 -0
- package/dist/skills/own-folder.js +36 -0
- package/dist/skills/own-folder.js.map +1 -0
- package/dist/skills/person.d.ts +34 -0
- package/dist/skills/person.d.ts.map +1 -0
- package/dist/skills/person.js +102 -0
- package/dist/skills/person.js.map +1 -0
- package/dist/skills/probe-clean.d.ts +9 -0
- package/dist/skills/probe-clean.d.ts.map +1 -0
- package/dist/skills/probe-clean.js +48 -0
- package/dist/skills/probe-clean.js.map +1 -0
- package/dist/skills/probes.d.ts +26 -0
- package/dist/skills/probes.d.ts.map +1 -0
- package/dist/skills/probes.js +225 -0
- package/dist/skills/probes.js.map +1 -0
- package/dist/skills/recall.d.ts +119 -0
- package/dist/skills/recall.d.ts.map +1 -0
- package/dist/skills/recall.js +370 -0
- package/dist/skills/recall.js.map +1 -0
- package/dist/skills/receipts.d.ts +44 -0
- package/dist/skills/receipts.d.ts.map +1 -0
- package/dist/skills/receipts.js +223 -0
- package/dist/skills/receipts.js.map +1 -0
- package/dist/skills/run-checkout.d.ts +4 -0
- package/dist/skills/run-checkout.d.ts.map +1 -0
- package/dist/skills/run-checkout.js +37 -0
- package/dist/skills/run-checkout.js.map +1 -0
- package/dist/skills/runblock.d.ts +45 -0
- package/dist/skills/runblock.d.ts.map +1 -0
- package/dist/skills/runblock.js +222 -0
- package/dist/skills/runblock.js.map +1 -0
- package/dist/skills/save-parse.d.ts +42 -0
- package/dist/skills/save-parse.d.ts.map +1 -0
- package/dist/skills/save-parse.js +172 -0
- package/dist/skills/save-parse.js.map +1 -0
- package/dist/skills/save-store.d.ts +12 -0
- package/dist/skills/save-store.d.ts.map +1 -0
- package/dist/skills/save-store.js +22 -0
- package/dist/skills/save-store.js.map +1 -0
- package/dist/skills/settings.d.ts +38 -0
- package/dist/skills/settings.d.ts.map +1 -0
- package/dist/skills/settings.js +133 -0
- package/dist/skills/settings.js.map +1 -0
- package/dist/skills/skill-diff.d.ts +40 -0
- package/dist/skills/skill-diff.d.ts.map +1 -0
- package/dist/skills/skill-diff.js +191 -0
- package/dist/skills/skill-diff.js.map +1 -0
- package/dist/skills/skill-file.d.ts +24 -0
- package/dist/skills/skill-file.d.ts.map +1 -0
- package/dist/skills/skill-file.js +97 -0
- package/dist/skills/skill-file.js.map +1 -0
- package/dist/skills/skill-rebuild.d.ts +27 -0
- package/dist/skills/skill-rebuild.d.ts.map +1 -0
- package/dist/skills/skill-rebuild.js +85 -0
- package/dist/skills/skill-rebuild.js.map +1 -0
- package/dist/skills/skillmd.d.ts +17 -0
- package/dist/skills/skillmd.d.ts.map +1 -0
- package/dist/skills/skillmd.js +219 -0
- package/dist/skills/skillmd.js.map +1 -0
- package/dist/skills/skills.d.ts +2 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +1 -1
- package/dist/skills/skills.js.map +1 -1
- package/dist/skills/staleness.d.ts +27 -0
- package/dist/skills/staleness.d.ts.map +1 -0
- package/dist/skills/staleness.js +178 -0
- package/dist/skills/staleness.js.map +1 -0
- package/dist/skills/state.d.ts +36 -0
- package/dist/skills/state.d.ts.map +1 -0
- package/dist/skills/state.js +259 -0
- package/dist/skills/state.js.map +1 -0
- package/dist/skills/store-fs.d.ts +77 -0
- package/dist/skills/store-fs.d.ts.map +1 -0
- package/dist/skills/store-fs.js +194 -0
- package/dist/skills/store-fs.js.map +1 -0
- package/dist/skills/store-held.d.ts +44 -0
- package/dist/skills/store-held.d.ts.map +1 -0
- package/dist/skills/store-held.js +147 -0
- package/dist/skills/store-held.js.map +1 -0
- package/dist/skills/store.d.ts +73 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +279 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/skills/validate.d.ts +11 -0
- package/dist/skills/validate.d.ts.map +1 -0
- package/dist/skills/validate.js +112 -0
- package/dist/skills/validate.js.map +1 -0
- package/dist/skills/versions-fs.d.ts +45 -0
- package/dist/skills/versions-fs.d.ts.map +1 -0
- package/dist/skills/versions-fs.js +234 -0
- package/dist/skills/versions-fs.js.map +1 -0
- package/dist/skills/versions.d.ts +56 -0
- package/dist/skills/versions.d.ts.map +1 -0
- package/dist/skills/versions.js +351 -0
- package/dist/skills/versions.js.map +1 -0
- package/dist/trace/checks.d.ts +63 -0
- package/dist/trace/checks.d.ts.map +1 -0
- package/dist/trace/checks.js +487 -0
- package/dist/trace/checks.js.map +1 -0
- package/dist/trace/claude.d.ts +124 -0
- package/dist/trace/claude.d.ts.map +1 -0
- package/dist/trace/claude.js +303 -0
- package/dist/trace/claude.js.map +1 -0
- package/dist/trace/codex-exec.d.ts +22 -0
- package/dist/trace/codex-exec.d.ts.map +1 -0
- package/dist/trace/codex-exec.js +129 -0
- package/dist/trace/codex-exec.js.map +1 -0
- package/dist/trace/codex-meta.d.ts +23 -0
- package/dist/trace/codex-meta.d.ts.map +1 -0
- package/dist/trace/codex-meta.js +112 -0
- package/dist/trace/codex-meta.js.map +1 -0
- package/dist/trace/codex.d.ts +33 -0
- package/dist/trace/codex.d.ts.map +1 -0
- package/dist/trace/codex.js +485 -0
- package/dist/trace/codex.js.map +1 -0
- package/dist/trace/cursor.d.ts +16 -0
- package/dist/trace/cursor.d.ts.map +1 -0
- package/dist/trace/cursor.js +133 -0
- package/dist/trace/cursor.js.map +1 -0
- package/dist/trace/dialect.d.ts +43 -0
- package/dist/trace/dialect.d.ts.map +1 -0
- package/dist/trace/dialect.js +95 -0
- package/dist/trace/dialect.js.map +1 -0
- package/dist/trace/epochs.d.ts +10 -0
- package/dist/trace/epochs.d.ts.map +1 -0
- package/dist/trace/epochs.js +16 -0
- package/dist/trace/epochs.js.map +1 -0
- package/dist/trace/failure.d.ts +15 -0
- package/dist/trace/failure.d.ts.map +1 -0
- package/dist/trace/failure.js +69 -0
- package/dist/trace/failure.js.map +1 -0
- package/dist/trace/gate-file.d.ts +71 -0
- package/dist/trace/gate-file.d.ts.map +1 -0
- package/dist/trace/gate-file.js +329 -0
- package/dist/trace/gate-file.js.map +1 -0
- package/dist/trace/guard-fast.d.ts +22 -0
- package/dist/trace/guard-fast.d.ts.map +1 -0
- package/dist/trace/guard-fast.js +213 -0
- package/dist/trace/guard-fast.js.map +1 -0
- package/dist/trace/housekeeping.d.ts +5 -0
- package/dist/trace/housekeeping.d.ts.map +1 -0
- package/dist/trace/housekeeping.js +93 -0
- package/dist/trace/housekeeping.js.map +1 -0
- package/dist/trace/jobs.d.ts +52 -0
- package/dist/trace/jobs.d.ts.map +1 -0
- package/dist/trace/jobs.js +182 -0
- package/dist/trace/jobs.js.map +1 -0
- package/dist/trace/known-repo.d.ts +3 -0
- package/dist/trace/known-repo.d.ts.map +1 -0
- package/dist/trace/known-repo.js +55 -0
- package/dist/trace/known-repo.js.map +1 -0
- package/dist/trace/pool.d.ts +40 -0
- package/dist/trace/pool.d.ts.map +1 -0
- package/dist/trace/pool.js +154 -0
- package/dist/trace/pool.js.map +1 -0
- package/dist/trace/repairs.d.ts +27 -0
- package/dist/trace/repairs.d.ts.map +1 -0
- package/dist/trace/repairs.js +303 -0
- package/dist/trace/repairs.js.map +1 -0
- package/dist/trace/run-calls.d.ts +82 -0
- package/dist/trace/run-calls.d.ts.map +1 -0
- package/dist/trace/run-calls.js +331 -0
- package/dist/trace/run-calls.js.map +1 -0
- package/dist/trace/run-join.d.ts +20 -0
- package/dist/trace/run-join.d.ts.map +1 -0
- package/dist/trace/run-join.js +99 -0
- package/dist/trace/run-join.js.map +1 -0
- package/dist/trace/run-sheets.d.ts +26 -0
- package/dist/trace/run-sheets.d.ts.map +1 -0
- package/dist/trace/run-sheets.js +145 -0
- package/dist/trace/run-sheets.js.map +1 -0
- package/dist/trace/run-turns.d.ts +24 -0
- package/dist/trace/run-turns.d.ts.map +1 -0
- package/dist/trace/run-turns.js +67 -0
- package/dist/trace/run-turns.js.map +1 -0
- package/dist/trace/run-verdict.d.ts +24 -0
- package/dist/trace/run-verdict.d.ts.map +1 -0
- package/dist/trace/run-verdict.js +176 -0
- package/dist/trace/run-verdict.js.map +1 -0
- package/dist/trace/runs.d.ts +54 -0
- package/dist/trace/runs.d.ts.map +1 -0
- package/dist/trace/runs.js +501 -0
- package/dist/trace/runs.js.map +1 -0
- package/dist/trace/skill-session.d.ts +64 -0
- package/dist/trace/skill-session.d.ts.map +1 -0
- package/dist/trace/skill-session.js +232 -0
- package/dist/trace/skill-session.js.map +1 -0
- package/dist/trace/tamper.d.ts +12 -0
- package/dist/trace/tamper.d.ts.map +1 -0
- package/dist/trace/tamper.js +405 -0
- package/dist/trace/tamper.js.map +1 -0
- package/dist/trace/typed.d.ts +30 -0
- package/dist/trace/typed.d.ts.map +1 -0
- package/dist/trace/typed.js +132 -0
- package/dist/trace/typed.js.map +1 -0
- package/dist/trace/wall-state.d.ts +86 -0
- package/dist/trace/wall-state.d.ts.map +1 -0
- package/dist/trace/wall-state.js +279 -0
- package/dist/trace/wall-state.js.map +1 -0
- package/dist/trace/walls.d.ts +40 -0
- package/dist/trace/walls.d.ts.map +1 -0
- package/dist/trace/walls.js +318 -0
- package/dist/trace/walls.js.map +1 -0
- package/dist/vendor/tree-sitter-swift/LICENSE +21 -0
- package/dist/vendor/tree-sitter-swift/node-types.json +30694 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/darwin-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/linux-x64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-arm64/tree-sitter-swift.node +0 -0
- package/dist/vendor/tree-sitter-swift/prebuilds/win32-x64/tree-sitter-swift.node +0 -0
- package/package.json +6 -3
- package/scripts/stamp-telemetry-key.mjs +8 -5
- package/scripts/vendor-grammars.mjs +35 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { FixDeltaKind, WallClass } from './types.js';
|
|
2
|
+
export interface WallsFile {
|
|
3
|
+
v: 1;
|
|
4
|
+
/** Session hashes (12 hex) whose hits and repairs are already in, with 'size:mtimeMs' when init read them. */
|
|
5
|
+
read: Record<string, string>;
|
|
6
|
+
classes: Partial<Record<WallClass, WallClassState>>;
|
|
7
|
+
}
|
|
8
|
+
export interface WallClassState {
|
|
9
|
+
/** One per (sh, epoch, program); newest last; at most 60. */
|
|
10
|
+
seen: Array<{
|
|
11
|
+
d: string;
|
|
12
|
+
sh: string;
|
|
13
|
+
epoch: number;
|
|
14
|
+
repo: string;
|
|
15
|
+
program: string;
|
|
16
|
+
}>;
|
|
17
|
+
/** Repairs: no command text, delta kinds and names only; newest last; at most 60. */
|
|
18
|
+
fixed: Array<{
|
|
19
|
+
d: string;
|
|
20
|
+
sh: string;
|
|
21
|
+
epoch: number;
|
|
22
|
+
repo: string;
|
|
23
|
+
program: string;
|
|
24
|
+
delta: Array<{
|
|
25
|
+
kind: FixDeltaKind;
|
|
26
|
+
name: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
/** lesson id -> epochs it worked in (4.10). */
|
|
30
|
+
lessons: Record<string, {
|
|
31
|
+
worked: Array<{
|
|
32
|
+
sh: string;
|
|
33
|
+
epoch: number;
|
|
34
|
+
d: string;
|
|
35
|
+
}>;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
type Worked = {
|
|
39
|
+
cls: WallClass;
|
|
40
|
+
lessonId: string;
|
|
41
|
+
sh: string;
|
|
42
|
+
epoch: number;
|
|
43
|
+
d: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* D98: the one key a program (or a wrapper or enabling step) is kept under: its first word, lower-cased, of the
|
|
47
|
+
* PROGRAM shape; '' when it has none, which drops the entry. b2 names programs with their verb (`go test`,
|
|
48
|
+
* `npm install`, `colima ssh --`): writers and readers both go through here, so they always meet.
|
|
49
|
+
*/
|
|
50
|
+
export declare function programKey(name: string): string;
|
|
51
|
+
/** `<trail home>/walls.json`. */
|
|
52
|
+
export declare function wallsPath(env?: NodeJS.ProcessEnv): string;
|
|
53
|
+
/** {v:1, read:{}, classes:{}} on missing or bad; entries of the wrong shape dropped. */
|
|
54
|
+
export declare function readWalls(env?: NodeJS.ProcessEnv): WallsFile;
|
|
55
|
+
/** One locked rewrite (wait 200 ms, else skip and log with hookError). Idempotent per (sh, epoch, cls, program). */
|
|
56
|
+
export declare function noteWalls(add: {
|
|
57
|
+
seen?: Array<{
|
|
58
|
+
cls: WallClass;
|
|
59
|
+
} & WallClassState['seen'][number]>;
|
|
60
|
+
fixed?: Array<{
|
|
61
|
+
cls: WallClass;
|
|
62
|
+
} & WallClassState['fixed'][number]>;
|
|
63
|
+
read?: Record<string, string>;
|
|
64
|
+
worked?: Worked[];
|
|
65
|
+
}, env?: NodeJS.ProcessEnv): void;
|
|
66
|
+
/**
|
|
67
|
+
* Earlier epochs (not this one) where (repo, cls, program) was hit and fixed, in the 45 days up to `now` (moment 3).
|
|
68
|
+
* `sameDelta`: how many of them had this epoch's delta (this epoch's repair is read from `w`; when it isn't there,
|
|
69
|
+
* 0). `from`: those same-delta epochs, then this one, oldest first: what a lesson kept from this offer has worked in (R48).
|
|
70
|
+
*/
|
|
71
|
+
export declare function repairsSeen(w: WallsFile, repo: string, cls: WallClass, program: string, sh: string, epoch: number, now?: Date): {
|
|
72
|
+
epochs: number;
|
|
73
|
+
firstAt: string | null;
|
|
74
|
+
sameDelta: number;
|
|
75
|
+
from: Array<{
|
|
76
|
+
sh: string;
|
|
77
|
+
epoch: number;
|
|
78
|
+
d: string;
|
|
79
|
+
}>;
|
|
80
|
+
};
|
|
81
|
+
/** Distinct local days a class was seen on this machine (init's guardrail bar, 4.5), oldest first; none after today. */
|
|
82
|
+
export declare function wallDays(w: WallsFile, cls: WallClass, now?: Date): string[];
|
|
83
|
+
/** Distinct epochs `lessonId` worked in for `cls`, none dated after today. */
|
|
84
|
+
export declare function lessonWorkedEpochs(w: WallsFile, cls: WallClass, lessonId: string, now?: Date): number;
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=wall-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-state.d.ts","sourceRoot":"","sources":["../../src/trace/wall-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<trail home>/walls.json` (design 2.7, R57): one machine-wide file for the
|
|
3
|
+
* wall hits seen, the repairs that fixed them, the sessions init already
|
|
4
|
+
* counted, and the lessons that worked.
|
|
5
|
+
*
|
|
6
|
+
* Classes, programs, repo keys, delta kinds and names, 12-hex session
|
|
7
|
+
* hashes and local dates only: never a command, never its output. Every
|
|
8
|
+
* value is checked against its shape on the way in, so an entry that could
|
|
9
|
+
* carry text is dropped rather than written.
|
|
10
|
+
*
|
|
11
|
+
* Writes take the file's lock for at most 200 ms; a write that can't get it
|
|
12
|
+
* is skipped and logged (a lost hit is better than a hook that waits).
|
|
13
|
+
*/
|
|
14
|
+
import { closeSync, constants, fstatSync, openSync, readSync } from 'node:fs';
|
|
15
|
+
import { hookError } from '../claude/skills-hook-util.js';
|
|
16
|
+
import { WALL_CLASSES } from '../notes/learning-fields.js';
|
|
17
|
+
import { trailPath, withLock, writePrivateJson } from '../util/private-fs.js';
|
|
18
|
+
const CAP = 60;
|
|
19
|
+
const WORKED_CAP = 60;
|
|
20
|
+
/** Lesson ids kept per class: the ones that worked most recently. */
|
|
21
|
+
const LESSONS_CAP = 60;
|
|
22
|
+
/** The file holds well under 300 KB at its caps; anything bigger (or not a plain file) is not Trail's. */
|
|
23
|
+
const MAX_FILE = 512 * 1024;
|
|
24
|
+
const READ_CAP = 5000;
|
|
25
|
+
const WINDOW_DAYS = 45;
|
|
26
|
+
const SH = /^[0-9a-f]{12}$/;
|
|
27
|
+
const DAY = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
28
|
+
const REPO = /^[a-z0-9._-]+(?:\/[a-z0-9._-]+)*$/;
|
|
29
|
+
const PROGRAM = /^[A-Za-z0-9._+-]{1,40}$/;
|
|
30
|
+
const DELTA_NAME = /^[A-Za-z0-9_][A-Za-z0-9._+-]{0,63}$|^--?[A-Za-z0-9][A-Za-z0-9-]{0,62}$/;
|
|
31
|
+
const LESSON_ID = /^(?:l|ls)-[0-9a-f]{6,16}$/;
|
|
32
|
+
const READ_VALUE = /^\d{1,15}:\d{1,16}(?:\.\d+)?$/;
|
|
33
|
+
const KINDS = new Set(['env', 'flag', 'wrapper', 'enable-step']);
|
|
34
|
+
const CLASSES = new Set(WALL_CLASSES);
|
|
35
|
+
/**
|
|
36
|
+
* D98: the one key a program (or a wrapper or enabling step) is kept under: its first word, lower-cased, of the
|
|
37
|
+
* PROGRAM shape; '' when it has none, which drops the entry. b2 names programs with their verb (`go test`,
|
|
38
|
+
* `npm install`, `colima ssh --`): writers and readers both go through here, so they always meet.
|
|
39
|
+
*/
|
|
40
|
+
export function programKey(name) {
|
|
41
|
+
if (typeof name !== 'string')
|
|
42
|
+
return '';
|
|
43
|
+
const first = name.trim().split(/\s+/, 1)[0].toLowerCase();
|
|
44
|
+
return PROGRAM.test(first) ? first : '';
|
|
45
|
+
}
|
|
46
|
+
/** The entry with its program, and its wrapper and enabling-step names, as program keys (env and flag names as they are). */
|
|
47
|
+
function keyed(e) {
|
|
48
|
+
if (!isObj(e))
|
|
49
|
+
return e;
|
|
50
|
+
const out = { ...e, program: programKey(e.program) };
|
|
51
|
+
if (Array.isArray(e.delta)) {
|
|
52
|
+
out.delta = e.delta.map((x) => (isObj(x) && (x.kind === 'wrapper' || x.kind === 'enable-step') ? { ...x, name: programKey(x.name) } : x));
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
/** `<trail home>/walls.json`. */
|
|
57
|
+
export function wallsPath(env = process.env) {
|
|
58
|
+
return trailPath(env, 'walls.json');
|
|
59
|
+
}
|
|
60
|
+
const empty = () => ({ v: 1, read: {}, classes: {} });
|
|
61
|
+
const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
62
|
+
const epochOk = (n) => Number.isInteger(n) && n >= 0 && n < 1e6;
|
|
63
|
+
/** A YYYY-MM-DD that is on the calendar (no month 13, no Feb 31). */
|
|
64
|
+
function dayOk(d) {
|
|
65
|
+
const m = typeof d === 'string' ? DAY.exec(d) : null;
|
|
66
|
+
if (!m)
|
|
67
|
+
return false;
|
|
68
|
+
const [y, mo, da] = [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
69
|
+
const t = new Date(Date.UTC(y, mo - 1, da));
|
|
70
|
+
return t.getUTCFullYear() === y && t.getUTCMonth() === mo - 1 && t.getUTCDate() === da;
|
|
71
|
+
}
|
|
72
|
+
/** Oldest first by day, keeping the order of equal days (newest last), then the last `cap`. */
|
|
73
|
+
const newestLast = (xs, cap) => [...xs].sort((a, b) => (a.d < b.d ? -1 : a.d > b.d ? 1 : 0)).slice(-cap);
|
|
74
|
+
/** The lesson ids that worked most recently, at most LESSONS_CAP. */
|
|
75
|
+
function capLessons(l) {
|
|
76
|
+
const ids = Object.keys(l);
|
|
77
|
+
if (ids.length <= LESSONS_CAP)
|
|
78
|
+
return l;
|
|
79
|
+
const last = (id) => l[id].worked.reduce((m, w) => (w.d > m ? w.d : m), '');
|
|
80
|
+
const keep = new Set(ids.map((id, i) => ({ id, i, d: last(id) })).sort((a, b) => (a.d < b.d ? -1 : a.d > b.d ? 1 : a.i - b.i)).slice(-LESSONS_CAP).map((x) => x.id));
|
|
81
|
+
return Object.fromEntries(ids.filter((id) => keep.has(id)).map((id) => [id, l[id]]));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The file's text, or null: never through a link, never a FIFO or device (O_NONBLOCK, then a plain-file check),
|
|
85
|
+
* never more than MAX_FILE. A planted FIFO or a link to /dev/zero would otherwise hang or fill the hook.
|
|
86
|
+
*/
|
|
87
|
+
function readSmall(path) {
|
|
88
|
+
let fd = -1;
|
|
89
|
+
try {
|
|
90
|
+
fd = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
|
|
91
|
+
const st = fstatSync(fd);
|
|
92
|
+
if (!st.isFile() || st.size > MAX_FILE)
|
|
93
|
+
return null;
|
|
94
|
+
const buf = Buffer.alloc(st.size);
|
|
95
|
+
const n = readSync(fd, buf, 0, st.size, 0);
|
|
96
|
+
return buf.toString('utf8', 0, n);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
if (fd >= 0)
|
|
103
|
+
try {
|
|
104
|
+
closeSync(fd);
|
|
105
|
+
}
|
|
106
|
+
catch { /* closed */ }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function okSeen(s) {
|
|
110
|
+
if (!isObj(s))
|
|
111
|
+
return false;
|
|
112
|
+
return dayOk(s.d) && typeof s.sh === 'string' && SH.test(s.sh) && epochOk(s.epoch)
|
|
113
|
+
&& typeof s.repo === 'string' && s.repo.length <= 200 && REPO.test(s.repo) && typeof s.program === 'string' && PROGRAM.test(s.program);
|
|
114
|
+
}
|
|
115
|
+
function okFixed(f) {
|
|
116
|
+
if (!okSeen(f) || !Array.isArray(f.delta))
|
|
117
|
+
return false;
|
|
118
|
+
const delta = f.delta;
|
|
119
|
+
return delta.length > 0 && delta.length <= 8
|
|
120
|
+
&& delta.every((x) => isObj(x) && KINDS.has(x.kind) && typeof x.name === 'string' && DELTA_NAME.test(x.name));
|
|
121
|
+
}
|
|
122
|
+
function okWorked(w) {
|
|
123
|
+
return isObj(w) && typeof w.sh === 'string' && SH.test(w.sh) && epochOk(w.epoch) && dayOk(w.d);
|
|
124
|
+
}
|
|
125
|
+
/** Only the fields of the shape, so nothing else rides along into the file. */
|
|
126
|
+
const seenOf = (s) => ({ d: s.d, sh: s.sh, epoch: s.epoch, repo: s.repo, program: s.program });
|
|
127
|
+
const fixedOf = (f) => ({ ...seenOf(f), delta: f.delta.map((x) => ({ kind: x.kind, name: x.name })) });
|
|
128
|
+
function cleanClass(c) {
|
|
129
|
+
const out = { seen: [], fixed: [], lessons: {} };
|
|
130
|
+
if (!isObj(c))
|
|
131
|
+
return out;
|
|
132
|
+
if (Array.isArray(c.seen))
|
|
133
|
+
out.seen = newestLast(c.seen.filter(okSeen).map(seenOf), CAP);
|
|
134
|
+
if (Array.isArray(c.fixed))
|
|
135
|
+
out.fixed = newestLast(c.fixed.filter(okFixed).map(fixedOf), CAP);
|
|
136
|
+
if (isObj(c.lessons)) {
|
|
137
|
+
for (const [id, l] of Object.entries(c.lessons)) {
|
|
138
|
+
if (!LESSON_ID.test(id) || !isObj(l) || !Array.isArray(l.worked))
|
|
139
|
+
continue;
|
|
140
|
+
out.lessons[id] = { worked: newestLast(l.worked.filter(okWorked).map((w) => ({ sh: w.sh, epoch: w.epoch, d: w.d })), WORKED_CAP) };
|
|
141
|
+
}
|
|
142
|
+
out.lessons = capLessons(out.lessons);
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
/** {v:1, read:{}, classes:{}} on missing or bad; entries of the wrong shape dropped. */
|
|
147
|
+
export function readWalls(env = process.env) {
|
|
148
|
+
let raw = null;
|
|
149
|
+
try {
|
|
150
|
+
raw = JSON.parse(readSmall(wallsPath(env)) ?? 'null');
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
raw = null;
|
|
154
|
+
}
|
|
155
|
+
if (!isObj(raw) || raw.v !== 1 || !isObj(raw.read) || !isObj(raw.classes))
|
|
156
|
+
return empty();
|
|
157
|
+
const out = empty();
|
|
158
|
+
for (const [sh, v] of Object.entries(raw.read))
|
|
159
|
+
if (SH.test(sh) && typeof v === 'string' && READ_VALUE.test(v))
|
|
160
|
+
out.read[sh] = v;
|
|
161
|
+
for (const [cls, c] of Object.entries(raw.classes))
|
|
162
|
+
if (CLASSES.has(cls))
|
|
163
|
+
out.classes[cls] = cleanClass(c);
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
const seenKey = (s) => `${s.sh}|${s.epoch}|${s.program}`;
|
|
167
|
+
function classOf(w, cls) {
|
|
168
|
+
return (w.classes[cls] ??= { seen: [], fixed: [], lessons: {} });
|
|
169
|
+
}
|
|
170
|
+
/** Adds `add` to `w` in memory: idempotent per (sh, epoch, cls, program); newest last; capped. */
|
|
171
|
+
function merge(w, add) {
|
|
172
|
+
for (const raw of add.seen ?? []) {
|
|
173
|
+
const s = keyed(raw);
|
|
174
|
+
if (!CLASSES.has(s?.cls) || !okSeen(s))
|
|
175
|
+
continue;
|
|
176
|
+
const c = classOf(w, s.cls);
|
|
177
|
+
if (!c.seen.some((x) => seenKey(x) === seenKey(s)))
|
|
178
|
+
c.seen.push(seenOf(s));
|
|
179
|
+
c.seen = newestLast(c.seen, CAP);
|
|
180
|
+
}
|
|
181
|
+
for (const raw of add.fixed ?? []) {
|
|
182
|
+
const f = keyed(raw);
|
|
183
|
+
if (!CLASSES.has(f?.cls) || !okFixed(f))
|
|
184
|
+
continue;
|
|
185
|
+
const c = classOf(w, f.cls);
|
|
186
|
+
if (!c.fixed.some((x) => seenKey(x) === seenKey(f)))
|
|
187
|
+
c.fixed.push(fixedOf(f));
|
|
188
|
+
c.fixed = newestLast(c.fixed, CAP);
|
|
189
|
+
}
|
|
190
|
+
for (const k of add.worked ?? []) {
|
|
191
|
+
if (!CLASSES.has(k?.cls) || !LESSON_ID.test(k.lessonId) || !okWorked(k))
|
|
192
|
+
continue;
|
|
193
|
+
const l = (classOf(w, k.cls).lessons[k.lessonId] ??= { worked: [] });
|
|
194
|
+
if (!l.worked.some((x) => x.sh === k.sh && x.epoch === k.epoch))
|
|
195
|
+
l.worked.push({ sh: k.sh, epoch: k.epoch, d: k.d });
|
|
196
|
+
l.worked = newestLast(l.worked, WORKED_CAP);
|
|
197
|
+
}
|
|
198
|
+
for (const c of Object.values(w.classes))
|
|
199
|
+
if (c)
|
|
200
|
+
c.lessons = capLessons(c.lessons);
|
|
201
|
+
for (const [sh, v] of Object.entries(add.read ?? {}))
|
|
202
|
+
if (SH.test(sh) && typeof v === 'string' && READ_VALUE.test(v))
|
|
203
|
+
w.read[sh] = v;
|
|
204
|
+
const shs = Object.keys(w.read);
|
|
205
|
+
if (shs.length > READ_CAP)
|
|
206
|
+
for (const sh of shs.slice(0, shs.length - READ_CAP))
|
|
207
|
+
delete w.read[sh];
|
|
208
|
+
// A class left with nothing in it is not kept.
|
|
209
|
+
for (const cls of Object.keys(w.classes)) {
|
|
210
|
+
const c = w.classes[cls];
|
|
211
|
+
if (!c.seen.length && !c.fixed.length && !Object.keys(c.lessons).length)
|
|
212
|
+
delete w.classes[cls];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** One locked rewrite (wait 200 ms, else skip and log with hookError). Idempotent per (sh, epoch, cls, program). */
|
|
216
|
+
export function noteWalls(add, env = process.env) {
|
|
217
|
+
const path = wallsPath(env);
|
|
218
|
+
try {
|
|
219
|
+
const r = withLock(path, () => {
|
|
220
|
+
const w = readWalls(env);
|
|
221
|
+
merge(w, add ?? {});
|
|
222
|
+
writePrivateJson(path, w);
|
|
223
|
+
});
|
|
224
|
+
if (!r.ok) {
|
|
225
|
+
const e = new Error('walls.json is locked');
|
|
226
|
+
e.name = 'WallsLockTimeout';
|
|
227
|
+
hookError('walls', e, env);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
hookError('walls', e, env);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** YYYY-MM-DD of `d` in local time. */
|
|
235
|
+
function localDay(d) {
|
|
236
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
|
|
237
|
+
}
|
|
238
|
+
const deltaKey = (f) => f.delta.map((x) => `${x.kind}:${x.name}`).sort().join(',');
|
|
239
|
+
/**
|
|
240
|
+
* Earlier epochs (not this one) where (repo, cls, program) was hit and fixed, in the 45 days up to `now` (moment 3).
|
|
241
|
+
* `sameDelta`: how many of them had this epoch's delta (this epoch's repair is read from `w`; when it isn't there,
|
|
242
|
+
* 0). `from`: those same-delta epochs, then this one, oldest first: what a lesson kept from this offer has worked in (R48).
|
|
243
|
+
*/
|
|
244
|
+
export function repairsSeen(w, repo, cls, program, sh, epoch, now = new Date()) {
|
|
245
|
+
program = programKey(program);
|
|
246
|
+
const fixed = program ? w.classes?.[cls]?.fixed ?? [] : [];
|
|
247
|
+
const since = localDay(new Date(now.getTime() - WINDOW_DAYS * 86_400_000));
|
|
248
|
+
const today = localDay(now);
|
|
249
|
+
const mine = fixed.filter((f) => f.repo === repo && f.program === program);
|
|
250
|
+
const self = mine.find((f) => f.sh === sh && f.epoch === epoch) ?? null;
|
|
251
|
+
const earlier = new Map();
|
|
252
|
+
for (const f of mine) {
|
|
253
|
+
if ((f.sh === sh && f.epoch === epoch) || f.d < since || f.d > today)
|
|
254
|
+
continue;
|
|
255
|
+
const k = `${f.sh}|${f.epoch}`;
|
|
256
|
+
if (!earlier.has(k))
|
|
257
|
+
earlier.set(k, f);
|
|
258
|
+
}
|
|
259
|
+
const list = [...earlier.values()].sort((a, b) => (a.d === b.d ? 0 : a.d < b.d ? -1 : 1));
|
|
260
|
+
const same = self ? list.filter((f) => deltaKey(f) === deltaKey(self)) : [];
|
|
261
|
+
return {
|
|
262
|
+
epochs: list.length,
|
|
263
|
+
firstAt: list[0]?.d ?? null,
|
|
264
|
+
sameDelta: same.length,
|
|
265
|
+
from: self ? [...same, self].map((f) => ({ sh: f.sh, epoch: f.epoch, d: f.d })) : [],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/** Distinct local days a class was seen on this machine (init's guardrail bar, 4.5), oldest first; none after today. */
|
|
269
|
+
export function wallDays(w, cls, now = new Date()) {
|
|
270
|
+
const today = localDay(now);
|
|
271
|
+
return [...new Set((w.classes?.[cls]?.seen ?? []).map((s) => s.d).filter((d) => d <= today))].sort();
|
|
272
|
+
}
|
|
273
|
+
/** Distinct epochs `lessonId` worked in for `cls`, none dated after today. */
|
|
274
|
+
export function lessonWorkedEpochs(w, cls, lessonId, now = new Date()) {
|
|
275
|
+
const today = localDay(now);
|
|
276
|
+
const worked = (w.classes?.[cls]?.lessons?.[lessonId]?.worked ?? []).filter((x) => x.d <= today);
|
|
277
|
+
return new Set(worked.map((x) => `${x.sh}|${x.epoch}`)).size;
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=wall-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-state.js","sourceRoot":"","sources":["../../src/trace/wall-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { WallClass } from './types.js';
|
|
2
|
+
export interface WallCtx {
|
|
3
|
+
hasProgram(p: string): boolean;
|
|
4
|
+
/** The remote's SSH address (sshRemoteFor), or null. */
|
|
5
|
+
remoteSsh: string | null;
|
|
6
|
+
}
|
|
7
|
+
export interface WallEntry {
|
|
8
|
+
cls: WallClass;
|
|
9
|
+
/** Line-anchored patterns, tried on the first and last 4 KB of the result (4.10). */
|
|
10
|
+
patterns: readonly RegExp[];
|
|
11
|
+
/** Programs one of whose segments must be in the command for the class to match, or null for any (R28). */
|
|
12
|
+
programs: readonly string[] | null;
|
|
13
|
+
/** Fixed words naming the wall, for offers and the screen. */
|
|
14
|
+
words: string;
|
|
15
|
+
/** The human-written fix (4.10 table). ctx says which form applies (colima on PATH, the remote's ssh form). */
|
|
16
|
+
fix(ctx: WallCtx): string;
|
|
17
|
+
/** A guardrail init may offer for it, or null. */
|
|
18
|
+
guardrail: {
|
|
19
|
+
title: string;
|
|
20
|
+
text: string;
|
|
21
|
+
fileName: string;
|
|
22
|
+
check?: 'no-timeout';
|
|
23
|
+
applies: 'every repo' | 'this repo';
|
|
24
|
+
} | null;
|
|
25
|
+
}
|
|
26
|
+
/** The parts every fix line shares (b7 holds them to the words rules with the other copy constants). */
|
|
27
|
+
export declare const WALL_COPY: Record<string, string>;
|
|
28
|
+
export declare const WALLS: readonly WallEntry[];
|
|
29
|
+
/** `https://host/owner/repo(.git)` to `git@host:owner/repo.git`; never a user or token; null for anything else. */
|
|
30
|
+
export declare function sshRemoteFor(url: string): string | null;
|
|
31
|
+
/** Null unless one class matches. `failed` false means the command exited 0 (P23 limits apply). */
|
|
32
|
+
export declare function matchWall(result: string, command: string, failed: boolean): WallClass | null;
|
|
33
|
+
/** '[trail] Trail, the tool this person installed, recognizes this error ...' (4.10, D88); '' for an unknown class. */
|
|
34
|
+
export declare function wallFixText(cls: WallClass, ctx: WallCtx): string;
|
|
35
|
+
/**
|
|
36
|
+
* '[trail] What fixed this here before (...worked on {date1} and {date2}): {lesson text}', only when the lesson
|
|
37
|
+
* worked on 2 or more days given as local dates (4.10); the newest two are said. '' otherwise.
|
|
38
|
+
*/
|
|
39
|
+
export declare function lastTimeText(lessonText: string, workedOn: string[]): string;
|
|
40
|
+
//# sourceMappingURL=walls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walls.d.ts","sourceRoot":"","sources":["../../src/trace/walls.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,OAAO;IACtB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,wDAAwD;IACxD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,SAAS,CAAC;IACf,qFAAqF;IACrF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,2GAA2G;IAC3G,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,+GAA+G;IAC/G,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,kDAAkD;IAClD,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC;CAChI;AAQD,wGAAwG;AACxG,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG5C,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,SAAS,SAAS,EAgFU,CAAC;AA0BjD,mHAAmH;AACnH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIvD;AA0ED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CA0B5F;AAED,uHAAuH;AACvH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhE;AASD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAY3E"}
|