@mrclrchtr/supi-code-intelligence 4.4.0 → 4.5.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.
Files changed (38) hide show
  1. package/README.md +84 -219
  2. package/node_modules/@mrclrchtr/supi-code-runtime/README.md +6 -0
  3. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  4. package/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  5. package/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  6. package/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  7. package/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  8. package/node_modules/@mrclrchtr/supi-lsp/README.md +1 -1
  9. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/README.md +6 -0
  10. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  11. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  12. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  13. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  14. package/node_modules/@mrclrchtr/supi-lsp/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  15. package/node_modules/@mrclrchtr/supi-lsp/package.json +3 -3
  16. package/node_modules/@mrclrchtr/supi-lsp/src/client/client-refresh.ts +1 -1
  17. package/node_modules/@mrclrchtr/supi-lsp/src/client/client.ts +6 -6
  18. package/node_modules/@mrclrchtr/supi-tree-sitter/README.md +1 -1
  19. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/README.md +6 -0
  20. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  21. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  22. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-code-runtime/package.json +2 -2
  23. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/README.md +1 -1
  24. package/node_modules/@mrclrchtr/supi-tree-sitter/node_modules/@mrclrchtr/supi-core/package.json +1 -1
  25. package/node_modules/@mrclrchtr/supi-tree-sitter/package.json +3 -3
  26. package/package.json +9 -8
  27. package/src/extension.ts +2 -2
  28. package/src/{ui/markdown → overview}/overview-data.ts +1 -1
  29. package/src/overview/types.ts +21 -0
  30. package/src/session/orientation/collect.ts +39 -26
  31. package/src/{ui/markdown → session/orientation}/gather.ts +44 -24
  32. package/src/session/orientation-types.ts +23 -0
  33. package/src/session/orientation-workflow.ts +1 -11
  34. package/src/types/execution.ts +1 -1
  35. package/src/types/index.ts +1 -1
  36. package/src/types/details.ts +0 -18
  37. package/src/ui/markdown/types.ts +0 -75
  38. /package/src/{ui/markdown → overview}/overview.ts +0 -0
package/README.md CHANGED
@@ -1,272 +1,137 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-code-intelligence">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/social-preview.png" alt="SuPi Code Intelligence" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
8
8
 
9
- # @mrclrchtr/supi-code-intelligence
9
+ # @mrclrchtr/supi-code-intelligence — LSP and Tree-sitter AST Code Intelligence for Pi
10
10
 
11
- Focused code understanding, navigation, search, health, and refactoring tools for the [pi coding agent](https://github.com/earendil-works/pi).
11
+ Gives the [Pi coding agent](https://github.com/earendil-works/pi) direct, model-callable LSP semantic navigation and Tree-sitter AST structural code analysis.
12
12
 
13
- ## Install
14
-
15
- ```bash
16
- pi install npm:@mrclrchtr/supi-code-intelligence
17
- ```
18
-
19
- For local development:
20
-
21
- ```bash
22
- pi install ./packages/supi-code-intelligence
23
- ```
24
-
25
- ## Quickstart
26
-
27
- The extension detects project languages and starts matching language servers. Install the required server binaries on `PATH`:
28
-
29
- | Language | Binary |
30
- |---|---|
31
- | TypeScript / JavaScript | `typescript-language-server` |
32
- | Python | `pyright-langserver` |
33
- | Rust | `rust-analyzer` |
34
- | Go | `gopls` |
35
- | C / C++ | `clangd` |
36
- | Bash | `bash-language-server` |
37
- | HTML | `vscode-html-language-server` |
38
- | SQL | `sql-language-server` |
39
- | Ruby | `ruby-lsp` |
40
- | Java | `jdtls` |
41
- | Kotlin | `kotlin-lsp` |
42
- | R | `R` with `languageserver` |
43
-
44
- Semantic and structural support intentionally differ where the syntax differs: Ruby LSP handles ERB templates, and gopls handles `go.mod`, while AST search excludes both rather than parsing them with the wrong Tree-sitter grammar. Ruby gemspecs and KornShell files use the existing Ruby and Bash structural grammars.
45
-
46
- Check runtime status with:
13
+ ## LSP + AST, directly available to the agent
47
14
 
48
- ```text
49
- /supi-ci-status
50
- ```
15
+ Instead of relying on file reads and text search alone, Pi can call focused `code_*` tools backed by:
51
16
 
52
- Use `/supi-settings` to disable unneeded language servers or configure instruction filenames. The default instruction files are `CLAUDE.md` and `AGENTS.md`.
17
+ - **Language servers (LSP)** for types, definitions, references, implementations, diagnostics, workspace symbols, and semantic refactoring.
18
+ - **Tree-sitter ASTs** for syntax, outlines, source structure, structural search, and outgoing calls.
53
19
 
54
- ## Public tools
20
+ The two sources complement each other without silently pretending one is the other. Results say which capability supplied the evidence and when semantic or structural analysis is unavailable.
55
21
 
56
- The extension registers exactly eight `code_*` tools:
22
+ ## What your agent gets
57
23
 
58
- - `code_resolve` resolve an anchored/symbol target or discover a file’s declarations as stable session handles
59
- - `code_inspect` — inspect exact point facts
60
- - `code_orientation` — orient around a workspace, module, directory, file, or resolved symbol
61
- - `code_graph` — collect references, structural callees, and implementations
62
- - `code_find` — explicit AST structural or semantic workspace-symbol search
63
- - `code_health` — report live diagnostics, server status, and supplemental Capability Warnings
64
- - `code_refactor_plan` — preview a precise semantic refactor without mutation
65
- - `code_refactor_apply` — apply a stored plan after freshness checks
24
+ After installation, keep asking Pi normal coding questions. The agent can:
66
25
 
67
- `code_impact`, `code_context`, `code_brief`, `code_references`, `code_calls`, and `code_implementations` are not compatibility aliases.
26
+ - **Map an unfamiliar repository** — understand workspaces, packages, entry points, dependencies, and local `CLAUDE.md` or `AGENTS.md` instructions before editing.
27
+ - **Navigate precisely with LSP** — identify the exact symbol at a source location and inspect its type, definition, enclosing declaration, and nearby diagnostics.
28
+ - **Follow relationships across LSP and AST evidence** — find references, implementations, and outgoing calls without guessing from matching text.
29
+ - **Search parsed code structure** — query AST definitions, types, interfaces, classes, methods, enums, imports, exports, and call sites.
30
+ - **Check live project health** — inspect language-server status and current errors or warnings, with an option to refresh stale diagnostics.
31
+ - **Refactor safely** — preview language-aware renames and extractions before applying them. Plans are rejected if the files changed in the meantime.
32
+ - **See uncertainty clearly** — results distinguish “nothing found” from incomplete or unavailable analysis and disclose omitted matches.
68
33
 
69
- A complete manifest-derived architecture overview is injected once near session start when a project model is available; discovered modules, descriptions, entrypoints, and relationships are not truncated.
34
+ When Pi recognizes a workspace, the agent also receives an architecture overview near the start of the session, so it can orient before spending turns opening files.
70
35
 
71
- ## Exact-one target selectors
36
+ ## Example requests
72
37
 
73
- Target-taking tools use nested, exact-one selectors. Depending on the tool, the accepted branch is one of:
38
+ You do not need to learn the tool-call syntax. Try asking Pi:
74
39
 
75
- ```text
76
- { target: { handle: "tg-…" } }
77
- { target: { anchor: { file: "src/a.ts", line: 10, character: 5 } } }
78
- { target: { symbol: { query: "myFunction", scope: "src" } } }
79
- { target: { file: "src/a.ts" } } # code_resolve only
80
- ```
40
+ - “Map this repository and explain where authentication lives.”
41
+ - “Find every use and implementation of `PaymentProvider`.”
42
+ - “What does `executeAskUser` call, and where is it referenced?”
43
+ - “Find all exported interfaces under `packages/api`.”
44
+ - “Check this project for current language-server diagnostics.”
45
+ - “Rename `oldName` to `newName`, but show me the refactor plan before applying it.”
81
46
 
82
- No flat `targetId`, `file`, `line`, `character`, or `symbol` target fields are accepted. There is no precedence between contradictory inputs.
47
+ ## See it in action
83
48
 
84
- Coordinates are 1-based; `character` is a UTF-16 column. Establishing or refining a target requires ready semantic capability. Tree-sitter may supplement LSP evidence after readiness, but cannot create targets in a structural-only workspace.
49
+ Select any screenshot to open it at full resolution.
85
50
 
86
- `symbolKind` is an optional exact filter over the 26 provider-reported LSP `SymbolKind` values exposed by the tool schema. It is not a source-language classifier: for example, LSP has no `TypeAlias` kind and TypeScript may report a type alias as `Variable`. Omit the filter when the provider category is uncertain. If a symbol query reports candidates but none has the requested kind, the result returns a bounded Symbol-kind mismatch with observed candidate kinds and handles rather than claiming the symbol was not found or silently promoting a mismatch.
51
+ ### Understand the workspace
87
52
 
88
- A file selector enumerates all provider-reported declarations, including nested declarations, then returns a bounded Target group with exact total/omitted metadata. Only visible members are materialized as handles. Provider-proven top-level declarations are presented first; nested declarations and declarations with unknown hierarchy remain source-ordered after that tier. Hierarchy comes only from LSP `DocumentSymbol` structure or structural outline ancestry. Every flat `SymbolInformation` observation remains explicitly unknown—even when it reports `containerName`; that value remains container metadata only. Unknown observations are never promoted without known hierarchy evidence and produce an exact unknown-hierarchy disclosure. Semantic and structural declarations are matched through canonical declaration identity; semantic facts win duplicates while each member retains a typed, monotonic set of contributing provider families. Exact Tree-sitter evidence at a declaration's name anchor can refine an underspecified identity kind—for example, reconciling a TypeScript LSP `Variable` with the same structural `type` alias—without changing the displayed or filterable provider kind. Separate type/value namespace declarations remain distinct. The group separately reports successful discovery providers. Its aggregate confidence is conservative across the complete group—semantic only when every member is semantic—while an empty group derives confidence from its strongest successful enumerator. Declaration line/occurrence keeps overload handles distinct without tying identity to the preferred display anchor. The group itself is not a handle; choose one member handle for precise graph or refactor work. A file with no declarations returns a successful empty group.
53
+ [![Workspace orientation showing package files, manifest details, and relationships][workspace-orientation]][workspace-orientation]
89
54
 
90
- ### Handle lifecycle
55
+ ### Inspect an exact symbol
91
56
 
92
- Target and plan handles are:
57
+ [![Symbol inspection showing syntax, hover information, definition, and diagnostics][symbol-inspection]][symbol-inspection]
93
58
 
94
- - session-scoped
95
- - fingerprint-checked
96
- - stale after a touched file changes
97
- - not persisted across sessions
59
+ ### Follow references and calls
98
60
 
99
- A stale handle fails explicitly. Re-run `code_resolve` or `code_refactor_plan` to obtain a fresh handle. A fresh existing handle remains usable for structural consumers if LSP later becomes unavailable; mixed tools suppress unavailable semantic/diagnostic sections, and semantic consumers still require a concrete live client.
61
+ [![Relationship graph showing references and direct calls][relationship-graph]][relationship-graph]
100
62
 
101
- ## Common workflows
63
+ ### Check live health
102
64
 
103
- ### Discover targets in a known file
65
+ [![Code health showing diagnostics and running language servers][code-health]][code-health]
104
66
 
105
- ```text
106
- code_resolve({ target: { file: "src/billing.ts" }, maxResults: 10 })
107
- → choose one member targetId from the returned Target group
108
- ```
67
+ ### Preview a safe refactor
109
68
 
110
- Use `code_orientation({ focus: { path: "src/billing.ts" } })` instead when you want file context rather than reusable symbol handles.
69
+ [![Refactor plan previewing a semantic rename without changing files][refactor-plan]][refactor-plan]
111
70
 
112
- ### Resolve and inspect relationships
71
+ ## Agent tools
113
72
 
114
- ```text
115
- code_resolve({ target: { symbol: { query: "myFunction", scope: "packages/app" } } })
116
- → capture targetId
73
+ The package adds eight tools that Pi selects as needed:
117
74
 
118
- code_graph({
119
- target: { handle: "tg-…" },
120
- relations: ["references", "callees"]
121
- })
122
- ```
123
-
124
- Use the result's Read Next ranges with `read` before editing.
125
-
126
- ### Orient before editing
127
-
128
- ```text
129
- code_orientation({ focus: { path: "packages/my-package" } })
130
- code_orientation({ focus: { module: "@scope/my-package" } })
131
- code_orientation({ focus: { target: { handle: "tg-…" } } })
132
- ```
75
+ | Tool | What it lets the agent do |
76
+ |---|---|
77
+ | `code_orientation` | Understand a workspace, package, directory, file, or symbol before reading broadly |
78
+ | `code_resolve` | Resolve an exact symbol, disambiguate matches, or list declarations in a file |
79
+ | `code_inspect` | Combine AST syntax with LSP type, definition, symbol, and diagnostic facts at one source location |
80
+ | `code_graph` | Follow LSP references and implementations plus AST calls made by a symbol |
81
+ | `code_find` | Search LSP workspace symbols or parsed AST source structure rather than raw text |
82
+ | `code_health` | Check live diagnostics, language servers, and code-intelligence availability |
83
+ | `code_refactor_plan` | Preview a precise rename or extraction without changing files |
84
+ | `code_refactor_apply` | Apply a fresh refactor plan after safety checks |
133
85
 
134
- Omit `focus` for workspace Orientation. Directory Orientation also surfaces applicable local instruction files once per session branch. On-demand Orientation reports direct filesystem entries, successfully parsed manifest/workspace fields, and explicit provider observations. Package topology is manifest-declared—not a complete runtime architecture graph—and unavailable metadata is shown as its own warning instead of an absence claim. Workspace discovery supports `package.json#workspaces` and `pnpm-workspace.yaml#packages` with literal paths, `*`, `**`, and trailing exclusions; unsupported patterns fail closed.
86
+ Pi's built-in `grep` remains the right tool for literal or regular-expression searches; these tools add symbol and source-structure awareness.
135
87
 
136
- ### Inspect one source point
88
+ ## Install
137
89
 
138
- ```text
139
- code_inspect({
140
- point: { file: "src/index.ts", line: 12, character: 8 },
141
- maxResults: 10
142
- })
90
+ ```bash
91
+ pi install npm:@mrclrchtr/supi-code-intelligence
143
92
  ```
144
93
 
145
- Point inspection validates a readable regular file and an in-bounds 1-based UTF-16 point before provider work. It reports syntax, the narrowest provider-reported enclosing declaration, hover/type facts, definitions, and diagnostics whose ranges intersect the point line ±2. Every section distinguishes completed-empty, partial, and unavailable collection; diagnostics are never substituted from elsewhere in the file. Relationship guidance is emitted only from an evidence-backed definition location: resolve that definition first, then use its handle with `code_graph`. Structural-only inspection does not recommend a fresh graph anchor that LSP-first target establishment would reject.
146
-
147
- ### Search code-aware evidence
94
+ To try it for one run without installing:
148
95
 
149
- ```text
150
- code_find({ query: "widget", mode: "semantic" })
151
- code_find({ query: "widget", mode: "ast", kind: "definition" })
152
- code_find({ query: "@scope/package", mode: "ast", kind: "import", scope: ["src"] })
96
+ ```bash
97
+ pi -e npm:@mrclrchtr/supi-code-intelligence
153
98
  ```
154
99
 
155
- `mode` is required and never silently falls back:
156
-
157
- - `semantic` — workspace symbols; rejects `kind`
158
- - `ast` — structured source-shape search; requires `kind`
159
-
160
- Use PI's `grep` tool for literal or regex source search when it is active. `code_find` does not redirect removed text/regex calls to another tool.
161
-
162
- AST `kind` accepts exactly `definition`, `import`, `export`, `call`, `type`, `interface`, `class`, `method`, and `enum`. Outline-backed kinds support every vendored grammar family; HTML definitions are elements with non-empty `id` attributes, while SQL definitions are supported `CREATE` declarations and shallow table/type members. Imports and exports remain JavaScript/TypeScript-only. AST `call` finds written call-site names, not symbol identity. Use `code_graph` references on a resolved target for symbol-identity relationships.
163
-
164
- #### AST Scan universe
100
+ ## Language support
165
101
 
166
- With omitted `scope`, AST mode scans from the workspace cwd. Eligibility is operation-aware: `definition`, `type`, `interface`, `class`, `method`, and `enum` use outline support; `import` and `export` use their matching extractors; `call` uses call-site support. A grammar being parseable does not imply that every operation supports it. Below each scan root the policy excludes operation-ineligible files, hidden entries, and `.git`, `.pnpm`, `node_modules`, `dist`, `build`, `out`, `.next`, `.nuxt`, `coverage`, `.turbo`, `.cache`, and `__pycache__`. Descendant symlinks are not followed. `.gitignore`, `.ignore`, `.rgignore`, and global Git configuration are not consulted, so visible Git-ignored source remains eligible when the selected operation supports it.
167
-
168
- Every explicit scope root is honored before descendant exclusions resume. An operation-eligible source file explicitly selected under `node_modules`, for example, is analyzed. An exact file whose grammar does not support the selected operation is invalid rather than redirected; a directory containing only operation-ineligible source is unavailable. Mixed scopes remain complete over their declared operation-specific universe and disclose operation exclusions. Duplicate, nested, and overlapping scopes are canonically deduplicated.
169
-
170
- AST Scan details disclose the structural operation, supported extensions, roots, policy exclusions, eligible/analyzed file counts, and runtime limitations. Complete scans retain exact match totals. Unreadable paths, provider failures, the 5,000-file safety cap, or the 10-second deadline produce partial evidence with an unknown match total; skipped file counts are not reported as omitted matches.
171
-
172
- ### Check health
173
-
174
- ```text
175
- code_health({ refresh: true, include: ["diagnostics", "servers"] })
176
- ```
102
+ Structural code search is bundled with the package. Full symbol navigation, references, diagnostics, and semantic refactoring require the matching language server on `PATH`.
177
103
 
178
- Omitting `include` requests `diagnostics` and `servers`. The selectable sections are `diagnostics` and `servers`; Capability Warnings supplement diagnostic/server requests rather than acting as another section. `code_health` does not discover precomputed coverage or unused-code reports. A future batch-analyzer integration must collect its observations when called.
104
+ The extension detects project languages and starts installed servers automatically:
179
105
 
180
- An existing file scope performs a live file diagnostic request, so completed-empty can establish no reported errors or warnings for that file. Omitted or directory scope reports a tracked-file diagnostic snapshot, not proof that the workspace is clean. Server inventory remains workspace-wide. `refresh: true` reports the actual workspace-runtime attempt—targeted active-client and restart counts plus the bounded stale-module assessment—rather than claiming recovered or fresh diagnostics.
181
-
182
- ### Plan and apply a rename
106
+ | Language | Required binary |
107
+ |---|---|
108
+ | TypeScript / JavaScript | `typescript-language-server` |
109
+ | Python | `pyright-langserver` |
110
+ | Rust | `rust-analyzer` |
111
+ | Go | `gopls` |
112
+ | C / C++ | `clangd` |
113
+ | Bash | `bash-language-server` |
114
+ | HTML | `vscode-html-language-server` |
115
+ | SQL | `sql-language-server` |
116
+ | Ruby | `ruby-lsp` |
117
+ | Java | `jdtls` |
118
+ | Kotlin | `kotlin-lsp` |
119
+ | R | `R` with the `languageserver` package |
183
120
 
184
- ```text
185
- code_refactor_plan({
186
- target: { handle: "tg-…" },
187
- operation: { rename_symbol: { newName: "newName" } }
188
- })
189
- → review edits and capture planId
121
+ If a server is missing, the agent can still use available workspace and structural evidence. Semantic features report that they are unavailable rather than silently guessing.
190
122
 
191
- code_refactor_apply({ planId: "plan-…" })
192
- ```
123
+ ## Status and settings
193
124
 
194
- Extract operations use the same exact-one operation shape:
125
+ Open the status view to see detected languages, running or missing servers, and capability warnings:
195
126
 
196
127
  ```text
197
- operation: {
198
- extract_function: {
199
- newName: "computeValue",
200
- range: {
201
- start: { line: 10, character: 3 },
202
- end: { line: 12, character: 20 }
203
- }
204
- }
205
- }
206
- ```
207
-
208
- Planning never writes files. Application is the sole mutator, acquires sorted per-file mutation queues, revalidates fingerprints and edit safety, and rolls back earlier writes if a later write fails.
209
-
210
- ## Graph evidence
211
-
212
- `code_graph.relations` accepts only:
213
-
214
- - `references` — semantic, symbol-identity evidence
215
- - `callees` — structural outgoing calls as written in source
216
- - `implements` — semantic implementation evidence
217
- - `all` — exactly the three relations above and must be the only list item
218
-
219
- `calleeDepth: "direct"` excludes nested function/method/callback scopes; `"deep"` includes them. Structural callees are not callers and are not symbol-identity relationships.
220
-
221
- Imports and exports remain available as explicit AST search kinds in `code_find`; they are not graph relation families. Test identity is not inferred: use PI grep for literal/regex source search or AST `call` when appropriate, neither of which claims that a match is a test.
222
-
223
- ## Honest correctness
224
-
225
- - Semantic, structural, and filesystem evidence retain their provenance.
226
- - Required capability failures are explicit; tools do not silently switch substrates.
227
- - `maxResults` is a display cap. Results disclose shown, total, and omitted evidence when known.
228
- - AST results declare their Scan universe; interrupted enumeration or analysis never becomes a complete absence claim.
229
- - Invalid semantic-provider locations are omitted from project/external facts and disclosed separately as partial evidence.
230
- - `code_health` reports live observations and does not infer analyzer results from conventional report files.
231
- - Zero matches are successful searches, not tool failures.
232
-
233
- ## Startup and settings
234
-
235
- Detected language servers start concurrently. In polyglot workspaces, disable unneeded servers in `.pi/supi/config.json` or `~/.pi/agent/supi/config.json`:
236
-
237
- ```json
238
- {
239
- "lsp": {
240
- "servers": {
241
- "python": { "enabled": false },
242
- "rust": { "enabled": false }
243
- }
244
- }
245
- }
128
+ /supi-ci-status
246
129
  ```
247
130
 
248
- The old global `lsp.enabled` and `lsp.active` keys are deprecated and ignored. Missing binaries, disabled languages, structural startup failures, and obsolete settings appear as Capability Warnings in `/supi-ci-status`, diagnostic/server `code_health` results, and the existing one-time startup notice. If every language-server definition is disabled, the LSP runtime publishes an explicit disabled state and semantic capability remains unavailable. A ready runtime owner may have only lazy routes: server inventory remains status evidence, while diagnostics require an active ready project server or successful file-scoped readiness. `refresh: true` attempts recovery before the final Semantic health state is derived. Public health details expose one authoritative `semanticState` (`ready`, `pending`, `inactive`, `disabled`, or `unavailable`) plus structured `capabilityWarnings` supplemental status.
249
-
250
- ## Architecture
251
-
252
- - `supi-code-intelligence` owns the Workspace code-intelligence session, workflow policy, Tool result assembly, and public tool family.
253
- - `supi-code-runtime` owns canonical provider contracts and workspace capability state.
254
- - `supi-lsp` owns semantic lifecycle and the Workspace LSP runtime.
255
- - `supi-tree-sitter` owns structural parser reuse.
256
- - The process-shared Workspace provider host starts LSP and Tree-sitter once per canonical workspace and releases them after the final session lease. Target and refactor handles remain session-local.
257
- - The Headless inspection profile is for managed child sessions and registers only the six non-mutating inspection tools; it omits refactors, settings, UI, commands, and overview injection.
258
-
259
- Markdown and TUI are adapters over assembled typed results. Providers, clients, mutable targets, and the LSP manager do not cross the workflow seam.
260
-
261
- See:
262
-
263
- - [`docs/adr/0015-workspace-session-and-tool-result-assembly.md`](../../docs/adr/0015-workspace-session-and-tool-result-assembly.md)
264
- - [`docs/adr/0016-workspace-lsp-runtime-interface.md`](../../docs/adr/0016-workspace-lsp-runtime-interface.md)
265
- - [`docs/adr/0017-focused-code-tools-and-evidence-policy.md`](../../docs/adr/0017-focused-code-tools-and-evidence-policy.md)
266
- - [`docs/adr/0002-refactor-planner-applier-split.md`](../../docs/adr/0002-refactor-planner-applier-split.md)
267
-
268
- ## Package exports
131
+ Use `/supi-settings` to disable language servers you do not need or change the instruction filenames surfaced during directory orientation. The defaults are `CLAUDE.md` and `AGENTS.md`.
269
132
 
270
- - `@mrclrchtr/supi-code-intelligence/api` — reusable type contracts
271
- - `@mrclrchtr/supi-code-intelligence/extension` — full interactive PI extension entrypoint
272
- - `@mrclrchtr/supi-code-intelligence/headless` — managed-child inspection profile
133
+ [workspace-orientation]: https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/workspace-orientation.png
134
+ [symbol-inspection]: https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/symbol-inspection.png
135
+ [relationship-graph]: https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/relationship-graph.png
136
+ [code-health]: https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/code-health.png
137
+ [refactor-plan]: https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-intelligence/assets/refactor-plan.png
@@ -1,3 +1,9 @@
1
+ <div align="center">
2
+ <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-code-runtime">
3
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-runtime/assets/social-preview.png" alt="SuPi Code Runtime" width="100%">
4
+ </a>
5
+ </div>
6
+
1
7
  # @mrclrchtr/supi-code-runtime
2
8
 
3
9
  Shared workspace context, capability contracts, and canonical types for the SuPi code-understanding stack.
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-core">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/social-preview.png" alt="SuPi Core" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi core — shared infrastructure for SuPi extensions (XML context tags, config system)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-code-runtime",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi code-runtime — shared workspace context, capability contracts, and canonical types for the code-understanding stack",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  "!__tests__"
30
30
  ],
31
31
  "dependencies": {
32
- "@mrclrchtr/supi-core": "4.4.0"
32
+ "@mrclrchtr/supi-core": "4.5.1"
33
33
  },
34
34
  "bundledDependencies": [
35
35
  "@mrclrchtr/supi-core"
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-core">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/social-preview.png" alt="SuPi Core" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi core — shared infrastructure for SuPi extensions (XML context tags, config system)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-lsp">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-lsp/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-lsp/assets/social-preview.png" alt="SuPi LSP" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,3 +1,9 @@
1
+ <div align="center">
2
+ <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-code-runtime">
3
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-runtime/assets/social-preview.png" alt="SuPi Code Runtime" width="100%">
4
+ </a>
5
+ </div>
6
+
1
7
  # @mrclrchtr/supi-code-runtime
2
8
 
3
9
  Shared workspace context, capability contracts, and canonical types for the SuPi code-understanding stack.
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-core">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/social-preview.png" alt="SuPi Core" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi core — shared infrastructure for SuPi extensions (XML context tags, config system)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-code-runtime",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi code-runtime — shared workspace context, capability contracts, and canonical types for the code-understanding stack",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  "!__tests__"
30
30
  ],
31
31
  "dependencies": {
32
- "@mrclrchtr/supi-core": "4.4.0"
32
+ "@mrclrchtr/supi-core": "4.5.1"
33
33
  },
34
34
  "bundledDependencies": [
35
35
  "@mrclrchtr/supi-core"
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-core">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-core/assets/social-preview.png" alt="SuPi Core" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-core",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi core — shared infrastructure for SuPi extensions (XML context tags, config system)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrclrchtr/supi-lsp",
3
- "version": "4.4.0",
3
+ "version": "4.5.1",
4
4
  "description": "SuPi LSP runtime — Language Server Protocol integration library for pi",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -37,8 +37,8 @@
37
37
  "vscode-jsonrpc": "^9.0.0",
38
38
  "vscode-languageserver-protocol": "^3.17.5",
39
39
  "vscode-languageserver-types": "^3.17.5",
40
- "@mrclrchtr/supi-code-runtime": "4.4.0",
41
- "@mrclrchtr/supi-core": "4.4.0"
40
+ "@mrclrchtr/supi-code-runtime": "4.5.1",
41
+ "@mrclrchtr/supi-core": "4.5.1"
42
42
  },
43
43
  "bundledDependencies": [
44
44
  "@mrclrchtr/supi-code-runtime",
@@ -85,7 +85,7 @@ function sendDidChange(client: LspClient, uri: string, version: number, content:
85
85
  /** Send an RPC notification through the client. */
86
86
  function sendNotification(client: LspClient, method: string, params: unknown): void {
87
87
  const rpc = accessClient(client).rpc;
88
- if (rpc) rpc.sendNotification(method, params);
88
+ if (rpc) void rpc.sendNotification(method, params);
89
89
  }
90
90
 
91
91
  /** Clear open doc and diagnostic state for a URI. */
@@ -223,7 +223,7 @@ export class LspClient {
223
223
  })) as InitializeResult;
224
224
 
225
225
  this.capabilities = result.capabilities;
226
- this.rpc.sendNotification("initialized", {});
226
+ void this.rpc.sendNotification("initialized", {});
227
227
  this._status = "running";
228
228
 
229
229
  this.armNoProgressTimer();
@@ -306,7 +306,7 @@ export class LspClient {
306
306
  }
307
307
 
308
308
  this.openDocs.set(uri, { version: 1, languageId });
309
- this.rpc.sendNotification("textDocument/didOpen", {
309
+ void this.rpc.sendNotification("textDocument/didOpen", {
310
310
  textDocument: {
311
311
  uri,
312
312
  languageId,
@@ -330,7 +330,7 @@ export class LspClient {
330
330
  }
331
331
 
332
332
  doc.version++;
333
- this.rpc.sendNotification("textDocument/didChange", {
333
+ void this.rpc.sendNotification("textDocument/didChange", {
334
334
  textDocument: { uri, version: doc.version } satisfies VersionedTextDocumentIdentifier,
335
335
  contentChanges: [{ text: content }],
336
336
  });
@@ -345,7 +345,7 @@ export class LspClient {
345
345
 
346
346
  if (!wasOpen || !this.rpc || this._status !== "running") return;
347
347
 
348
- this.rpc.sendNotification("textDocument/didClose", {
348
+ void this.rpc.sendNotification("textDocument/didClose", {
349
349
  textDocument: { uri } satisfies TextDocumentIdentifier,
350
350
  });
351
351
  }
@@ -364,7 +364,7 @@ export class LspClient {
364
364
  removedFiles.push(filePath);
365
365
 
366
366
  if (wasOpen && this.rpc && this._status === "running") {
367
- this.rpc.sendNotification("textDocument/didClose", {
367
+ void this.rpc.sendNotification("textDocument/didClose", {
368
368
  textDocument: { uri } satisfies TextDocumentIdentifier,
369
369
  });
370
370
  }
@@ -421,7 +421,7 @@ export class LspClient {
421
421
  /** Notify the server that watched workspace files changed. */
422
422
  notifyWorkspaceFileChanges(changes: FileEvent[]): void {
423
423
  if (!this.rpc || this._status !== "running" || changes.length === 0) return;
424
- this.rpc.sendNotification("workspace/didChangeWatchedFiles", {
424
+ void this.rpc.sendNotification("workspace/didChangeWatchedFiles", {
425
425
  changes,
426
426
  } satisfies DidChangeWatchedFilesParams);
427
427
  }
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-tree-sitter">
3
3
  <picture>
4
- <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-tree-sitter/assets/logo.png" alt="SuPi" width="50%">
4
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-tree-sitter/assets/social-preview.png" alt="SuPi Tree-sitter" width="100%">
5
5
  </picture>
6
6
  </a>
7
7
  </div>
@@ -1,3 +1,9 @@
1
+ <div align="center">
2
+ <a href="https://github.com/mrclrchtr/supi/tree/main/packages/supi-code-runtime">
3
+ <img src="https://raw.githubusercontent.com/mrclrchtr/supi/main/packages/supi-code-runtime/assets/social-preview.png" alt="SuPi Code Runtime" width="100%">
4
+ </a>
5
+ </div>
6
+
1
7
  # @mrclrchtr/supi-code-runtime
2
8
 
3
9
  Shared workspace context, capability contracts, and canonical types for the SuPi code-understanding stack.