@jwilger/pi-development-system 0.12.0 → 0.13.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.
@@ -32,7 +32,7 @@ You are an implementer. You receive exactly one task record and nothing else: do
32
32
  - Touch only the files the task lists. If the task needs another file, a new dependency, or a design choice, call agent_pause naming what you need. Do not invent policy to make something pass.
33
33
  - Never weaken, skip or delete a test to get green, and never add a lint suppression without a stated reason.
34
34
  - Do not commit, push or run git history commands; the coordinator delivers.
35
- - Follow the repo's skills and `principles/NON-NEGOTIABLES.md`; they are loaded in your context.
35
+ - You start with no skills or repository rules loaded and no devsys guards running in your session: the rules in this list are the whole contract. If the task conflicts with one, stop and ask.
36
36
 
37
37
  ## Finish
38
38
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jwilger/pi-development-system",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "A pi extension package representing a seasoned approach to software development using a full AI SDLC.",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -28,7 +28,7 @@ implementer and reviewer work. It returns a slot, a thinking level and, when one
28
28
  resolves on this machine, a model. Pass them through:
29
29
 
30
30
  ```text
31
- agent_spawn({path: "/root/add-flag", type: "implementer", task: "...",
31
+ agent_spawn({path: "/impl-add-flag", type: "implementer", task: "...",
32
32
  model: "<from route>", thinkingLevel: "<from route>"})
33
33
  ```
34
34
 
@@ -48,8 +48,10 @@ you deliver after review.
48
48
 
49
49
  ## The reviewer is always fresh
50
50
 
51
- A reviewer that watched the work being written shares its blind spots. Spawn it
52
- with `/root/<name>` paths that do not inherit your reasoning, give it the diff
51
+ A reviewer that watched the work being written shares its blind spots. A path
52
+ under `/root/...` inherits your whole conversation, so spawn reviewers and
53
+ implementers at a top-level independent path (one segment, for example
54
+ `/review-1` or `/impl-add-flag`): independent roots start with no history. Give it the diff
53
55
  range and the packet format (`agents/reviewer.md`), and never tell it what you
54
56
  concluded. Fix every blocking and should-fix finding, then ask for a new round.
55
57
 
@@ -730,6 +730,8 @@ export class ThreadManager {
730
730
  ...record.view,
731
731
  sessionFile: record.driver ? record.driver.sessionFile : record.view.sessionFile,
732
732
  });
733
+ // devsys: show per-spawn pins so agent_status reports what the thread was told to run on.
734
+ if (record.definition?.spawnOverrides) view.pinned = { ...record.definition.spawnOverrides };
733
735
  if (record.liveInputTokens) view.inputTokens = (view.inputTokens ?? 0) + record.liveInputTokens;
734
736
  if (record.liveOutputTokens)
735
737
  view.outputTokens = (view.outputTokens ?? 0) + record.liveOutputTokens;
@@ -200,7 +200,9 @@ export function createDriverFactory(
200
200
  ? resolved.get(`${ctx.sessionManager.getSessionId()}:${parentPath}`)
201
201
  : undefined;
202
202
  const mode = getModelSelection();
203
- const preferences = mode === "use-current" ? undefined : getModelPreferences(type);
203
+ // devsys: an explicit per-spawn model pin bypasses preference/scope policy (also on resume).
204
+ const pinned = type.spawnOverrides?.model !== undefined;
205
+ const preferences = mode === "use-current" || pinned ? undefined : getModelPreferences(type);
204
206
  let provider = parent?.provider ?? ctx.model?.provider;
205
207
  let id = parent?.id ?? ctx.model?.id;
206
208
  if (mode === "use-current") {
@@ -68,6 +68,8 @@ export interface ThreadView {
68
68
  inputTokens?: number;
69
69
  /** Cumulative output tokens. Live views include the in-progress message. */
70
70
  outputTokens?: number;
71
+ /** devsys: per-spawn model/thinkingLevel pin requested through agent_spawn, when any. */
72
+ pinned?: SpawnOverrides;
71
73
  }
72
74
  export type DriverEvent =
73
75
  | { kind: "activity" | "error"; text: string }