@unerr-ai/unerr 0.2.1 → 0.2.2
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 +6 -0
- package/dist/cli.js +37236 -35793
- package/package.json +1 -1
- package/dist/behaviors/agent-llm-bridge.js +0 -166
- package/dist/behaviors/architecture-guard.js +0 -256
- package/dist/behaviors/auto-doc.js +0 -247
- package/dist/behaviors/cascade-guard.js +0 -289
- package/dist/behaviors/change-narrative.js +0 -270
- package/dist/behaviors/convention-drift.js +0 -290
- package/dist/behaviors/framework.js +0 -235
- package/dist/behaviors/guard-formatter.js +0 -44
- package/dist/behaviors/incomplete-work.js +0 -270
- package/dist/behaviors/loop-breaker.js +0 -300
- package/dist/behaviors/session-continuity.js +0 -208
- package/dist/commands/branches.js +0 -97
- package/dist/commands/check-commit.js +0 -225
- package/dist/commands/compress-output.js +0 -64
- package/dist/commands/config-verify.js +0 -243
- package/dist/commands/daemon.js +0 -905
- package/dist/commands/dashboard.js +0 -52
- package/dist/commands/debug.js +0 -200
- package/dist/commands/enrich.js +0 -184
- package/dist/commands/exec.js +0 -233
- package/dist/commands/gain.js +0 -156
- package/dist/commands/hook.js +0 -88
- package/dist/commands/index.js +0 -88
- package/dist/commands/init.js +0 -74
- package/dist/commands/install.js +0 -505
- package/dist/commands/learn.js +0 -116
- package/dist/commands/manifest.js +0 -193
- package/dist/commands/rewind.js +0 -103
- package/dist/commands/serve.js +0 -19
- package/dist/commands/setup-wizard.js +0 -414
- package/dist/commands/skills.js +0 -64
- package/dist/commands/stats.js +0 -20
- package/dist/commands/status.js +0 -654
- package/dist/commands/timeline.js +0 -139
- package/dist/commands/uninstall.js +0 -230
- package/dist/components/App.js +0 -109
- package/dist/components/Banner.js +0 -12
- package/dist/components/ConfirmPrompt.js +0 -25
- package/dist/components/DriftSummary.js +0 -23
- package/dist/components/GradeBadge.js +0 -15
- package/dist/components/HealthCard.js +0 -18
- package/dist/components/InkSpinner.js +0 -22
- package/dist/components/InputBox.js +0 -17
- package/dist/components/KeyValue.js +0 -13
- package/dist/components/MessageList.js +0 -14
- package/dist/components/ProgressBar.js +0 -26
- package/dist/components/Section.js +0 -16
- package/dist/components/SessionSummaryCard.js +0 -73
- package/dist/components/StartupDisplay.js +0 -24
- package/dist/components/StatusDashboard.js +0 -57
- package/dist/components/StatusLine.js +0 -8
- package/dist/components/StepLine.js +0 -22
- package/dist/components/Theme.js +0 -20
- package/dist/components/ToolProgress.js +0 -8
- package/dist/components/ViolationList.js +0 -21
- package/dist/components/render.js +0 -13
- package/dist/config/agent-registry.js +0 -237
- package/dist/config/claude-settings-hooks.js +0 -304
- package/dist/config/hook-installer.js +0 -65
- package/dist/config/instruction-writer.js +0 -388
- package/dist/config/mcp-config-writer.js +0 -266
- package/dist/config/settings.js +0 -174
- package/dist/config/tool-detector.js +0 -42
- package/dist/config/value-surfacing.js +0 -119
- package/dist/core/context-assembly.js +0 -108
- package/dist/core/conversation.js +0 -33
- package/dist/core/local-chat-provider.js +0 -475
- package/dist/core/provider-factory.js +0 -55
- package/dist/core/providers.js +0 -90
- package/dist/core/query-engine.js +0 -174
- package/dist/daemon/api.js +0 -312
- package/dist/daemon/autostart.js +0 -119
- package/dist/daemon/bootstrap.js +0 -39
- package/dist/daemon/client.js +0 -164
- package/dist/daemon/detect-ci.js +0 -81
- package/dist/daemon/platform-linux.js +0 -146
- package/dist/daemon/platform-macos.js +0 -134
- package/dist/daemon/platform-windows.js +0 -116
- package/dist/daemon/process-manager.js +0 -299
- package/dist/daemon/protocol.js +0 -23
- package/dist/daemon/registry.js +0 -270
- package/dist/daemon/settings-schema.js +0 -72
- package/dist/daemon/system-health.js +0 -134
- package/dist/daemon/version-checker.js +0 -262
- package/dist/daemon/warm-start.js +0 -223
- package/dist/entrypoints/cli.js +0 -1043
- package/dist/entrypoints/daemon.js +0 -380
- package/dist/entrypoints/repl.js +0 -147
- package/dist/hooks/adapters/claude-code.js +0 -90
- package/dist/hooks/adapters/cline.js +0 -100
- package/dist/hooks/adapters/cursor.js +0 -98
- package/dist/hooks/hook-dedup.js +0 -79
- package/dist/hooks/hook-runner.js +0 -113
- package/dist/hooks/navigation-hooks.js +0 -175
- package/dist/hooks/prompt-hooks.js +0 -63
- package/dist/hooks/shell-hooks.js +0 -47
- package/dist/ignore.js +0 -111
- package/dist/intelligence/approach-suggester.js +0 -61
- package/dist/intelligence/ast-extractor.js +0 -2615
- package/dist/intelligence/ast-worker.js +0 -34
- package/dist/intelligence/background-indexer.js +0 -121
- package/dist/intelligence/blast-radius.js +0 -200
- package/dist/intelligence/community-detection.js +0 -691
- package/dist/intelligence/community-detector.js +0 -184
- package/dist/intelligence/computation-scheduler.js +0 -75
- package/dist/intelligence/confidence-propagation.js +0 -47
- package/dist/intelligence/convention-detector.js +0 -242
- package/dist/intelligence/convention-learner.js +0 -205
- package/dist/intelligence/convention-matcher.js +0 -205
- package/dist/intelligence/cozo-schema.js +0 -376
- package/dist/intelligence/decision-point-detector.js +0 -90
- package/dist/intelligence/deep-dive-tools.js +0 -586
- package/dist/intelligence/durability-scorer.js +0 -84
- package/dist/intelligence/exploration-cost.js +0 -204
- package/dist/intelligence/exploration-pattern-tracker.js +0 -61
- package/dist/intelligence/fact-generator.js +0 -322
- package/dist/intelligence/facts-schema.js +0 -90
- package/dist/intelligence/file-intelligence.js +0 -59
- package/dist/intelligence/graph-holder.js +0 -220
- package/dist/intelligence/graph-temporal-joiner.js +0 -238
- package/dist/intelligence/health-grade.js +0 -423
- package/dist/intelligence/health-grader.js +0 -200
- package/dist/intelligence/health-map-data.js +0 -259
- package/dist/intelligence/import-symbols.js +0 -136
- package/dist/intelligence/incremental-indexer.js +0 -658
- package/dist/intelligence/indexer/centrality.js +0 -62
- package/dist/intelligence/indexer/cfg-context.js +0 -95
- package/dist/intelligence/indexer/confidence.js +0 -34
- package/dist/intelligence/indexer/cross-file-resolver.js +0 -104
- package/dist/intelligence/indexer/edge-repair.js +0 -89
- package/dist/intelligence/indexer/entity-key.js +0 -17
- package/dist/intelligence/indexer/export-map.js +0 -132
- package/dist/intelligence/indexer/git-cochange.js +0 -128
- package/dist/intelligence/indexer/graph-patch.js +0 -147
- package/dist/intelligence/indexer/incremental.js +0 -78
- package/dist/intelligence/indexer/ingest.js +0 -160
- package/dist/intelligence/indexer/language-detect.js +0 -226
- package/dist/intelligence/indexer/metadata.js +0 -63
- package/dist/intelligence/indexer/mutation-tracker.js +0 -79
- package/dist/intelligence/indexer/orchestrator.js +0 -155
- package/dist/intelligence/indexer/plugin-interface.js +0 -31
- package/dist/intelligence/indexer/plugins/csharp.js +0 -440
- package/dist/intelligence/indexer/plugins/go.js +0 -335
- package/dist/intelligence/indexer/plugins/java.js +0 -370
- package/dist/intelligence/indexer/plugins/python.js +0 -358
- package/dist/intelligence/indexer/plugins/regex-fallback.js +0 -82
- package/dist/intelligence/indexer/plugins/ruby.js +0 -290
- package/dist/intelligence/indexer/plugins/rust.js +0 -484
- package/dist/intelligence/indexer/plugins/tier2-generic.js +0 -310
- package/dist/intelligence/indexer/plugins/typescript.js +0 -456
- package/dist/intelligence/indexer/resource-monitor.js +0 -93
- package/dist/intelligence/indexer/scip/decoder.js +0 -253
- package/dist/intelligence/indexer/scip/detector.js +0 -232
- package/dist/intelligence/indexer/scip/downloader.js +0 -427
- package/dist/intelligence/indexer/scip/fallback.js +0 -34
- package/dist/intelligence/indexer/scip/merger.js +0 -109
- package/dist/intelligence/indexer/scip/orchestrator.js +0 -433
- package/dist/intelligence/indexer/scip/runner.js +0 -98
- package/dist/intelligence/indexer/snapshot.js +0 -66
- package/dist/intelligence/indexer/test-detector.js +0 -196
- package/dist/intelligence/indexer/watch-integration.js +0 -61
- package/dist/intelligence/indexer/worker.js +0 -85
- package/dist/intelligence/local-convention-detector.js +0 -437
- package/dist/intelligence/local-embeddings.js +0 -190
- package/dist/intelligence/local-graph.js +0 -1946
- package/dist/intelligence/local-indexer.js +0 -1575
- package/dist/intelligence/local-llm.js +0 -163
- package/dist/intelligence/local-rule-generator.js +0 -154
- package/dist/intelligence/local-snapshot.js +0 -213
- package/dist/intelligence/negative-knowledge.js +0 -103
- package/dist/intelligence/persistent-db.js +0 -85
- package/dist/intelligence/query-router.js +0 -2556
- package/dist/intelligence/risk-classifier.js +0 -116
- package/dist/intelligence/rule-evaluator.js +0 -380
- package/dist/intelligence/rule-generator.js +0 -49
- package/dist/intelligence/search-index.js +0 -173
- package/dist/intelligence/semantic/docstring-extractor.js +0 -67
- package/dist/intelligence/semantic/embedding-store.js +0 -52
- package/dist/intelligence/semantic/enrichment-orchestrator.js +0 -48
- package/dist/intelligence/semantic/git-message-miner.js +0 -114
- package/dist/intelligence/semantic/identifier-tokenizer.js +0 -51
- package/dist/intelligence/semantic/node2vec-embeddings.js +0 -71
- package/dist/intelligence/semantic/node2vec-walks.js +0 -103
- package/dist/intelligence/semantic/path-domain-inference.js +0 -112
- package/dist/intelligence/semantic/similarity-engine.js +0 -60
- package/dist/intelligence/semantic/tfidf-vectors.js +0 -88
- package/dist/intelligence/session-brief-builder.js +0 -159
- package/dist/intelligence/session-context.js +0 -221
- package/dist/intelligence/session-health-monitor.js +0 -211
- package/dist/intelligence/session-narrative.js +0 -197
- package/dist/intelligence/session-pattern-analyzer.js +0 -218
- package/dist/intelligence/signal-scorer.js +0 -390
- package/dist/intelligence/signal-show-store.js +0 -182
- package/dist/intelligence/smart-truncate.js +0 -158
- package/dist/intelligence/subgraph-cache.js +0 -88
- package/dist/intelligence/temporal-facts.js +0 -494
- package/dist/intelligence/token-estimator.js +0 -100
- package/dist/intelligence/tool-injector.js +0 -87
- package/dist/intelligence/tree-sitter-loader.js +0 -71
- package/dist/intelligence/worker-pool.js +0 -116
- package/dist/proxy/arg-validator.js +0 -79
- package/dist/proxy/auto-bootstrap.js +0 -167
- package/dist/proxy/bridge.js +0 -147
- package/dist/proxy/budget-enforcer.js +0 -70
- package/dist/proxy/compression-quality-monitor.js +0 -160
- package/dist/proxy/compression-stats.js +0 -51
- package/dist/proxy/context-rot-detector.js +0 -137
- package/dist/proxy/drift-detector.js +0 -139
- package/dist/proxy/efficiency-tracker.js +0 -79
- package/dist/proxy/fact-ranking.js +0 -154
- package/dist/proxy/format-encoder.js +0 -266
- package/dist/proxy/http-transport.js +0 -90
- package/dist/proxy/lifecycle-actor.js +0 -55
- package/dist/proxy/lifecycle-machine.js +0 -187
- package/dist/proxy/log-tailer.js +0 -265
- package/dist/proxy/model-pricing.js +0 -98
- package/dist/proxy/network-firewall.js +0 -141
- package/dist/proxy/nudge-state.js +0 -93
- package/dist/proxy/output-compressor.js +0 -185
- package/dist/proxy/pid-lock.js +0 -291
- package/dist/proxy/proxy-context.js +0 -11
- package/dist/proxy/proxy.js +0 -2633
- package/dist/proxy/response-enrichment.js +0 -32
- package/dist/proxy/response-envelope.js +0 -313
- package/dist/proxy/session-dedup.js +0 -82
- package/dist/proxy/session-legend.js +0 -30
- package/dist/proxy/session-persistence.js +0 -210
- package/dist/proxy/session-resume.js +0 -94
- package/dist/proxy/session-stats.js +0 -513
- package/dist/proxy/shell-classifier.js +0 -1346
- package/dist/proxy/shell-compression-log.js +0 -93
- package/dist/proxy/shell-compressor.js +0 -390
- package/dist/proxy/shell-graph-boost.js +0 -202
- package/dist/proxy/shell-monitor-map.js +0 -18
- package/dist/proxy/shell-stats.js +0 -54
- package/dist/proxy/shell-strategies/cloud.js +0 -215
- package/dist/proxy/shell-strategies/diff.js +0 -159
- package/dist/proxy/shell-strategies/error-diagnostic.js +0 -796
- package/dist/proxy/shell-strategies/filter-dsl.js +0 -358
- package/dist/proxy/shell-strategies/git-status.js +0 -177
- package/dist/proxy/shell-strategies/key-value.js +0 -193
- package/dist/proxy/shell-strategies/log-text.js +0 -154
- package/dist/proxy/shell-strategies/omni.js +0 -188
- package/dist/proxy/shell-strategies/progress.js +0 -55
- package/dist/proxy/shell-strategies/redact.js +0 -76
- package/dist/proxy/shell-strategies/structured.js +0 -241
- package/dist/proxy/shell-strategies/tabular.js +0 -243
- package/dist/proxy/shell-strategies/test-results-types.js +0 -13
- package/dist/proxy/shell-strategies/test-results.js +0 -784
- package/dist/proxy/shell-strategies/tree-paths.js +0 -144
- package/dist/proxy/shell-strategies/yaml.js +0 -182
- package/dist/proxy/shell-tee.js +0 -111
- package/dist/proxy/signal-dedup.js +0 -171
- package/dist/proxy/startup-renderer.js +0 -158
- package/dist/proxy/task-token-display.js +0 -38
- package/dist/proxy/token-counter.js +0 -61
- package/dist/proxy/tool-clusters.js +0 -273
- package/dist/proxy/tool-definitions.js +0 -525
- package/dist/proxy/transport-mux.js +0 -229
- package/dist/proxy/wire-cap.js +0 -268
- package/dist/rules/developer.mozilla.org.json +0 -9
- package/dist/rules/github.com.json +0 -21
- package/dist/schemas/api/skills.js +0 -19
- package/dist/schemas/common/errors.js +0 -7
- package/dist/schemas/common/headers.js +0 -5
- package/dist/schemas/entities/edge.js +0 -25
- package/dist/schemas/entities/entity.js +0 -22
- package/dist/schemas/entities/rule.js +0 -18
- package/dist/schemas/index.js +0 -14
- package/dist/server/event-bus.js +0 -59
- package/dist/server/http.js +0 -156
- package/dist/server/middleware.js +0 -70
- package/dist/server/routes/drift.js +0 -97
- package/dist/server/routes/intelligence.js +0 -1217
- package/dist/server/routes/reasoning-quality.js +0 -444
- package/dist/server/routes/session.js +0 -86
- package/dist/server/routes/stream.js +0 -120
- package/dist/server/routes/system.js +0 -73
- package/dist/server/routes/temporal.js +0 -170
- package/dist/server/routes/timeline.js +0 -232
- package/dist/server/routes/token-flow.js +0 -403
- package/dist/skills/effectiveness-tracker.js +0 -93
- package/dist/skills/local-pack.js +0 -380
- package/dist/skills/resolver.js +0 -495
- package/dist/state-detector.js +0 -83
- package/dist/timeline/intent-detector.js +0 -263
- package/dist/timeline/loop-miner.js +0 -140
- package/dist/timeline/open-threads.js +0 -49
- package/dist/timeline/signal-reinforcer.js +0 -62
- package/dist/timeline/timeline-bootstrap.js +0 -151
- package/dist/timeline/timeline-store.js +0 -618
- package/dist/tools/coding/bash.js +0 -49
- package/dist/tools/coding/file-edit.js +0 -72
- package/dist/tools/coding/file-outline.js +0 -227
- package/dist/tools/coding/file-read-protocol.js +0 -425
- package/dist/tools/coding/file-read.js +0 -35
- package/dist/tools/coding/file-write.js +0 -43
- package/dist/tools/coding/glob-tool.js +0 -109
- package/dist/tools/coding/grep.js +0 -162
- package/dist/tools/coding/index.js +0 -27
- package/dist/tools/intelligence/index.js +0 -269
- package/dist/tools/intelligence/record-fact.js +0 -48
- package/dist/tools/intelligence/timeline-markers.js +0 -130
- package/dist/tools/registry.js +0 -47
- package/dist/tools/types.js +0 -8
- package/dist/tracking/auto-snapshot-triggers.js +0 -246
- package/dist/tracking/branch-context.js +0 -115
- package/dist/tracking/branch-snapshot.js +0 -217
- package/dist/tracking/causal-bridge.js +0 -317
- package/dist/tracking/circuit-breaker.js +0 -147
- package/dist/tracking/commit-watcher.js +0 -114
- package/dist/tracking/context-ledger.js +0 -119
- package/dist/tracking/correction-detector.js +0 -324
- package/dist/tracking/drift-tracker.js +0 -874
- package/dist/tracking/durability-tracker.js +0 -94
- package/dist/tracking/entity-rewind.js +0 -200
- package/dist/tracking/file-hash-state.js +0 -114
- package/dist/tracking/git-attribution.js +0 -132
- package/dist/tracking/git-trailers.js +0 -171
- package/dist/tracking/intelligence-counter.js +0 -46
- package/dist/tracking/intent-correlator.js +0 -202
- package/dist/tracking/intent-encoder.js +0 -52
- package/dist/tracking/intent-token-tracker.js +0 -159
- package/dist/tracking/ledger-archiver.js +0 -94
- package/dist/tracking/ledger-chains.js +0 -245
- package/dist/tracking/metrics-store.js +0 -361
- package/dist/tracking/native-watcher.js +0 -131
- package/dist/tracking/offline-rewind.js +0 -295
- package/dist/tracking/pending-violations.js +0 -74
- package/dist/tracking/persistence-effectiveness.js +0 -167
- package/dist/tracking/prompt-durability.js +0 -202
- package/dist/tracking/quality-signals.js +0 -213
- package/dist/tracking/redactor.js +0 -73
- package/dist/tracking/rewind-engine.js +0 -161
- package/dist/tracking/session-history.js +0 -128
- package/dist/tracking/session-receipt.js +0 -88
- package/dist/tracking/session-summary-writer.js +0 -157
- package/dist/tracking/shadow-ledger.js +0 -321
- package/dist/tracking/stash-manager.js +0 -258
- package/dist/tracking/timeline-fork.js +0 -213
- package/dist/tracking/timeline.js +0 -69
- package/dist/tracking/token-flow.js +0 -276
- package/dist/tracking/turn-segmenter.js +0 -122
- package/dist/tracking/weekly-accumulator.js +0 -179
- package/dist/tracking/working-snapshots.js +0 -188
- package/dist/tracking/workspace-manifest.js +0 -176
- package/dist/transport/http.js +0 -102
- package/dist/utils/counterfactual.js +0 -65
- package/dist/utils/deep-link.js +0 -34
- package/dist/utils/detect.js +0 -193
- package/dist/utils/exec.js +0 -73
- package/dist/utils/file-logger.js +0 -87
- package/dist/utils/format-error.js +0 -29
- package/dist/utils/git.js +0 -181
- package/dist/utils/log.js +0 -57
- package/dist/utils/logger.js +0 -35
- package/dist/utils/mcp-content-json.js +0 -8
- package/dist/utils/session-logger.js +0 -154
- package/dist/utils/startup-log.js +0 -512
- package/dist/utils/ui.js +0 -56
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Structural-Priority Truncation — renders entity content within a token budget.
|
|
3
|
-
*
|
|
4
|
-
* Priority hierarchy (adapted from rtk's AggressiveFilter + graphify's _subgraph_to_text):
|
|
5
|
-
* 1. Metadata — always included (name, kind, file, community, blast radius, corrections)
|
|
6
|
-
* 2. Imports — included if budget allows
|
|
7
|
-
* 3. Signatures — function/class/struct signatures without bodies
|
|
8
|
-
* 4. Bodies — full implementations, included line-by-line until budget exhausted
|
|
9
|
-
*
|
|
10
|
-
* Contracts:
|
|
11
|
-
* SC-10: Token accounting overhead <1ms
|
|
12
|
-
* SC-12: Never cuts mid-line — operates on complete lines only
|
|
13
|
-
* Decision L.5: Default budget 2000 tokens
|
|
14
|
-
* Decision L.6: Structural-priority over character-cut
|
|
15
|
-
*
|
|
16
|
-
* Leapfrog Sprint C, Task C.2
|
|
17
|
-
*/
|
|
18
|
-
const CHARS_PER_TOKEN = 4;
|
|
19
|
-
const TRUNCATION_MARKER_RESERVE = 120;
|
|
20
|
-
/**
|
|
21
|
-
* Estimate token count from character length.
|
|
22
|
-
* Uses 4 chars/token (conservative for code — actual is ~3.5 for English, ~4.5 for code).
|
|
23
|
-
*/
|
|
24
|
-
export function estimateTokens(text) {
|
|
25
|
-
return Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Truncate entity content within a token budget using structural priority.
|
|
29
|
-
*
|
|
30
|
-
* Small entities fit entirely within the budget and return `truncated: false`.
|
|
31
|
-
* Large entities are truncated at the appropriate structural level, with a
|
|
32
|
-
* marker indicating how many lines were omitted and the token_budget needed
|
|
33
|
-
* to retrieve the full content.
|
|
34
|
-
*
|
|
35
|
-
* Performance: <1ms for any input size (string concatenation + length checks only).
|
|
36
|
-
*/
|
|
37
|
-
export function smartTruncate(input) {
|
|
38
|
-
const budget = Math.max(input.budget, 100);
|
|
39
|
-
const charBudget = budget * CHARS_PER_TOKEN;
|
|
40
|
-
const sections = [
|
|
41
|
-
input.metadata,
|
|
42
|
-
input.imports,
|
|
43
|
-
input.signatures,
|
|
44
|
-
input.bodies,
|
|
45
|
-
].filter(Boolean);
|
|
46
|
-
const fullContent = sections.join("\n\n");
|
|
47
|
-
const fullTokens = estimateTokens(fullContent);
|
|
48
|
-
if (fullContent.length <= charBudget) {
|
|
49
|
-
return {
|
|
50
|
-
content: fullContent,
|
|
51
|
-
tokens_used: fullTokens,
|
|
52
|
-
tokens_budget: budget,
|
|
53
|
-
truncated: false,
|
|
54
|
-
truncation_level: "full",
|
|
55
|
-
full_tokens_estimate: fullTokens,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
let result = input.metadata;
|
|
59
|
-
let level = "metadata_only";
|
|
60
|
-
// Priority 2: imports
|
|
61
|
-
if (input.imports &&
|
|
62
|
-
result.length + input.imports.length + TRUNCATION_MARKER_RESERVE <
|
|
63
|
-
charBudget) {
|
|
64
|
-
result += `\n\n${input.imports}`;
|
|
65
|
-
}
|
|
66
|
-
// Priority 3: signatures
|
|
67
|
-
if (input.signatures &&
|
|
68
|
-
result.length + input.signatures.length + TRUNCATION_MARKER_RESERVE <
|
|
69
|
-
charBudget) {
|
|
70
|
-
result += `\n\n${input.signatures}`;
|
|
71
|
-
level = "signatures_only";
|
|
72
|
-
}
|
|
73
|
-
// Priority 4: bodies — line-by-line (SC-12: never cut mid-line)
|
|
74
|
-
if (input.bodies) {
|
|
75
|
-
const remainingChars = charBudget - result.length - TRUNCATION_MARKER_RESERVE;
|
|
76
|
-
if (remainingChars > 0) {
|
|
77
|
-
const bodyLines = input.bodies.split("\n");
|
|
78
|
-
const includedLines = [];
|
|
79
|
-
let bodyChars = 0;
|
|
80
|
-
for (const line of bodyLines) {
|
|
81
|
-
const lineLen = line.length + 1; // +1 for newline
|
|
82
|
-
if (bodyChars + lineLen > remainingChars)
|
|
83
|
-
break;
|
|
84
|
-
includedLines.push(line);
|
|
85
|
-
bodyChars += lineLen;
|
|
86
|
-
}
|
|
87
|
-
if (includedLines.length > 0) {
|
|
88
|
-
result += `\n\n${includedLines.join("\n")}`;
|
|
89
|
-
level =
|
|
90
|
-
includedLines.length === bodyLines.length
|
|
91
|
-
? "full"
|
|
92
|
-
: "signatures_and_bodies";
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (level !== "full") {
|
|
97
|
-
const totalBodyLines = input.bodies ? input.bodies.split("\n").length : 0;
|
|
98
|
-
const includedBodyLines = level === "signatures_and_bodies" || level === "signatures_only"
|
|
99
|
-
? countIncludedBodyLines(result, input.bodies)
|
|
100
|
-
: 0;
|
|
101
|
-
const omittedLines = totalBodyLines - includedBodyLines;
|
|
102
|
-
if (omittedLines > 0) {
|
|
103
|
-
result += `\n\n// ... ${omittedLines} lines omitted. Request with token_budget: ${fullTokens} for full content.`;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
result += `\n\n// ... truncated. Request with token_budget: ${fullTokens} for full content.`;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return {
|
|
110
|
-
content: result,
|
|
111
|
-
tokens_used: estimateTokens(result),
|
|
112
|
-
tokens_budget: budget,
|
|
113
|
-
truncated: level !== "full",
|
|
114
|
-
truncation_level: level,
|
|
115
|
-
full_tokens_estimate: fullTokens,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Count how many body lines were included in the result.
|
|
120
|
-
*/
|
|
121
|
-
function countIncludedBodyLines(result, bodies) {
|
|
122
|
-
if (!bodies)
|
|
123
|
-
return 0;
|
|
124
|
-
const bodyLines = bodies.split("\n");
|
|
125
|
-
let count = 0;
|
|
126
|
-
for (const line of bodyLines) {
|
|
127
|
-
if (result.includes(line)) {
|
|
128
|
-
count++;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return count;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Apply token budget to an array of result items (for list-returning tools).
|
|
138
|
-
* Keeps items until the budget is exhausted, then appends a summary.
|
|
139
|
-
*/
|
|
140
|
-
export function truncateResultList(items, budget, serialize) {
|
|
141
|
-
const charBudget = Math.max(budget, 100) * CHARS_PER_TOKEN;
|
|
142
|
-
let chars = 0;
|
|
143
|
-
const kept = [];
|
|
144
|
-
for (const item of items) {
|
|
145
|
-
const serialized = serialize(item);
|
|
146
|
-
if (chars + serialized.length + 100 > charBudget && kept.length > 0) {
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
kept.push(item);
|
|
150
|
-
chars += serialized.length;
|
|
151
|
-
}
|
|
152
|
-
return {
|
|
153
|
-
items: kept,
|
|
154
|
-
truncated: kept.length < items.length,
|
|
155
|
-
total: items.length,
|
|
156
|
-
tokens_used: estimateTokens(kept.map(serialize).join("\n")),
|
|
157
|
-
};
|
|
158
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-emptive Subgraph Cache — preloads 1-hop neighbors on first directory access.
|
|
3
|
-
*
|
|
4
|
-
* S.3: When an agent first queries a file in a directory, pre-warm the cache
|
|
5
|
-
* with intelligence for all sibling files in that directory. This eliminates
|
|
6
|
-
* latency on subsequent queries within the same module.
|
|
7
|
-
*/
|
|
8
|
-
const TTL_MS = 5 * 60 * 1000;
|
|
9
|
-
const MAX_ENTRIES = 500;
|
|
10
|
-
/** RC-5: Maximum tracked directories before eviction. */
|
|
11
|
-
const MAX_DIRECTORIES = 200;
|
|
12
|
-
export function createSubgraphCache() {
|
|
13
|
-
const cache = new Map();
|
|
14
|
-
const directoriesWarmed = new Set();
|
|
15
|
-
function get(filePath) {
|
|
16
|
-
const entry = cache.get(filePath);
|
|
17
|
-
if (!entry)
|
|
18
|
-
return null;
|
|
19
|
-
if (Date.now() - entry.cachedAt > TTL_MS) {
|
|
20
|
-
cache.delete(filePath);
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
return entry;
|
|
24
|
-
}
|
|
25
|
-
function warmDirectory(dirPath, files, loader) {
|
|
26
|
-
if (directoriesWarmed.has(dirPath))
|
|
27
|
-
return;
|
|
28
|
-
directoriesWarmed.add(dirPath);
|
|
29
|
-
// RC-5: Evict oldest directories if set exceeds limit
|
|
30
|
-
if (directoriesWarmed.size > MAX_DIRECTORIES) {
|
|
31
|
-
const iter = directoriesWarmed.values();
|
|
32
|
-
for (let i = 0; i < 50; i++) {
|
|
33
|
-
const v = iter.next().value;
|
|
34
|
-
if (v !== undefined)
|
|
35
|
-
directoriesWarmed.delete(v);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
for (const file of files.slice(0, 20)) {
|
|
39
|
-
if (cache.has(file))
|
|
40
|
-
continue;
|
|
41
|
-
if (cache.size >= MAX_ENTRIES)
|
|
42
|
-
break;
|
|
43
|
-
try {
|
|
44
|
-
const data = loader(file);
|
|
45
|
-
cache.set(file, { filePath: file, cachedAt: Date.now(), data });
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
/* skip failed loads */
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function has(filePath) {
|
|
53
|
-
const entry = cache.get(filePath);
|
|
54
|
-
if (!entry)
|
|
55
|
-
return false;
|
|
56
|
-
if (Date.now() - entry.cachedAt > TTL_MS) {
|
|
57
|
-
cache.delete(filePath);
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
function invalidate(filePath) {
|
|
63
|
-
cache.delete(filePath);
|
|
64
|
-
}
|
|
65
|
-
function invalidateDirectory(dirPath) {
|
|
66
|
-
directoriesWarmed.delete(dirPath);
|
|
67
|
-
for (const [key] of cache) {
|
|
68
|
-
if (key.startsWith(dirPath))
|
|
69
|
-
cache.delete(key);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function size() {
|
|
73
|
-
return cache.size;
|
|
74
|
-
}
|
|
75
|
-
function clear() {
|
|
76
|
-
cache.clear();
|
|
77
|
-
directoriesWarmed.clear();
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
get,
|
|
81
|
-
warmDirectory,
|
|
82
|
-
has,
|
|
83
|
-
invalidate,
|
|
84
|
-
invalidateDirectory,
|
|
85
|
-
size,
|
|
86
|
-
clear,
|
|
87
|
-
};
|
|
88
|
-
}
|