@plurnk/plurnk-service 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.env.defaults +21 -12
  2. package/INSTALL.md +11 -7
  3. package/SPEC.md +437 -304
  4. package/dist/build-info.json +1 -1
  5. package/dist/content/edit-collision.d.ts +5 -0
  6. package/dist/content/edit-collision.d.ts.map +1 -0
  7. package/dist/content/edit-collision.js +14 -0
  8. package/dist/content/edit-collision.js.map +1 -0
  9. package/dist/content/edit-receipt.d.ts +3 -2
  10. package/dist/content/edit-receipt.d.ts.map +1 -1
  11. package/dist/content/edit-receipt.js +58 -13
  12. package/dist/content/edit-receipt.js.map +1 -1
  13. package/dist/content/index.d.ts +4 -1
  14. package/dist/content/index.d.ts.map +1 -1
  15. package/dist/content/index.js +3 -1
  16. package/dist/content/index.js.map +1 -1
  17. package/dist/content/line-anchors.d.ts +41 -0
  18. package/dist/content/line-anchors.d.ts.map +1 -0
  19. package/dist/content/line-anchors.js +191 -0
  20. package/dist/content/line-anchors.js.map +1 -0
  21. package/dist/content/read-projector.d.ts +7 -1
  22. package/dist/content/read-projector.d.ts.map +1 -1
  23. package/dist/content/read-projector.js +46 -10
  24. package/dist/content/read-projector.js.map +1 -1
  25. package/dist/content/read-resolve.js +3 -3
  26. package/dist/content/read-resolve.js.map +1 -1
  27. package/dist/core/BudgetReadout.d.ts.map +1 -1
  28. package/dist/core/BudgetReadout.js +9 -2
  29. package/dist/core/BudgetReadout.js.map +1 -1
  30. package/dist/core/ChannelWrite.js +1 -1
  31. package/dist/core/ChannelWrite.js.map +1 -1
  32. package/dist/core/Dispatcher.d.ts +13 -3
  33. package/dist/core/Dispatcher.d.ts.map +1 -1
  34. package/dist/core/Dispatcher.js +391 -113
  35. package/dist/core/Dispatcher.js.map +1 -1
  36. package/dist/core/DurableStatement.d.ts.map +1 -1
  37. package/dist/core/DurableStatement.js +2 -0
  38. package/dist/core/DurableStatement.js.map +1 -1
  39. package/dist/core/Engine.d.ts +13 -14
  40. package/dist/core/Engine.d.ts.map +1 -1
  41. package/dist/core/Engine.js +434 -300
  42. package/dist/core/Engine.js.map +1 -1
  43. package/dist/core/Engine.sql +156 -90
  44. package/dist/core/ExecutableTools.d.ts +10 -0
  45. package/dist/core/ExecutableTools.d.ts.map +1 -0
  46. package/dist/core/ExecutableTools.js +41 -0
  47. package/dist/core/ExecutableTools.js.map +1 -0
  48. package/dist/core/ExecutorRegistry.d.ts +3 -3
  49. package/dist/core/ExecutorRegistry.d.ts.map +1 -1
  50. package/dist/core/ExecutorRegistry.js +2 -2
  51. package/dist/core/ExecutorRegistry.js.map +1 -1
  52. package/dist/core/LogBody.d.ts +2 -0
  53. package/dist/core/LogBody.d.ts.map +1 -1
  54. package/dist/core/LogBody.js +17 -5
  55. package/dist/core/LogBody.js.map +1 -1
  56. package/dist/core/LogEntryProjection.d.ts +14 -0
  57. package/dist/core/LogEntryProjection.d.ts.map +1 -0
  58. package/dist/core/LogEntryProjection.js +38 -0
  59. package/dist/core/LogEntryProjection.js.map +1 -0
  60. package/dist/core/ModelCall.d.ts +27 -0
  61. package/dist/core/ModelCall.d.ts.map +1 -0
  62. package/dist/core/ModelCall.js +125 -0
  63. package/dist/core/ModelCall.js.map +1 -0
  64. package/dist/core/PacketBuilder.d.ts +10 -10
  65. package/dist/core/PacketBuilder.d.ts.map +1 -1
  66. package/dist/core/PacketBuilder.js +131 -103
  67. package/dist/core/PacketBuilder.js.map +1 -1
  68. package/dist/core/ProblemLog.d.ts.map +1 -1
  69. package/dist/core/ProblemLog.js +1 -0
  70. package/dist/core/ProblemLog.js.map +1 -1
  71. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  72. package/dist/core/ProposalLifecycle.js +3 -4
  73. package/dist/core/ProposalLifecycle.js.map +1 -1
  74. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  75. package/dist/core/ProviderInstantiate.js +23 -6
  76. package/dist/core/ProviderInstantiate.js.map +1 -1
  77. package/dist/core/SchemeRegistry.js +7 -7
  78. package/dist/core/SchemeRegistry.js.map +1 -1
  79. package/dist/core/StrikeRail.d.ts +0 -1
  80. package/dist/core/StrikeRail.d.ts.map +1 -1
  81. package/dist/core/StrikeRail.js +6 -4
  82. package/dist/core/StrikeRail.js.map +1 -1
  83. package/dist/core/caps/CapsResolve.js +1 -1
  84. package/dist/core/caps/CapsResolve.js.map +1 -1
  85. package/dist/core/caps/DbEntryCaps.d.ts +2 -1
  86. package/dist/core/caps/DbEntryCaps.d.ts.map +1 -1
  87. package/dist/core/caps/DbEntryCaps.js +8 -5
  88. package/dist/core/caps/DbEntryCaps.js.map +1 -1
  89. package/dist/core/caps/DbProjectionCaps.d.ts +1 -0
  90. package/dist/core/caps/DbProjectionCaps.d.ts.map +1 -1
  91. package/dist/core/caps/DbProjectionCaps.js +29 -0
  92. package/dist/core/caps/DbProjectionCaps.js.map +1 -1
  93. package/dist/core/caps/SchemeCtxImpl.d.ts +5 -2
  94. package/dist/core/caps/SchemeCtxImpl.d.ts.map +1 -1
  95. package/dist/core/caps/SchemeCtxImpl.js +6 -4
  96. package/dist/core/caps/SchemeCtxImpl.js.map +1 -1
  97. package/dist/core/fork.d.ts.map +1 -1
  98. package/dist/core/fork.js +23 -7
  99. package/dist/core/fork.js.map +1 -1
  100. package/dist/core/fork.sql +33 -12
  101. package/dist/core/git-membership.d.ts.map +1 -1
  102. package/dist/core/git-membership.js +1 -2
  103. package/dist/core/git-membership.js.map +1 -1
  104. package/dist/core/git-state.js +1 -1
  105. package/dist/core/git-state.js.map +1 -1
  106. package/dist/core/packet-wire.d.ts +4 -1
  107. package/dist/core/packet-wire.d.ts.map +1 -1
  108. package/dist/core/packet-wire.js +248 -90
  109. package/dist/core/packet-wire.js.map +1 -1
  110. package/dist/core/provider-accounting.d.ts +24 -0
  111. package/dist/core/provider-accounting.d.ts.map +1 -0
  112. package/dist/core/provider-accounting.js +76 -0
  113. package/dist/core/provider-accounting.js.map +1 -0
  114. package/dist/core/search-gate.d.ts +2 -2
  115. package/dist/core/search-gate.d.ts.map +1 -1
  116. package/dist/core/search-gate.js +8 -8
  117. package/dist/core/search-gate.js.map +1 -1
  118. package/dist/core/token-ruler.js +1 -1
  119. package/dist/core/token-ruler.js.map +1 -1
  120. package/dist/core/turn-scheduler.js +1 -1
  121. package/dist/core/turn-scheduler.js.map +1 -1
  122. package/dist/digest/Digest.d.ts.map +1 -1
  123. package/dist/digest/Digest.js +220 -109
  124. package/dist/digest/Digest.js.map +1 -1
  125. package/dist/digest/digest.sql +40 -18
  126. package/dist/schemes/Exec.d.ts.map +1 -1
  127. package/dist/schemes/Exec.js +111 -101
  128. package/dist/schemes/Exec.js.map +1 -1
  129. package/dist/schemes/File.d.ts +5 -4
  130. package/dist/schemes/File.d.ts.map +1 -1
  131. package/dist/schemes/File.js +24 -22
  132. package/dist/schemes/File.js.map +1 -1
  133. package/dist/schemes/Log.d.ts +11 -0
  134. package/dist/schemes/Log.d.ts.map +1 -1
  135. package/dist/schemes/Log.js +171 -106
  136. package/dist/schemes/Log.js.map +1 -1
  137. package/dist/schemes/Log.sql +48 -32
  138. package/dist/schemes/Prompt.d.ts +3 -3
  139. package/dist/schemes/Prompt.d.ts.map +1 -1
  140. package/dist/schemes/Prompt.js +4 -1
  141. package/dist/schemes/Prompt.js.map +1 -1
  142. package/dist/schemes/Skill.d.ts +4 -4
  143. package/dist/schemes/Skill.d.ts.map +1 -1
  144. package/dist/schemes/Skill.js +3 -0
  145. package/dist/schemes/Skill.js.map +1 -1
  146. package/dist/schemes/Worker.d.ts +4 -4
  147. package/dist/schemes/Worker.d.ts.map +1 -1
  148. package/dist/schemes/Worker.js +9 -5
  149. package/dist/schemes/Worker.js.map +1 -1
  150. package/dist/schemes/_entry-crud.d.ts +0 -1
  151. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  152. package/dist/schemes/_entry-crud.js +15 -9
  153. package/dist/schemes/_entry-crud.js.map +1 -1
  154. package/dist/schemes/_entry-crud.sql +2 -14
  155. package/dist/schemes/_entry-find.d.ts +13 -12
  156. package/dist/schemes/_entry-find.d.ts.map +1 -1
  157. package/dist/schemes/_entry-find.js +33 -28
  158. package/dist/schemes/_entry-find.js.map +1 -1
  159. package/dist/schemes/_entry-find.sql +2 -21
  160. package/dist/schemes/_entry-graph.sql +1 -1
  161. package/dist/schemes/_entry-manifest.d.ts +5 -17
  162. package/dist/schemes/_entry-manifest.d.ts.map +1 -1
  163. package/dist/schemes/_entry-manifest.js +28 -24
  164. package/dist/schemes/_entry-manifest.js.map +1 -1
  165. package/dist/schemes/_entry-ops.d.ts +5 -4
  166. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  167. package/dist/schemes/_entry-ops.js +87 -47
  168. package/dist/schemes/_entry-ops.js.map +1 -1
  169. package/dist/schemes/_entry-ops.sql +30 -4
  170. package/dist/schemes/_entry-send.js +4 -4
  171. package/dist/schemes/_entry-send.js.map +1 -1
  172. package/dist/schemes/_search-index.d.ts.map +1 -1
  173. package/dist/schemes/_search-index.js +10 -2
  174. package/dist/schemes/_search-index.js.map +1 -1
  175. package/dist/schemes/exec-abort.js +2 -2
  176. package/dist/schemes/exec-abort.js.map +1 -1
  177. package/dist/server/Daemon.d.ts +1 -1
  178. package/dist/server/Daemon.d.ts.map +1 -1
  179. package/dist/server/Daemon.js +25 -23
  180. package/dist/server/Daemon.js.map +1 -1
  181. package/dist/server/drain.sql +2 -2
  182. package/dist/server/envelope.d.ts +0 -2
  183. package/dist/server/envelope.d.ts.map +1 -1
  184. package/dist/server/envelope.js.map +1 -1
  185. package/dist/server/envelope.sql +2 -2
  186. package/dist/server/lifecycle-recovery.sql +25 -15
  187. package/dist/server/logEntry.d.ts +1 -0
  188. package/dist/server/logEntry.d.ts.map +1 -1
  189. package/dist/server/logEntry.js +13 -1
  190. package/dist/server/logEntry.js.map +1 -1
  191. package/dist/server/logEntry.sql +5 -1
  192. package/migrations/001_schema.sql +603 -207
  193. package/package.json +39 -34
  194. package/dist/core/BudgetOverflow.d.ts +0 -20
  195. package/dist/core/BudgetOverflow.d.ts.map +0 -1
  196. package/dist/core/BudgetOverflow.js +0 -49
  197. package/dist/core/BudgetOverflow.js.map +0 -1
  198. package/dist/core/caps/DbTagCaps.d.ts +0 -10
  199. package/dist/core/caps/DbTagCaps.d.ts.map +0 -1
  200. package/dist/core/caps/DbTagCaps.js +0 -46
  201. package/dist/core/caps/DbTagCaps.js.map +0 -1
package/.env.defaults CHANGED
@@ -97,7 +97,7 @@ PLURNK_SERVICE_LOOP_TIMEOUT=86400000
97
97
  # Maximum characters retained from caught runtime diagnostics in a model-facing
98
98
  # Problem detail. Complete errors remain in daemon diagnostics.
99
99
  PLURNK_SERVICE_ERROR_DETAIL_LIMIT=512
100
- PLURNK_SERVICE_MAX_STRIKES=3
100
+ PLURNK_SERVICE_MAX_STRIKES=6
101
101
  # Completed responses that do not form a valid PLAN...SEND turn are retried
102
102
  # beneath the same engine turn and against the identical packet.
103
103
  PLURNK_SERVICE_EMISSION_ATTEMPTS=3
@@ -131,13 +131,17 @@ PLURNK_SERVICE_GIT_ISO=0
131
131
  # optional in-process reader does not use this bound.
132
132
  PLURNK_SERVICE_GIT_OUTPUT_MAX_BYTES=67108864
133
133
 
134
- # Ordinary bounded OPEN-body projection. READ/FIND results render their selected
135
- # operation result complete; every other log body renders at most these
136
- # independent line and character bounds. A truncated body carries its canonical
137
- # log URI.
134
+ # Ordinary bounded OPEN-body projection. READ/FIND results and PLAN working
135
+ # memory render complete; prompt initialization uses its separate budget share.
136
+ # Every remaining log body renders at most these independent line and character
137
+ # bounds. A truncated body carries its canonical log URI.
138
138
  PLURNK_SERVICE_PREVIEW_LINES=16
139
139
  PLURNK_SERVICE_PREVIEW_CHARS=2560
140
140
 
141
+ # Number of complete neighboring lines hashed on each side of a model-facing
142
+ # line anchor. 0 authenticates only the addressed line.
143
+ PLURNK_SERVICE_LINE_ANCHOR_CONTEXT_LINES=2
144
+
141
145
  # --- Reference docs (auto-READ at turn 0) ---
142
146
  # PLURNK_SERVICE_MD_<ALIAS>=<path> materializes <path>'s markdown as a
143
147
  # worker://plurnk/<ALIAS>.md
@@ -166,8 +170,8 @@ PLURNK_SERVICE_EDIT_RECEIPT_REVISION_CHARS=8
166
170
  # The durable batch retains complete commit ids; this is display-only.
167
171
  PLURNK_SERVICE_BRANCH_RECEIPT_REVISION_CHARS=8
168
172
 
169
- # Number of neighboring lines (or top-level JSON items) rendered on each side
170
- # of an EDIT's resulting range. The model can READ for arbitrary final content.
173
+ # Number of surrounding and landed lines shown at each boundary of an EDIT
174
+ # result. Overlapping windows coalesce; the model can READ omitted content.
171
175
  PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=2
172
176
 
173
177
  # Workspace-tier ceiling on CONCURRENT active runs (a run with a non-terminal loop)
@@ -177,16 +181,21 @@ PLURNK_SERVICE_EDIT_RECEIPT_CONTEXT_LINES=2
177
181
  PLURNK_SERVICE_WORKSPACE_WORKERS_MAX_ACTIVE=-1
178
182
 
179
183
  # --- Prompt budget and packing safety — PER ALIAS (#352) ---
180
- # Providers report physical context and response capacity. Core's natural prompt budget is the
181
- # remaining physical input room after the response envelope and SAFETY margin.
184
+ # Providers report the effective total context envelope and generation capacity. Core's natural
185
+ # prompt gauge is the remaining input room after the generation envelope and SAFETY margin.
182
186
  #
183
- # PROMPT_BUDGET is optional virtual pressure: it makes the model-facing gauge and grinder enforce
184
- # a smaller input budget without changing provider context or generation settings. Unset uses the
185
- # natural physical prompt budget; a set value can only tighten it. Both core knobs resolve per
187
+ # PROMPT_BUDGET is optional virtual pressure: it tightens the model-facing gauge and grinder
188
+ # without changing hard context admission or generation settings. Unset uses the natural prompt
189
+ # gauge; a set value can only tighten it. Both core knobs resolve per
186
190
  # alias: _<alias> wins over bare.
187
191
  # The retired PLURNK_SERVICE_{CONTEXT_WINDOW,REASONING,COMPLETION} names FAIL HARD at boot naming
188
192
  # their successors — a stale .env never silently loses its envelope.
189
193
  # PLURNK_SERVICE_PROMPT_BUDGET=128000
194
+ # Maximum aggregate share of the stable model-facing prompt gauge used by
195
+ # automatic OPEN prompt bodies. The complete prompt remains stored and
196
+ # READ/FIND-addressable; this controls projection, not prompt admission.
197
+ # Alias-scoped overrides follow the ordinary _<alias> convention.
198
+ PLURNK_SERVICE_PROMPT_PROJECTION=25%
190
199
  PLURNK_SERVICE_SAFETY=1024
191
200
  #
192
201
  # LOCAL aliases (llama-server): the window is PROBED and the reserves DERIVE from it in the
package/INSTALL.md CHANGED
@@ -40,11 +40,14 @@ When a value is required, an unset or retired name fails boot naming the violate
40
40
 
41
41
  These are relationships *between* flags. Set them as a unit.
42
42
 
43
- - **Provider capacity and PLURNK pressure are separate.** Providers report
44
- physical context and response capacity. Core derives the natural input
45
- budget from those facts. Optional `PLURNK_SERVICE_PROMPT_BUDGET_<alias>`
43
+ - **Hard capacity and PLURNK pressure are separate.** Providers report the
44
+ effective total context envelope and generation capacity. Core derives the
45
+ natural prompt gauge from those facts. Optional `PLURNK_SERVICE_PROMPT_BUDGET_<alias>`
46
46
  only tightens the model-facing gauge and grinder; it is never sent to the
47
- provider and never changes generation settings.
47
+ provider and never changes hard admission or generation settings.
48
+ `PLURNK_SERVICE_PROMPT_PROJECTION_<alias>` assigns a stable percentage of
49
+ that gauge to automatic prompt bodies; it never limits stored prompt size
50
+ ({§prompt-projection}).
48
51
  - **Reasoning capacity is request-scoped on llama-server.**
49
52
  `PLURNK_PROVIDERS_REASONING_RESERVE_<alias>` is the adaptive cumulative
50
53
  response allowance. An explicit `PLURNK_PROVIDERS_REASONING_BUDGET_<alias>`
@@ -63,7 +66,7 @@ These are relationships *between* flags. Set them as a unit.
63
66
 
64
67
  ## Profiles (examples, not a decision tree — adapt to the real box)
65
68
 
66
- - **Local GPU (llama-server).** `PLURNK_MODEL_local="openai/<name>"`, `OPENAI_BASE_URL=http://127.0.0.1:<port>`, `PLURNK_MODEL=local`, `PLURNK_PROVIDERS_GBNF_local=plurnk.gbnf`. The provider detects llama-server, verifies its GBNF transport, and derives a request-scoped reasoning allowance from the detected window. Add `PLURNK_PROVIDERS_LLAMA_SERVER_local=1` only when the endpoint cannot be fingerprinted reliably.
69
+ - **Local GPU (llama-server).** `PLURNK_MODEL_local="openai/<name>"`, `OPENAI_BASE_URL=http://127.0.0.1:<port>`, `PLURNK_MODEL=local`, `PLURNK_PROVIDERS_GBNF_local=plurnk.qwen.gbnf` for Qwen's template-prefilled `<think>` protocol (or `plurnk.gemma.gbnf` when Gemma generates a complete Harmony channel). The provider detects llama-server, verifies its GBNF transport, and derives a request-scoped reasoning allowance from the detected window. Add `PLURNK_PROVIDERS_LLAMA_SERVER_local=1` only when the endpoint cannot be fingerprinted reliably.
67
70
  - **Cloud, bring-your-own-key.** `PLURNK_MODEL_cloud="openrouter/<model>"`, `OPENROUTER_API_KEY=…`, `PLURNK_MODEL=cloud`. No local GBNF or `LLAMA_SERVER` pin.
68
71
  - **plurnk.ai endpoint.** `PLURNK_MODEL_plurnk="plurnk/plurnk"`, `PLURNK_API_KEY=…`, `PLURNK_MODEL=plurnk`.
69
72
  - **Headless / CI / constrained container.** A CPU-only box should NOT disable semantic search — it should point derivation at a real embedder: `PLURNK_MIMETYPES_EMBED_BASE_URL` (any OpenAI-compatible `/v1/embeddings` — a host GPU turns a CPU-hours corpus grind into seconds). Weak hardware is the target workload, not a reason to shed capability; `PLURNK_SERVICE_EMBED_DISABLE=1` exists for test lanes that deterministically assert non-semantic behavior, nothing else. Consider `PLURNK_SERVICE_MAX_TURNS=<n>` as a cost cap, `PLURNK_SERVICE_GIT_ALLOWED=0` to lock out git in a sandbox.
@@ -77,14 +80,15 @@ Each mirrors a `# --- section ---` in the floor; consult the floor for exact def
77
80
  - **Model aliases** — bare `PLURNK_MODEL` selects the active provider; `PLURNK_MODEL_<alias>` defines one; `PLURNK_BASEURL_<alias>` overrides its endpoint. Optional `PLURNK_MODEL_CHILD=<alias>` selects WORK/FORK descendants; unset inherits the spawning loop's provider. The front door — keep these bare and short.
78
81
  - **Loop control / engine rails** — `PLURNK_SERVICE_MAX_TURNS` (−1 = uncapped), `_MAX_COMMANDS`, `_MAX_STRIKES`, `_EMISSION_ATTEMPTS`, `_MIN_CYCLES`, `_MAX_CYCLE_PERIOD`, `_LOOP_TIMEOUT`, `_PROPOSAL_TIMEOUT_MS`, `_EXEC_HOLD`, `_OPTIMISTIC_WAIT_MS`, `_EXEC_POLL_SEC`/`_TURNS`, `_EXEC_KILL_GRACE_MS`, `_WORKSPACE_WORKERS_MAX_ACTIVE`.
79
82
  - **Git** — `PLURNK_SERVICE_GIT_ALLOWED` (0 = hard sandbox lockout), `_GIT_AUTO`.
80
- - **Packet / reference docs** — `PLURNK_SERVICE_FILES_ITEMS` (turn-0 shallow file-map cap), `_PREVIEW_LINES`/`_PREVIEW_CHARS`, `_EDIT_RECEIPT_REVISION_CHARS`/`_CONTEXT_LINES`, `_BRANCH_RECEIPT_REVISION_CHARS`, `_DOCS_EXCLUDE`, `_PACKET_INJECT` (operator markdown section), `_POLICY`/`_PROJECT` (policy overrides), `_REQUIREMENTS` (Recap-source override), `_MD_<alias>` (materialized reference entry).
83
+ - **Packet / reference docs** — `PLURNK_SERVICE_FILES_ITEMS` (turn-0 shallow file-map cap), `_PREVIEW_LINES`/`_PREVIEW_CHARS`, `_LINE_ANCHOR_CONTEXT_LINES`, `_EDIT_RECEIPT_REVISION_CHARS`/`_CONTEXT_LINES`, `_BRANCH_RECEIPT_REVISION_CHARS`, `_DOCS_EXCLUDE`, `_PACKET_INJECT` (operator markdown section), `_POLICY`/`_PROJECT` (policy overrides), `_REQUIREMENTS` (Recap-source override), `_MD_<alias>` (materialized reference entry).
81
84
  - **Providers** — the portable provider knobs and defaults are defined by
82
85
  `@plurnk/plurnk-providers/.env.defaults`; any provider knob may take an alias
83
86
  suffix that wins over the bare fallback.
84
87
  - **Provider capacity and prompt budget** —
85
88
  `PLURNK_PROVIDERS_CONTEXT_WINDOW`/`_REASONING_RESERVE`/`_COMPLETION_RESERVE`
86
89
  describe provider capacity. `PLURNK_SERVICE_PROMPT_BUDGET` applies optional
87
- virtual pressure; `PLURNK_SERVICE_SAFETY` is the packing margin.
90
+ virtual pressure; `PLURNK_SERVICE_PROMPT_PROJECTION` assigns the automatic
91
+ prompt-body share; `PLURNK_SERVICE_SAFETY` is the packing margin.
88
92
  - **Plugins** — bare `PLURNK_PLUGINS_TRUSTED_ONLY` (0/unset = load all installed; a value = `@plurnk/*` plus an allowlist).
89
93
  - **Semantic search** — `PLURNK_SERVICE_SEMANTIC_CHUNK_TOKENS`/`_CHUNK_OVERLAP` (service-side chunking), `PLURNK_SERVICE_EMBED_DISABLE` (FTS-only), `PLURNK_MIMETYPES_EMBED_WORKERS` (the embedder's pool — mimetypes-owned).
90
94
  - **Schemes: http** — `PLURNK_SCHEMES_HTTP_FETCH_TIMEOUT`, `_TTL_MS`, optional `# TAVILY_API_KEY=`, and `PLURNK_SCHEMES_HTTP_TAVILY_DEPTH`/`_TAVILY_TIMEOUT_MS`.