@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 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/trace/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ReadOptions {
|
|
2
|
+
/** How much of the file a read with no usable cursor takes, from the end. Default 8 MB. */
|
|
3
|
+
firstReadBytes?: number;
|
|
4
|
+
}
|
|
5
|
+
/** Small state a reader keeps between reads (open tool calls), saved with the cursor. */
|
|
6
|
+
export type Memo = Record<string, unknown>;
|
|
7
|
+
export declare const FIRST_READ_BYTES: number;
|
|
8
|
+
/**
|
|
9
|
+
* Hand each complete line `path` gained since the last read to `onLine`, with
|
|
10
|
+
* the byte offset where the line starts in the file, then save where the read
|
|
11
|
+
* stopped under the `trace` key of the JSON at `cursorPath` (0600), keeping
|
|
12
|
+
* any other keys there. `memo` starts empty whenever the read starts over.
|
|
13
|
+
* Throws when `path` can't be read; the caller decides how to fail open.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readAppended(path: string, cursorPath: string, onLine: (line: string, memo: Memo, offset: number) => void, opts?: ReadOptions): void;
|
|
16
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/trace/cursor.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,yFAAyF;AACzF,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAqChD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,GAAE,WAAgB,GAAG,IAAI,CAwEvJ"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading only what a growing JSONL file gained since the last read. Hooks run
|
|
3
|
+
* on every turn and one real transcript passed 233 MB; reading it from the top
|
|
4
|
+
* costs seconds, so each read starts at a byte offset saved in a small cursor
|
|
5
|
+
* file and stops at the last complete line. A half-written last line is left
|
|
6
|
+
* for the next read. The cursor holds offsets, the file's identity and a hash
|
|
7
|
+
* of the few bytes before the offset, never any of the file's text.
|
|
8
|
+
*
|
|
9
|
+
* When the cursor doesn't match the file (none yet, the file shrank, was
|
|
10
|
+
* replaced, or was rewritten in place), the read starts over. A first read
|
|
11
|
+
* takes at most the last `firstReadBytes` of the file, starting at a line
|
|
12
|
+
* boundary, so a hook that meets a huge session late still finishes in time.
|
|
13
|
+
* Pass `Infinity` to read a whole file (trail init over past sessions).
|
|
14
|
+
*/
|
|
15
|
+
import { closeSync, constants, fstatSync, openSync, readSync } from "node:fs";
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
import { readJson } from "../util/state.js";
|
|
18
|
+
import { writePrivateJson } from "./state.js";
|
|
19
|
+
export const FIRST_READ_BYTES = 8 * 1024 * 1024;
|
|
20
|
+
const CHUNK_BYTES = 4 * 1024 * 1024;
|
|
21
|
+
/** Bytes before the offset hashed to notice a file rewritten in place. */
|
|
22
|
+
const PRINT_BYTES = 64;
|
|
23
|
+
const NEWLINE = 0x0a;
|
|
24
|
+
function parseCursor(v) {
|
|
25
|
+
if (!v || typeof v !== "object" || Array.isArray(v))
|
|
26
|
+
return null;
|
|
27
|
+
const c = v;
|
|
28
|
+
if (typeof c.offset !== "number" || !Number.isSafeInteger(c.offset) || c.offset < 0)
|
|
29
|
+
return null;
|
|
30
|
+
const memo = c.memo && typeof c.memo === "object" && !Array.isArray(c.memo) ? c.memo : {};
|
|
31
|
+
return { offset: c.offset, dev: Number(c.dev) || 0, ino: Number(c.ino) || 0, print: typeof c.print === "string" ? c.print : "", memo };
|
|
32
|
+
}
|
|
33
|
+
/** A short hash of the bytes just before `offset`: "" at the start of the file. */
|
|
34
|
+
function fingerprint(fd, offset) {
|
|
35
|
+
if (offset <= 0)
|
|
36
|
+
return "";
|
|
37
|
+
const len = Math.min(PRINT_BYTES, offset);
|
|
38
|
+
const buf = Buffer.alloc(len);
|
|
39
|
+
const got = readSync(fd, buf, 0, len, offset - len);
|
|
40
|
+
return createHash("sha1").update(buf.subarray(0, got)).digest("hex").slice(0, 16);
|
|
41
|
+
}
|
|
42
|
+
/** Whether the byte just before `offset` ends a line. */
|
|
43
|
+
function endsLine(fd, offset) {
|
|
44
|
+
const b = Buffer.alloc(1);
|
|
45
|
+
return readSync(fd, b, 0, 1, offset - 1) === 1 && b[0] === NEWLINE;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Hand each complete line `path` gained since the last read to `onLine`, with
|
|
49
|
+
* the byte offset where the line starts in the file, then save where the read
|
|
50
|
+
* stopped under the `trace` key of the JSON at `cursorPath` (0600), keeping
|
|
51
|
+
* any other keys there. `memo` starts empty whenever the read starts over.
|
|
52
|
+
* Throws when `path` can't be read; the caller decides how to fail open.
|
|
53
|
+
*/
|
|
54
|
+
export function readAppended(path, cursorPath, onLine, opts = {}) {
|
|
55
|
+
// O_NONBLOCK: a FIFO where the transcript should be is opened at once and then refused, never waited on (review).
|
|
56
|
+
const fd = openSync(path, constants.O_RDONLY | (constants.O_NONBLOCK ?? 0));
|
|
57
|
+
try {
|
|
58
|
+
const st = fstatSync(fd);
|
|
59
|
+
if (!st.isFile())
|
|
60
|
+
return;
|
|
61
|
+
const size = st.size;
|
|
62
|
+
const stored = readJson(cursorPath);
|
|
63
|
+
const box = stored && typeof stored === "object" && !Array.isArray(stored) ? stored : {};
|
|
64
|
+
const saved = parseCursor(box.trace);
|
|
65
|
+
const sameFile = (c) => !c.ino || !st.ino || (c.ino === st.ino && c.dev === st.dev);
|
|
66
|
+
const resume = saved !== null && saved.offset <= size && sameFile(saved) && fingerprint(fd, saved.offset) === saved.print;
|
|
67
|
+
let start;
|
|
68
|
+
let memo;
|
|
69
|
+
if (resume) {
|
|
70
|
+
if (saved.offset === size)
|
|
71
|
+
return;
|
|
72
|
+
start = saved.offset;
|
|
73
|
+
memo = saved.memo;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const cap = opts.firstReadBytes ?? FIRST_READ_BYTES;
|
|
77
|
+
start = size > cap ? size - cap : 0;
|
|
78
|
+
memo = {};
|
|
79
|
+
}
|
|
80
|
+
// Starting mid-file, the first newline is where whole lines begin, unless
|
|
81
|
+
// the window opens right after one.
|
|
82
|
+
let aligned = start === 0 || resume || endsLine(fd, start);
|
|
83
|
+
let consumed = start;
|
|
84
|
+
let carry = Buffer.alloc(0);
|
|
85
|
+
let pos = start;
|
|
86
|
+
while (pos < size) {
|
|
87
|
+
const want = Math.min(CHUNK_BYTES, size - pos);
|
|
88
|
+
const buf = Buffer.allocUnsafe(want);
|
|
89
|
+
const got = readSync(fd, buf, 0, want, pos);
|
|
90
|
+
if (got <= 0)
|
|
91
|
+
break;
|
|
92
|
+
pos += got;
|
|
93
|
+
const data = carry.length ? Buffer.concat([carry, buf.subarray(0, got)]) : buf.subarray(0, got);
|
|
94
|
+
// Where data[0] sits in the file.
|
|
95
|
+
const dataStart = pos - data.length;
|
|
96
|
+
let from = 0;
|
|
97
|
+
if (!aligned) {
|
|
98
|
+
const nl = data.indexOf(NEWLINE);
|
|
99
|
+
if (nl < 0) {
|
|
100
|
+
carry = data;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
from = nl + 1;
|
|
104
|
+
aligned = true;
|
|
105
|
+
}
|
|
106
|
+
for (let nl = data.indexOf(NEWLINE, from); nl !== -1; nl = data.indexOf(NEWLINE, from)) {
|
|
107
|
+
if (nl > from)
|
|
108
|
+
onLine(data.toString("utf8", from, nl), memo, dataStart + from);
|
|
109
|
+
from = nl + 1;
|
|
110
|
+
}
|
|
111
|
+
carry = data.subarray(from);
|
|
112
|
+
consumed = pos - carry.length;
|
|
113
|
+
}
|
|
114
|
+
// A window with no line boundary in it: nothing read, and no offset worth keeping.
|
|
115
|
+
if (!aligned)
|
|
116
|
+
return;
|
|
117
|
+
// Other hooks keep their state in the same file and may have written it
|
|
118
|
+
// while this read ran: read it again so only `trace` changes. A reader
|
|
119
|
+
// that got further on the same file wins; the offset never goes back.
|
|
120
|
+
const now = readJson(cursorPath);
|
|
121
|
+
const latest = now && typeof now === "object" && !Array.isArray(now) ? now : {};
|
|
122
|
+
const theirs = parseCursor(latest.trace);
|
|
123
|
+
const ahead = theirs !== null && sameFile(theirs) && theirs.offset > consumed && theirs.offset <= fstatSync(fd).size && fingerprint(fd, theirs.offset) === theirs.print;
|
|
124
|
+
if (!ahead) {
|
|
125
|
+
latest.trace = { offset: consumed, dev: st.dev, ino: st.ino, print: fingerprint(fd, consumed), memo };
|
|
126
|
+
}
|
|
127
|
+
writePrivateJson(cursorPath, latest);
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
closeSync(fd);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/trace/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type EventReadOptions, type TraceEvent } from './claude.js';
|
|
2
|
+
import type { Memo } from './cursor.js';
|
|
3
|
+
import type { SkillSessionState } from './types.js';
|
|
4
|
+
export interface DialectReadOptions extends EventReadOptions {
|
|
5
|
+
/** Codex: the session state whose typed hashes decide the person's lines (P30). Claude ignores it. */
|
|
6
|
+
state?: SkillSessionState | null;
|
|
7
|
+
}
|
|
8
|
+
type Typed = Extract<TraceEvent, {
|
|
9
|
+
kind: 'typed';
|
|
10
|
+
}>;
|
|
11
|
+
export interface HostDialect {
|
|
12
|
+
host: 'claude' | 'codex';
|
|
13
|
+
readNewEvents(path: string, cursorPath: string, opts?: DialectReadOptions): TraceEvent[];
|
|
14
|
+
/** Events of one parsed line, for the readers that walk a tail (save gate, tamper, typed line at an offset). */
|
|
15
|
+
lineEvents(entry: unknown, memo: unknown, offset?: number, env?: NodeJS.ProcessEnv): TraceEvent[];
|
|
16
|
+
/** The receipt's transcript is this session's own file where this host keeps it (D82's first half). */
|
|
17
|
+
transcriptOk(r: {
|
|
18
|
+
transcriptPath: string;
|
|
19
|
+
session: string;
|
|
20
|
+
}, env?: NodeJS.ProcessEnv): boolean;
|
|
21
|
+
/** Whether a typed event counts as the person's (Claude: isTypedByPerson; Codex: P30). */
|
|
22
|
+
typedByPerson(ev: Typed, st: SkillSessionState | null, env?: NodeJS.ProcessEnv): boolean;
|
|
23
|
+
hostName: string;
|
|
24
|
+
/** The memo a reader of the file's tail starts with (Codex: the session's own folder, from line 1), so a tail that
|
|
25
|
+
* begins mid-session still knows where relative paths point (review). Claude's lines carry their own cwd. */
|
|
26
|
+
tailMemo?(path: string, env?: NodeJS.ProcessEnv): Memo;
|
|
27
|
+
}
|
|
28
|
+
export declare const CLAUDE_DIALECT: HostDialect;
|
|
29
|
+
export declare const CODEX_DIALECT: HostDialect;
|
|
30
|
+
/** claude and codex only; null elsewhere (the fold doesn't run). */
|
|
31
|
+
export declare function dialectFor(host: string): HostDialect | null;
|
|
32
|
+
/** A dialect and the session state it judges typed lines with: what a reader at an offset needs. */
|
|
33
|
+
export interface DialectUse {
|
|
34
|
+
dialect: HostDialect;
|
|
35
|
+
st: SkillSessionState | null;
|
|
36
|
+
}
|
|
37
|
+
export declare const CLAUDE_USE: DialectUse;
|
|
38
|
+
/** The session's host dialect and its state; a host with no dialect reads as Claude's (D133). */
|
|
39
|
+
export declare const useFor: (host: string, st: SkillSessionState | null) => DialectUse;
|
|
40
|
+
/** The person's words on one parsed line, as `use`'s dialect judges them; "" when the line isn't theirs. */
|
|
41
|
+
export declare function typedOnLine(entry: unknown, use: DialectUse, env: NodeJS.ProcessEnv): string;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/trace/dialect.ts"],"names":[],"mappings":"AAaA,OAAO,EAAwC,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,sGAAsG;IACtG,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAClC;AAED,KAAK,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,UAAU,EAAE,CAAC;IACzF,gHAAgH;IAChH,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;IAClG,uGAAuG;IACvG,YAAY,CAAC,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;IAC/F,0FAA0F;IAC1F,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB;kHAC8G;IAC9G,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CACxD;AAwCD,eAAO,MAAM,cAAc,EAAE,WAQ3B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,WAW1B,CAAC;AAEH,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAE3D;AAED,oGAAoG;AACpG,MAAM,WAAW,UAAU;IAAG,OAAO,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE;AAClF,eAAO,MAAM,UAAU,EAAE,UAAiE,CAAC;AAC3F,iGAAiG;AACjG,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,IAAI,iBAAiB,GAAG,IAAI,KAAG,UAAmE,CAAC;AAExI,4GAA4G;AAC5G,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAO3F"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host dialects (design 4.16, 0 rule 7): the one place a reader learns how a
|
|
3
|
+
* host writes its transcript. Claude Code's dialect is 1a's readers as they
|
|
4
|
+
* are; Codex's is `codex.ts`. Every reader that walks a transcript (the
|
|
5
|
+
* skills session's catch-up, the save and lesson gates, the receipts) takes
|
|
6
|
+
* the dialect from the context it already has (`ctx.host`, a receipt's
|
|
7
|
+
* `host`), so no module outside `claude.ts`, `codex.ts` and this file parses
|
|
8
|
+
* a host's lines. Hosts with no dialect (Cursor, Copilot, Gemini, unknown)
|
|
9
|
+
* get none: their transcripts are not folded.
|
|
10
|
+
*/
|
|
11
|
+
import { lstatSync, realpathSync } from 'node:fs';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { basename, dirname, isAbsolute, join } from 'node:path';
|
|
14
|
+
import { lineEvents, readNewEvents, typedText } from './claude.js';
|
|
15
|
+
import { codexLineEvents, codexMeta, codexTranscriptOk, codexTypedByPerson, readNewCodexEvents } from './codex.js';
|
|
16
|
+
const memoOf = (memo) => (memo && typeof memo === 'object' && !Array.isArray(memo) ? memo : {});
|
|
17
|
+
/** realpath, or null when the path doesn't resolve. */
|
|
18
|
+
function real(p) {
|
|
19
|
+
try {
|
|
20
|
+
return realpathSync(p);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Where Claude Code keeps its transcripts: `~/.claude/projects` (HOME from env) and `$CLAUDE_CONFIG_DIR/projects`. */
|
|
27
|
+
function claudeProjects(env) {
|
|
28
|
+
const roots = [join(env.HOME || homedir(), '.claude', 'projects')];
|
|
29
|
+
if (env.CLAUDE_CONFIG_DIR)
|
|
30
|
+
roots.push(join(env.CLAUDE_CONFIG_DIR, 'projects'));
|
|
31
|
+
return roots.flatMap((r) => {
|
|
32
|
+
const p = real(r);
|
|
33
|
+
return p ? [p] : [];
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Claude Code (g7, D74): `<projects>/<folder>/<session_id>.jsonl`, compared through realpath, so a link from the
|
|
38
|
+
* projects folder to a file elsewhere, a copy in /tmp or another session's file is not it.
|
|
39
|
+
*/
|
|
40
|
+
function claudeTranscriptOk(r, env = process.env) {
|
|
41
|
+
if (!r.transcriptPath || !isAbsolute(r.transcriptPath))
|
|
42
|
+
return false;
|
|
43
|
+
const file = real(r.transcriptPath);
|
|
44
|
+
if (!file || basename(file) !== `${r.session}.jsonl`)
|
|
45
|
+
return false;
|
|
46
|
+
try {
|
|
47
|
+
if (!lstatSync(file).isFile())
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const folder = dirname(file);
|
|
54
|
+
return claudeProjects(env).some((root) => dirname(folder) === root && folder !== root);
|
|
55
|
+
}
|
|
56
|
+
export const CLAUDE_DIALECT = Object.freeze({
|
|
57
|
+
host: 'claude',
|
|
58
|
+
hostName: 'Claude Code',
|
|
59
|
+
readNewEvents: (path, cursorPath, opts = {}) => readNewEvents(path, cursorPath, opts),
|
|
60
|
+
lineEvents: (entry, memo, offset, env) => lineEvents(entry, memoOf(memo), offset, env),
|
|
61
|
+
transcriptOk: claudeTranscriptOk,
|
|
62
|
+
// Claude's reader emits a typed event only for a line isTypedByPerson accepts.
|
|
63
|
+
typedByPerson: (ev) => ev.kind === 'typed' && ev.text.trim() !== '',
|
|
64
|
+
});
|
|
65
|
+
export const CODEX_DIALECT = Object.freeze({
|
|
66
|
+
host: 'codex',
|
|
67
|
+
hostName: 'Codex',
|
|
68
|
+
readNewEvents: (path, cursorPath, opts = {}) => readNewCodexEvents(path, cursorPath, opts),
|
|
69
|
+
lineEvents: (entry, memo, offset, env) => codexLineEvents(entry, memoOf(memo), offset, env),
|
|
70
|
+
transcriptOk: codexTranscriptOk,
|
|
71
|
+
typedByPerson: (ev, st, env) => ev.kind === 'typed' && codexTypedByPerson(ev.text, st, env),
|
|
72
|
+
tailMemo: (path) => {
|
|
73
|
+
const cwd = codexMeta(path)?.cwd;
|
|
74
|
+
return cwd ? { cwd } : {};
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
/** claude and codex only; null elsewhere (the fold doesn't run). */
|
|
78
|
+
export function dialectFor(host) {
|
|
79
|
+
return host === 'claude' ? CLAUDE_DIALECT : host === 'codex' ? CODEX_DIALECT : null;
|
|
80
|
+
}
|
|
81
|
+
export const CLAUDE_USE = Object.freeze({ dialect: CLAUDE_DIALECT, st: null });
|
|
82
|
+
/** The session's host dialect and its state; a host with no dialect reads as Claude's (D133). */
|
|
83
|
+
export const useFor = (host, st) => ({ dialect: dialectFor(host) ?? CLAUDE_DIALECT, st });
|
|
84
|
+
/** The person's words on one parsed line, as `use`'s dialect judges them; "" when the line isn't theirs. */
|
|
85
|
+
export function typedOnLine(entry, use, env) {
|
|
86
|
+
// Claude: exactly 1a's typedText (the line's own flags decide).
|
|
87
|
+
if (use.dialect.host === 'claude')
|
|
88
|
+
return typedText(entry, env);
|
|
89
|
+
for (const ev of use.dialect.lineEvents(entry, {}, undefined, env)) {
|
|
90
|
+
if (ev.kind === 'typed' && use.dialect.typedByPerson(ev, use.st, env))
|
|
91
|
+
return ev.text;
|
|
92
|
+
}
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=dialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/trace/dialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context epochs: the stretches of a session the agent saw whole. One starts
|
|
3
|
+
* at the session's start and another at every compaction, after which the
|
|
4
|
+
* agent knows the earlier stretch only from a summary. Runs, repairs and
|
|
5
|
+
* skill use are counted per epoch.
|
|
6
|
+
*/
|
|
7
|
+
import type { TraceEvent } from "./claude.js";
|
|
8
|
+
/** `events` cut at each compaction, which opens the epoch it starts. Empty epochs are left out. */
|
|
9
|
+
export declare function splitEpochs(events: TraceEvent[]): TraceEvent[][];
|
|
10
|
+
//# sourceMappingURL=epochs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epochs.d.ts","sourceRoot":"","sources":["../../src/trace/epochs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,EAAE,CAYhE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** `events` cut at each compaction, which opens the epoch it starts. Empty epochs are left out. */
|
|
2
|
+
export function splitEpochs(events) {
|
|
3
|
+
const out = [];
|
|
4
|
+
let current = [];
|
|
5
|
+
for (const e of events) {
|
|
6
|
+
if (e.kind === "compaction" && current.length) {
|
|
7
|
+
out.push(current);
|
|
8
|
+
current = [];
|
|
9
|
+
}
|
|
10
|
+
current.push(e);
|
|
11
|
+
}
|
|
12
|
+
if (current.length)
|
|
13
|
+
out.push(current);
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=epochs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epochs.js","sourceRoot":"","sources":["../../src/trace/epochs.ts"],"names":[],"mappings":"AAQA,mGAAmG;AACnG,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** What a failed command prints, in the tools these sessions run. */
|
|
2
|
+
export declare const FAILED_TEXT: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* What a test runner prints when it fails, upper case only: pnpm's error
|
|
5
|
+
* codes, jest's and go's `FAIL` lines, vitest's ` FAIL ` line and summary,
|
|
6
|
+
* and go's `--- FAIL:` subtests. Kept apart from FAILED_TEXT because case
|
|
7
|
+
* matters: `fail | lint` in a checks table and "Fail if the index is stale"
|
|
8
|
+
* in a script's help are not a runner saying it failed.
|
|
9
|
+
*/
|
|
10
|
+
export declare const FAILED_RUNNER_TEXT: RegExp;
|
|
11
|
+
/** Whether a command's output reads like a failure. */
|
|
12
|
+
export declare function failedText(text: string): boolean;
|
|
13
|
+
/** First line in the head or tail of `text` that says it failed (failedText's patterns), flatLine(.., 160); null when none. */
|
|
14
|
+
export declare function errorLine(text: string): string | null;
|
|
15
|
+
//# sourceMappingURL=failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../src/trace/failure.ts"],"names":[],"mappings":"AAQA,qEAAqE;AACrE,eAAO,MAAM,WAAW,QAsBvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAgG,CAAC;AAQhI,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGhD;AAKD,+HAA+H;AAC/H,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBrD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a command failed, read from what it printed as well as from the
|
|
3
|
+
* host's error flag. In real sessions most failed commands exited 0, because
|
|
4
|
+
* their output was piped through `| tail` or `| head`; only the text says so.
|
|
5
|
+
* Checked on the head and tail of the output, where a failure says so.
|
|
6
|
+
*/
|
|
7
|
+
import { flatLine } from "../notes/flatten.js";
|
|
8
|
+
/** What a failed command prints, in the tools these sessions run. */
|
|
9
|
+
export const FAILED_TEXT = new RegExp([
|
|
10
|
+
"npm ERR!",
|
|
11
|
+
"npm error",
|
|
12
|
+
"command not found",
|
|
13
|
+
"No such file or directory",
|
|
14
|
+
"Permission denied",
|
|
15
|
+
"^fatal:",
|
|
16
|
+
"^error(?:\\[\\w+\\])?:",
|
|
17
|
+
"Traceback \\(most recent call last\\)",
|
|
18
|
+
"Cannot find module",
|
|
19
|
+
"ModuleNotFoundError",
|
|
20
|
+
"^panic:",
|
|
21
|
+
// Claude Code's "Exit code 1", Codex's "Exit code: 1", Go's "exit status 1".
|
|
22
|
+
"Exit code:? [1-9]",
|
|
23
|
+
"exit status [1-9]",
|
|
24
|
+
"exited with (?:code )?[1-9]",
|
|
25
|
+
"\\b(?:401 Unauthorized|403 Forbidden)\\b",
|
|
26
|
+
"Cannot connect to the Docker daemon",
|
|
27
|
+
"Unable to locate",
|
|
28
|
+
].join("|"), "im");
|
|
29
|
+
/**
|
|
30
|
+
* What a test runner prints when it fails, upper case only: pnpm's error
|
|
31
|
+
* codes, jest's and go's `FAIL` lines, vitest's ` FAIL ` line and summary,
|
|
32
|
+
* and go's `--- FAIL:` subtests. Kept apart from FAILED_TEXT because case
|
|
33
|
+
* matters: `fail | lint` in a checks table and "Fail if the index is stale"
|
|
34
|
+
* in a script's help are not a runner saying it failed.
|
|
35
|
+
*/
|
|
36
|
+
export const FAILED_RUNNER_TEXT = /ERR_PNPM_|^ ?FAIL(?:\s|$)|^\s*--- FAIL:|^\s*Test Files\s+\d+ failed|^\s*Tests\s+\d+ failed/m;
|
|
37
|
+
/** Error codes, upper case only: a UUID's hex block (`-e404-`) is not one. */
|
|
38
|
+
const ERROR_CODE = /\bE(?:401|403|404|ACCES|NOENT|CONNREFUSED|NOSPC)\b/;
|
|
39
|
+
const HEAD = 1500;
|
|
40
|
+
const TAIL = 2500;
|
|
41
|
+
/** Whether a command's output reads like a failure. */
|
|
42
|
+
export function failedText(text) {
|
|
43
|
+
const ends = text.length > HEAD + TAIL ? `${text.slice(0, HEAD)}\n${text.slice(-TAIL)}` : text;
|
|
44
|
+
return FAILED_TEXT.test(ends) || FAILED_RUNNER_TEXT.test(ends) || ERROR_CODE.test(ends);
|
|
45
|
+
}
|
|
46
|
+
/** Claude Code's own first line on a failed call: true, but it says nothing about what failed. */
|
|
47
|
+
const BARE_EXIT = /^\s*Exit code:? \d+\s*$/i;
|
|
48
|
+
/** First line in the head or tail of `text` that says it failed (failedText's patterns), flatLine(.., 160); null when none. */
|
|
49
|
+
export function errorLine(text) {
|
|
50
|
+
if (typeof text !== "string" || !text)
|
|
51
|
+
return null;
|
|
52
|
+
const parts = text.length > HEAD + TAIL ? [text.slice(0, HEAD), text.slice(-TAIL)] : [text];
|
|
53
|
+
let bare = null;
|
|
54
|
+
for (const part of parts) {
|
|
55
|
+
for (const line of part.split(/\r?\n/)) {
|
|
56
|
+
if (!FAILED_TEXT.test(line) && !FAILED_RUNNER_TEXT.test(line) && !ERROR_CODE.test(line))
|
|
57
|
+
continue;
|
|
58
|
+
if (BARE_EXIT.test(line)) {
|
|
59
|
+
bare ??= line;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const flat = flatLine(line, 160);
|
|
63
|
+
if (flat)
|
|
64
|
+
return flat;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return bare === null ? null : flatLine(bare, 160) || null;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../../src/trace/failure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,MAAM,CACnC;IACE,UAAU;IACV,WAAW;IACX,mBAAmB;IACnB,2BAA2B;IAC3B,mBAAmB;IACnB,SAAS;IACT,wBAAwB;IACxB,uCAAuC;IACvC,oBAAoB;IACpB,qBAAqB;IACrB,SAAS;IACT,6EAA6E;IAC7E,mBAAmB;IACnB,mBAAmB;IACnB,6BAA6B;IAC7B,0CAA0C;IAC1C,qCAAqC;IACrC,kBAAkB;CACnB,CAAC,IAAI,CAAC,GAAG,CAAC,EACX,IAAI,CACL,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,6FAA6F,CAAC;AAEhI,8EAA8E;AAC9E,MAAM,UAAU,GAAG,oDAAoD,CAAC;AAExE,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,uDAAuD;AACvD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,kGAAkG;AAClG,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAE7C,+HAA+H;AAC/H,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5F,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,KAAK,IAAI,CAAC;gBACd,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { GatedKind, SkillSessionState } from './types.js';
|
|
2
|
+
export interface GateGroup {
|
|
3
|
+
kind: GatedKind;
|
|
4
|
+
steps: Array<{
|
|
5
|
+
n: number;
|
|
6
|
+
text: string;
|
|
7
|
+
program: string | null;
|
|
8
|
+
}>;
|
|
9
|
+
askedAt: string | null;
|
|
10
|
+
askedToolUseId: string | null;
|
|
11
|
+
approvedAt: string | null;
|
|
12
|
+
/** g7: the step the ask was for; a later step of the group is what that yes covers (3.3). */
|
|
13
|
+
askedStep?: number | null;
|
|
14
|
+
}
|
|
15
|
+
export interface GateFile {
|
|
16
|
+
v: 1;
|
|
17
|
+
epoch: number;
|
|
18
|
+
live: Array<{
|
|
19
|
+
injId: string;
|
|
20
|
+
name: string;
|
|
21
|
+
skillId: string;
|
|
22
|
+
params: Record<string, string>;
|
|
23
|
+
steps: string[];
|
|
24
|
+
check: string | null;
|
|
25
|
+
groups: GateGroup[];
|
|
26
|
+
/** D137: gated steps this session couldn't ask for, denied and handed to the person to run themselves. */
|
|
27
|
+
handed?: Handed[];
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
/** D137: a gated step handed to the person (denied and printed), and when. */
|
|
31
|
+
export interface Handed {
|
|
32
|
+
n: number;
|
|
33
|
+
at: string;
|
|
34
|
+
}
|
|
35
|
+
/** A result the hook saw before the transcript had it (3.4). tail: cleanLine of the last 200 chars, check-family calls only. */
|
|
36
|
+
export interface PostMark {
|
|
37
|
+
id: string;
|
|
38
|
+
at: string;
|
|
39
|
+
failed: boolean;
|
|
40
|
+
tail?: string;
|
|
41
|
+
}
|
|
42
|
+
/** The same answer as notes/home.ts trailHome(env); a test holds them equal. */
|
|
43
|
+
export declare function trailHomeFast(env?: NodeJS.ProcessEnv): string;
|
|
44
|
+
/** `<home>/sessions/<id><suffix>`: the session's files (`.json`, `.gate.json`, `.post.jsonl`). */
|
|
45
|
+
export declare function sessionPath(sessionId: string, suffix: string, env?: NodeJS.ProcessEnv): string;
|
|
46
|
+
export declare function gateFilePath(sessionId: string, env?: NodeJS.ProcessEnv): string;
|
|
47
|
+
/** No lock; a file over 16 KB or bad JSON reads as null. */
|
|
48
|
+
export declare function readGateFile(sessionId: string, env?: NodeJS.ProcessEnv): GateFile | null;
|
|
49
|
+
/** Rewrites `live` from st.injected (live ones), keeping asked/approved marks of injections that stay. Deletes the file when nothing is live. */
|
|
50
|
+
export declare function writeGateFile(sessionId: string, st: SkillSessionState, env?: NodeJS.ProcessEnv): void;
|
|
51
|
+
export declare function markAsked(sessionId: string, injId: string, group: number, toolUseId: string, now: Date, env?: NodeJS.ProcessEnv, step?: number): void;
|
|
52
|
+
/** D137: the gated step `step` of block `injId` was denied and printed for the person to run (no ask possible here). */
|
|
53
|
+
export declare function markHanded(sessionId: string, injId: string, step: number, now: Date, env?: NodeJS.ProcessEnv): void;
|
|
54
|
+
/** D137: every handed step the gate file holds, by block. */
|
|
55
|
+
export declare function readHanded(sessionId: string, env?: NodeJS.ProcessEnv): Array<Handed & {
|
|
56
|
+
injId: string;
|
|
57
|
+
}>;
|
|
58
|
+
/** true when toolUseId was an asked call (sets approvedAt). PostToolUse only: a failed asked call (PostToolUseFailure) never
|
|
59
|
+
* approves its group, because a refused ask may arrive the same way; the next step in the group asks again (3.3). */
|
|
60
|
+
export declare function markApproved(sessionId: string, toolUseId: string, now: Date, env?: NodeJS.ProcessEnv): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* `<home>/sessions/<id>.post.jsonl`, one O_APPEND write at 0600. Opened without blocking and written only when it
|
|
63
|
+
* is a regular file: a FIFO planted at the path would otherwise hold PostToolUse until its timeout (D100 18). A FIFO
|
|
64
|
+
* or anything else that isn't a regular file is skipped, and the mark is lost (the fold reads the call anyway).
|
|
65
|
+
*/
|
|
66
|
+
export declare function appendPostMark(sessionId: string, mark: PostMark, env?: NodeJS.ProcessEnv): void;
|
|
67
|
+
/** Read and truncate: the file is moved aside first, so a mark appended meanwhile waits for the next take. */
|
|
68
|
+
export declare function takePostMarks(sessionId: string, env?: NodeJS.ProcessEnv): PostMark[];
|
|
69
|
+
/** settings.json's `skills === 'on'`, read with fs only. */
|
|
70
|
+
export declare function skillsOnFast(env?: NodeJS.ProcessEnv): boolean;
|
|
71
|
+
//# sourceMappingURL=gate-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-file.d.ts","sourceRoot":"","sources":["../../src/trace/gate-file.ts"],"names":[],"mappings":"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"}
|