@gotgenes/pi-subagents 1.0.1 → 2.0.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.0.0](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v1.0.2...pi-subagents-v2.0.0) (2026-05-17)
9
+
10
+
11
+ ### ⚠ BREAKING CHANGES
12
+
13
+ * the `schedule` parameter is removed from the Agent tool. The `subagents:scheduled` and `subagents:scheduler_ready` events are no longer emitted. The `/agents → Settings → Scheduling` toggle is removed.
14
+ * the `schedule` parameter is removed from the Agent tool and the `subagents:scheduled` / `subagents:scheduler_ready` events are no longer emitted. System cron (or launchd) invoking `pi` directly is the recommended replacement for recurring/delayed agent tasks.
15
+
16
+ ### Features
17
+
18
+ * remove scheduled subagents source and tests ([860a03f](https://github.com/gotgenes/pi-packages/commit/860a03f08a6dbd418b437a72c2fd05ea416abacb))
19
+ * remove scheduler wiring, types, and settings ([d5184e8](https://github.com/gotgenes/pi-packages/commit/d5184e88b181e60809b7fecc6a0971a18723bb9d))
20
+
21
+
22
+ ### Documentation
23
+
24
+ * correct Module-Level Changes table in plan [#52](https://github.com/gotgenes/pi-packages/issues/52) (AGENTS.md → SKILL.md) ([93337e2](https://github.com/gotgenes/pi-packages/commit/93337e2a6b0424dc64e0adaf7a5c6ae6913c5991))
25
+ * plan remove in-process scheduled subagents ([#52](https://github.com/gotgenes/pi-packages/issues/52)) ([bc548a4](https://github.com/gotgenes/pi-packages/commit/bc548a4dc6be4c5f810e9e33abcc76bc0d84f0da))
26
+ * remove scheduling from README, architecture doc, and skill ([b2f16f2](https://github.com/gotgenes/pi-packages/commit/b2f16f2a53674a6a2675024dfc038c4243edd299))
27
+ * **retro:** add retro notes for issue [#51](https://github.com/gotgenes/pi-packages/issues/51) ([0f741de](https://github.com/gotgenes/pi-packages/commit/0f741dedbe4a8e26fd1e39098fb153e4511082b9))
28
+
29
+ ## [1.0.2](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v1.0.1...pi-subagents-v1.0.2) (2026-05-17)
30
+
31
+
32
+ ### Documentation
33
+
34
+ * plan update ADR 0001 to reflect hard-fork decision ([#51](https://github.com/gotgenes/pi-packages/issues/51)) ([bd4899a](https://github.com/gotgenes/pi-packages/commit/bd4899a0d7e72c43b80c3c07c07ccc32dc0df8ed))
35
+ * update ADR 0001 to reflect hard-fork decision ([#51](https://github.com/gotgenes/pi-packages/issues/51)) ([387e0ad](https://github.com/gotgenes/pi-packages/commit/387e0ad06ec1cf015c1d3d1d9852a1be015fc283))
36
+
8
37
  ## [1.0.1](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v1.0.0...pi-subagents-v1.0.1) (2026-05-17)
9
38
 
10
39
 
package/README.md CHANGED
@@ -34,7 +34,6 @@ https://github.com/user-attachments/assets/8685261b-9338-4fea-8dfe-1c590d5df543
34
34
  - **Styled completion notifications** — background agent results render as themed, compact notification boxes (icon, stats, result preview) instead of raw XML. Expandable to show full output. Group completions render each agent individually
35
35
  - **Event bus** — lifecycle events (`subagents:created`, `started`, `completed`, `failed`, `steered`, `compacted`) emitted via `pi.events`, enabling other extensions to react to sub-agent activity
36
36
  - **Cross-extension RPC** — other pi extensions can spawn and stop subagents via the `pi.events` event bus (`subagents:rpc:ping`, `subagents:rpc:spawn`, `subagents:rpc:stop`). Standardized reply envelopes with protocol versioning. Emits `subagents:ready` on load
37
- - **Schedule subagents** — pass `schedule` to the `Agent` tool to fire on cron / interval / one-shot. Session-scoped jobs with PID-locked persistence; results land via the same `subagent-notification` followUp path as manual background completions; manage via `/agents → Scheduled jobs`
38
37
 
39
38
  ## Install
40
39
 
@@ -63,38 +62,6 @@ Agent({
63
62
 
64
63
  Foreground agents block until complete and return results inline. Background agents return an ID immediately and notify you on completion.
65
64
 
66
- ### Scheduling
67
-
68
- Add a `schedule` field to register the agent to fire later instead of running now:
69
-
70
- ```
71
- Agent({
72
- subagent_type: "Explore",
73
- prompt: "Look at recent commits and summarize what changed since last week",
74
- description: "Weekly commit review",
75
- schedule: "0 0 9 * * 1", // 9am every Monday (6-field cron)
76
- })
77
- ```
78
-
79
- Schedule formats:
80
-
81
- - **Cron** — 6-field (`second minute hour day-of-month month day-of-week`), e.g. `"0 0 9 * * 1"` for 9am every Monday, `"0 */15 * * * *"` for every 15 minutes.
82
- - **Interval** — `"5m"`, `"1h"`, `"30s"`, `"2d"`. Fires repeatedly at that interval.
83
- - **One-shot relative** — `"+10m"`, `"+2h"`, `"+1d"`. Fires once at that future time.
84
- - **One-shot absolute** — full ISO timestamp, e.g. `"2026-12-25T09:00:00.000Z"`.
85
-
86
- When a schedule fires, the spawn runs in background and its completion notification arrives in the conversation through the same `subagent-notification` followUp path as a manually-spawned background agent — your parent agent reasons about the result the same way.
87
-
88
- Schedules are **session-scoped**: they reset on `/new` and restore on `/resume`. List and cancel via `/agents → Scheduled jobs` (creation is the `Agent` tool's job — there is no parallel manual-create wizard). Storage at `<cwd>/.pi/subagent-schedules/<sessionId>.json` with PID-based file locking for cross-instance safety.
89
-
90
- **Disable the feature entirely**: `/agents → Settings → Scheduling → disabled` removes `schedule` from the `Agent` tool spec (no LLM-context cost), hides the menu entry, and stops any active scheduler. The schema-level removal takes effect on the next pi session; the runtime kill is immediate. Re-enable from the same menu.
91
-
92
- Restrictions:
93
- - `schedule` cannot be combined with `inherit_context` (no parent conversation exists at fire time) or `resume` (schedules create fresh agents).
94
- - `run_in_background` is forced to `true`.
95
- - Scheduled fires bypass the `maxConcurrent` queue so a 5-minute interval cannot be deferred behind long-running manual agents.
96
- - **Headless `pi -p` doesn't wait for scheduled subagents.**
97
-
98
65
  ## UI
99
66
 
100
67
  The extension renders a persistent widget above the editor showing all active agents:
@@ -351,8 +318,6 @@ Agent lifecycle events are emitted via `pi.events.emit()` so other extensions ca
351
318
  | `subagents:failed` | Agent errored, stopped, or aborted | same as completed + `error`, `status` |
352
319
  | `subagents:steered` | Steering message sent | `id`, `message` |
353
320
  | `subagents:compacted` | Agent's session successfully compacted | `id`, `type`, `description`, `reason` (`"manual"` / `"threshold"` / `"overflow"`), `tokensBefore`, `compactionCount` |
354
- | `subagents:scheduled` | Schedule lifecycle change | `{ type: "added" \| "removed" \| "updated" \| "fired" \| "error", … }` (job/agentId/error fields per type) |
355
- | `subagents:scheduler_ready` | Scheduler bound to session, enabled jobs armed | `sessionId`, `jobCount` |
356
321
  | `subagents:ready` | Extension loaded and RPC handlers registered | — |
357
322
  | `subagents:settings_loaded` | Persisted settings applied at extension init | `settings` (merged global + project) |
358
323
  | `subagents:settings_changed` | `/agents` → Settings mutation was applied | `settings`, `persisted` (`boolean` — `false` on write failure) |
@@ -48,14 +48,11 @@ invocation-config.ts — merge tool params with agent config
48
48
  output-file.ts — JSONL transcript streaming
49
49
  settings.ts — persistent operational settings
50
50
 
51
- schedule.ts — cron/interval/one-shot job dispatch ← removing
52
- schedule-store.ts — file-backed schedule persistence ← removing
53
51
  cross-extension-rpc.ts — RPC over pi.events ← replacing
54
52
  group-join.ts — batch completion notifications
55
53
 
56
54
  ui/agent-widget.ts — above-editor live status widget
57
55
  ui/conversation-viewer.ts — scrollable session overlay
58
- ui/schedule-menu.ts — /agents schedule submenu ← removing
59
56
  ```
60
57
 
61
58
  ### Coupling today
@@ -63,8 +60,7 @@ ui/schedule-menu.ts — /agents schedule submenu ← removing
63
60
  The widget reads agent state by holding a direct reference to
64
61
  `AgentManager` and polling a shared mutable `Map<string, AgentActivity>`
65
62
  every 80 ms. The conversation viewer subscribes directly to `AgentSession`
66
- objects. The scheduler holds a direct `AgentManager` reference and calls
67
- `manager.spawn()`.
63
+ objects.
68
64
 
69
65
  Cross-extension consumers use an ad-hoc RPC layer over `pi.events`
70
66
  (`subagents:rpc:spawn`, `subagents:rpc:stop`, `subagents:rpc:ping`) with
@@ -342,10 +338,10 @@ Add the `SubagentsAPI` interface, serializable types, and `Symbol.for()`
342
338
  accessor functions as public exports of this package. No behavioral
343
339
  changes to the core yet.
344
340
 
345
- ### Phase 2: Remove scheduling
341
+ ### Phase 2: Remove scheduling ✓ (done — issue #52)
346
342
 
347
- Delete `schedule.ts`, `schedule-store.ts`, `ui/schedule-menu.ts`. Remove
348
- the `schedule` parameter from the `Agent` tool schema. Remove scheduler
343
+ Deleted `schedule.ts`, `schedule-store.ts`, `ui/schedule-menu.ts`. Removed
344
+ the `schedule` parameter from the `Agent` tool schema. Removed scheduler
349
345
  setup and lifecycle hooks from `index.ts`.
350
346
 
351
347
  ### Phase 3: Remove group-join, output-file, ad-hoc RPC
@@ -1,5 +1,5 @@
1
1
  ---
2
- status: accepted
2
+ status: superseded
3
3
  date: 2026-05-11
4
4
  ---
5
5
 
@@ -7,7 +7,8 @@ date: 2026-05-11
7
7
 
8
8
  ## Status
9
9
 
10
- Accepted
10
+ Superseded by [`docs/architecture/architecture.md`](../architecture/architecture.md), which commits to a hard fork with material scope reduction (scheduling removal, `SubagentsAPI` boundary, `index.ts` decomposition).
11
+ The original rationale below remains useful context.
11
12
 
12
13
  ## Context
13
14
 
@@ -51,7 +52,8 @@ All three divergences now have upstream PRs, opened after production validation
51
52
  2. **Post-bind re-filter** — [tintinweb/pi-subagents#72](https://github.com/tintinweb/pi-subagents/pull/72) (`fix(agent-runner): re-filter active tools after bindExtensions so extension tools land in child`)
52
53
  3. **Active-agent tag** — [tintinweb/pi-subagents#73](https://github.com/tintinweb/pi-subagents/pull/73) (`feat(prompts): inject <active_agent name="..."/> tag for permission resolution`)
53
54
 
54
- Once these land upstream, the fork's divergence reduces to package naming and tooling.
55
+ If these land upstream, upstream gains the peer-dep fix and the two RepOne patches.
56
+ However, the fork now diverges intentionally beyond those patches — see [`docs/architecture/architecture.md`](../architecture/architecture.md) for the full scope of planned changes.
55
57
 
56
58
  ## Consequences
57
59
 
@@ -67,5 +69,6 @@ Once these land upstream, the fork's divergence reduces to package naming and to
67
69
 
68
70
  ### Operational
69
71
 
70
- - Upstream PRs are open and linked above. Once merged, the fork's behavioral divergence is eliminated.
72
+ - Upstream PRs are open and linked above. If merged, upstream gains the three patches, but the fork continues independently with broader architectural changes per [`docs/architecture/architecture.md`](../architecture/architecture.md).
73
+ - The architecture document governs the fork's direction going forward; this ADR's original "thin-patch" framing no longer describes the fork's trajectory.
71
74
  - When Patch 1 is eventually added, it should be a separate ADR in `docs/decisions/` with its own follow-up.
@@ -0,0 +1,74 @@
1
+ ---
2
+ issue: 51
3
+ issue_title: "docs: update ADR 0001 to reflect hard-fork decision"
4
+ ---
5
+
6
+ # Update ADR 0001 to reflect hard-fork decision
7
+
8
+ ## Problem Statement
9
+
10
+ ADR 0001 (`docs/decisions/0001-deferred-patches.md`) was written when the fork was a thin-patch layer over `tintinweb/pi-subagents`.
11
+ The new architecture document (`docs/architecture/architecture.md`) commits to a hard fork with material scope reduction — scheduling removal, a `SubagentsAPI` boundary, `index.ts` decomposition, and more.
12
+
13
+ Several claims in ADR 0001 are now outdated:
14
+
15
+ 1. The status is "accepted" but the decision has been superseded by the architecture doc.
16
+ 2. The Upstream PRs section states "the fork's divergence reduces to package naming and tooling," which is no longer true.
17
+ 3. The Consequences → Operational section implies that merging the upstream PRs eliminates behavioral divergence, which no longer holds.
18
+
19
+ ## Goals
20
+
21
+ - Add a supersession note to ADR 0001 pointing to `docs/architecture/architecture.md`.
22
+ - Update the "Upstream PRs are open" subsection so the "divergence reduces to…" claim reflects reality.
23
+ - Update the Consequences → Operational section to note intentional divergence per the architecture document.
24
+ - Preserve all existing rationale — no information is removed.
25
+
26
+ ## Non-Goals
27
+
28
+ - Rewriting the ADR from scratch — the original context is still useful.
29
+ - Updating the architecture document itself.
30
+ - Any code changes.
31
+
32
+ ## Background
33
+
34
+ ADR 0001 has YAML frontmatter (`status: accepted`, `date: 2026-05-11`) and follows a standard ADR structure: Status, Context, Decision, Consequences.
35
+
36
+ The architecture document (`docs/architecture/architecture.md`) describes a six-phase plan that materially diverges from upstream: scheduling removal, ad-hoc RPC replacement, group-join and output-file removal, a typed `SubagentsAPI` boundary, and `index.ts` decomposition.
37
+
38
+ The three upstream PRs (#71, #72, #73) are still open and factually accurate — that section just needs the concluding sentence revised.
39
+
40
+ ## Design Overview
41
+
42
+ The update touches three areas of the ADR:
43
+
44
+ 1. **Frontmatter + Status section** — change `status: accepted` to `status: superseded` in frontmatter, and update the Status section body to read "Superseded" with a pointer to `docs/architecture/architecture.md`.
45
+ 2. **"Upstream PRs are open" subsection** — keep the PR list and factual statements intact; revise the final sentence ("Once these land upstream, the fork's divergence reduces to package naming and tooling.") to note that the fork now diverges intentionally beyond those patches, per the architecture document.
46
+ 3. **Consequences → Operational** — add a sentence noting that the fork diverges intentionally beyond patches, and that the architecture document governs the fork's direction going forward. Keep the existing bullet about upstream PRs.
47
+
48
+ No structural changes (new sections, removed sections, reordered content).
49
+
50
+ ## Module-Level Changes
51
+
52
+ | File | Change |
53
+ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
54
+ | `docs/decisions/0001-deferred-patches.md` | Update frontmatter `status` from `accepted` to `superseded`; revise Status section; revise closing sentence in "Upstream PRs are open"; add divergence note to Consequences → Operational |
55
+
56
+ ## Test Impact Analysis
57
+
58
+ No tests are affected — this is a docs-only change.
59
+
60
+ ## TDD Order
61
+
62
+ 1. Update ADR 0001 with all four edits described above.
63
+ Commit: `docs: update ADR 0001 to reflect hard-fork decision (#51)`
64
+
65
+ ## Risks and Mitigations
66
+
67
+ | Risk | Mitigation |
68
+ | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
69
+ | Supersession note makes the ADR look stale | Keep all original rationale intact; the note clarifies evolution, not obsolescence |
70
+ | Wording drift between ADR and architecture doc | Use a direct pointer (`docs/architecture/architecture.md`) rather than paraphrasing the architecture doc's decisions |
71
+
72
+ ## Open Questions
73
+
74
+ None — the issue's acceptance criteria are unambiguous.
@@ -0,0 +1,131 @@
1
+ ---
2
+ issue: 52
3
+ issue_title: "feat: remove in-process scheduled subagents"
4
+ ---
5
+
6
+ # Remove in-process scheduled subagents
7
+
8
+ ## Problem Statement
9
+
10
+ The scheduling subsystem reimplements OS-level cron inside a process that is not designed to be a long-lived daemon.
11
+ System cron (or launchd) invoking `pi` directly is strictly superior: it survives crashes and reboots, is inspectable via `crontab -l`, and adds zero lines of code to this extension.
12
+ The current implementation weighs ~610 source lines plus ~820 test lines, a `croner` dependency, PID-locked file persistence, and scheduler lifecycle wiring scattered across `index.ts`.
13
+
14
+ ## Goals
15
+
16
+ - Delete the three scheduling source files (`schedule.ts`, `schedule-store.ts`, `ui/schedule-menu.ts`).
17
+ - Delete the three scheduling test files (`schedule.test.ts`, `schedule-store.test.ts`, `schedule-e2e.test.ts`).
18
+ - Remove all scheduler wiring from `index.ts` (~200 lines of imports, lifecycle hooks, tool-schema gates, and menu routing).
19
+ - Remove `ScheduledSubagent` and `ScheduleStoreData` interfaces from `types.ts`.
20
+ - Remove `schedulingEnabled` from `SubagentsSettings`, `SettingsAppliers`, and related sanitize/apply logic in `settings.ts`.
21
+ - Remove the `croner` dependency from `package.json`.
22
+ - Update `README.md` (remove "Scheduling" section and events-table rows) and package `AGENTS.md` (remove scheduling modules from architecture diagram and tables).
23
+ - This is a **breaking change** (`feat!:`) — the `schedule` parameter is removed from the `Agent` tool, and the `subagents:scheduled` / `subagents:scheduler_ready` events are no longer emitted.
24
+
25
+ ## Non-Goals
26
+
27
+ - Removing `bypassQueue` from `SpawnOptions` in `agent-manager.ts` — it remains useful for cross-extension RPC callers.
28
+ - Removing other subsystems slated for removal in the architecture doc (output-file, cross-extension-rpc, group-join) — those are separate issues.
29
+ - Providing a migration path or compatibility shim — no known consumers depend on the scheduling events.
30
+
31
+ ## Background
32
+
33
+ The architecture doc (`docs/architecture/architecture.md`) already marks `schedule.ts`, `schedule-store.ts`, and `ui/schedule-menu.ts` as `← removing`.
34
+ This issue executes that plan.
35
+
36
+ The scheduling code touches `index.ts` in several distinct regions:
37
+
38
+ 1. Imports (lines 27–28, 46)
39
+ 2. Scheduler instance creation and `startScheduler()` helper (lines 445–462)
40
+ 3. Lifecycle hooks: `session_start`, `session_before_switch`, `session_shutdown` (lines 470–496)
41
+ 4. The `schedule` tool-schema param shape, conditional inclusion, and guideline string (lines 621–640, 666, 719)
42
+ 5. Schedule execution path in the Agent tool handler (lines 880–918)
43
+ 6. `/agents` menu: "Scheduled jobs" entry and routing (lines 1297–1327)
44
+ 7. `/agents → Settings → Scheduling` toggle (lines 1855–1867)
45
+
46
+ The `settings.ts` module has `schedulingEnabled` woven into `SubagentsSettings`, `SettingsAppliers`, `sanitize()`, and `applySettings()`.
47
+
48
+ `types.ts` carries `ScheduledSubagent` (30 lines) and `ScheduleStoreData` (5 lines) — both are only consumed by the scheduling subsystem.
49
+
50
+ ## Design Overview
51
+
52
+ This is a pure deletion change with no new abstractions.
53
+ The approach is inside-out: delete leaf modules first (no dependents), then remove references from the wiring layer (`index.ts`, `settings.ts`, `types.ts`), then clean up docs.
54
+
55
+ The `bypassQueue` option on `SpawnOptions` stays — its JSDoc comment mentioning "scheduler" should be updated to a generic description since the scheduler is the only current user but the option is architecturally useful for any caller that needs to skip the concurrency queue.
56
+
57
+ ## Module-Level Changes
58
+
59
+ ### Delete
60
+
61
+ | File | Lines |
62
+ | ----------------------------- | ----- |
63
+ | `src/schedule.ts` | 365 |
64
+ | `src/schedule-store.ts` | 143 |
65
+ | `src/ui/schedule-menu.ts` | 104 |
66
+ | `test/schedule.test.ts` | 429 |
67
+ | `test/schedule-store.test.ts` | 154 |
68
+ | `test/schedule-e2e.test.ts` | 237 |
69
+
70
+ ### Modify
71
+
72
+ | File | Change |
73
+ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
74
+ | `src/index.ts` | Remove scheduler imports, instance creation, `startScheduler()`, lifecycle hooks, `scheduleParamShape`/`scheduleParam`/`scheduleGuideline`, schedule execution path in Agent handler, "Scheduled jobs" menu entry + routing, "Scheduling" settings toggle. |
75
+ | `src/types.ts` | Remove `ScheduledSubagent` interface and `ScheduleStoreData` interface. |
76
+ | `src/settings.ts` | Remove `schedulingEnabled` from `SubagentsSettings` and `SettingsAppliers`. Remove sanitize clause and `applySettings` clause for `schedulingEnabled`. |
77
+ | `src/agent-manager.ts` | Update `bypassQueue` JSDoc to remove scheduler-specific language. |
78
+ | `package.json` | Remove `"croner": "^10.0.1"` from dependencies. |
79
+ | `README.md` | Remove "Scheduling" feature bullet, "Scheduling" subsection (lines 66–96), and `subagents:scheduled` / `subagents:scheduler_ready` rows from the events table. |
80
+ | `.pi/skills/package-pi-subagents/SKILL.md` | Remove `schedule.ts`, `schedule-store.ts`, `ui/schedule-menu.ts` from the architecture diagram and module tables. Update `index.ts` description to drop scheduler mention. (`packages/pi-subagents/AGENTS.md` is a stub — the architecture content lives in the skill file.) |
81
+
82
+ ## Test Impact Analysis
83
+
84
+ 1. No new unit tests are needed — this is pure deletion.
85
+ 2. All three scheduling test files (`schedule.test.ts`, `schedule-store.test.ts`, `schedule-e2e.test.ts`) become entirely redundant and are deleted.
86
+ 3. Existing tests for `agent-manager`, `agent-runner`, `settings`, and other modules stay as-is. The `settings.test.ts` file (if it exists) may need minor updates to remove `schedulingEnabled` from fixture data.
87
+
88
+ ## TDD Order
89
+
90
+ Since this is a removal (not a feature), the order is deletion-first with a single validation pass.
91
+
92
+ 1. **Delete scheduling source files.**
93
+ Delete `src/schedule.ts`, `src/schedule-store.ts`, `src/ui/schedule-menu.ts`.
94
+ Delete `test/schedule.test.ts`, `test/schedule-store.test.ts`, `test/schedule-e2e.test.ts`.
95
+ Commit: `feat!: remove scheduled subagents source and tests`
96
+
97
+ 2. **Remove scheduler wiring from `index.ts`.**
98
+ Remove imports, scheduler instance, `startScheduler()`, lifecycle hooks, schedule-related tool schema params and guideline, schedule execution path in Agent handler, "Scheduled jobs" menu entry/routing, and "Scheduling" settings toggle.
99
+ Commit: `feat!: remove scheduler wiring from index.ts`
100
+
101
+ 3. **Clean up types and settings.**
102
+ Remove `ScheduledSubagent` and `ScheduleStoreData` from `types.ts`.
103
+ Remove `schedulingEnabled` from `SubagentsSettings`, `SettingsAppliers`, `sanitize()`, and `applySettings()` in `settings.ts`.
104
+ Update `bypassQueue` JSDoc in `agent-manager.ts`.
105
+ Commit: `feat!: remove scheduling types and settings`
106
+
107
+ 4. **Remove `croner` dependency.**
108
+ Remove from `package.json`, run `pnpm install` to update lockfile.
109
+ Commit: `build: remove croner dependency`
110
+
111
+ 5. **Verify all tests pass.**
112
+ Run `pnpm vitest run` in the package. Fix any test fixtures that reference `schedulingEnabled` or scheduling types.
113
+ Commit (if fixes needed): `test: remove scheduling references from test fixtures`
114
+
115
+ 6. **Update documentation.**
116
+ Update `README.md`: remove scheduling feature bullet, "Scheduling" subsection, and event-table rows.
117
+ Update package `AGENTS.md`: remove scheduling modules from architecture diagram and module tables, update `index.ts` description.
118
+ Commit: `docs: remove scheduling from README and AGENTS`
119
+
120
+ ## Risks and Mitigations
121
+
122
+ | Risk | Mitigation |
123
+ | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
124
+ | Missed scheduling reference causes compile error | `grep -rn 'schedule\|Schedule\|croner' src/` after each step to catch stragglers. TypeScript `noEmit` check catches import errors. |
125
+ | Test fixtures reference `schedulingEnabled` | Step 5 explicitly scans for and fixes these. |
126
+ | `bypassQueue` removal mistakenly included | Explicitly excluded in Non-Goals; plan preserves the option and only updates its JSDoc. |
127
+ | Breaking change not communicated | `feat!:` commit prefix triggers a major version bump via release-please. |
128
+
129
+ ## Open Questions
130
+
131
+ None — the issue scope is fully specified and the architecture doc already ratified this removal.
@@ -0,0 +1,33 @@
1
+ ---
2
+ issue: 51
3
+ issue_title: "docs: update ADR 0001 to reflect hard-fork decision"
4
+ ---
5
+
6
+ # Retro: #51 — docs: update ADR 0001 to reflect hard-fork decision
7
+
8
+ ## Final Retrospective (2026-05-16)
9
+
10
+ ### Session summary
11
+
12
+ Updated ADR 0001 (`docs/decisions/0001-deferred-patches.md`) to reflect the hard-fork decision documented in `docs/architecture/architecture.md`.
13
+ The change was planned, implemented, shipped, and released as `pi-subagents-v1.0.2` in a single clean pass with no rework.
14
+
15
+ ### Observations
16
+
17
+ #### What went well
18
+
19
+ - The entire plan→build→ship pipeline completed with zero corrections, zero CI failures, and zero user interventions.
20
+ - Parallel context gathering (issue body, `AGENTS.md`, ADR file, architecture doc, two skill files) in one tool call made the planning phase efficient.
21
+ - The 4-edit approach (`Edit` with a single call containing four `edits[]` entries) was well-matched to the task — each edit was small, unique, and non-overlapping.
22
+
23
+ #### What caused friction (agent side)
24
+
25
+ - No friction observed. The task was unambiguous and the tooling well-suited.
26
+
27
+ #### What caused friction (user side)
28
+
29
+ - No friction observed. The session required no user input beyond invoking the three slash commands.
30
+
31
+ ### Follow-ups identified
32
+
33
+ - The `package-pi-subagents` skill (`.pi/skills/package-pi-subagents/SKILL.md`) still frames the fork as "a friendly fork… carrying a small number of patches" with priorities like "stays as close to upstream as possible." This framing is now stale given the hard-fork commitment. A separate issue should update the skill to reflect the architecture document's posture.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotgenes/pi-subagents",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "description": "A pi extension that brings Claude Code-style autonomous sub-agents to pi. Friendly fork of @tintinweb/pi-subagents.",
5
5
  "author": {
6
6
  "name": "Chris Lasher"
@@ -33,7 +33,6 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@sinclair/typebox": "^0.34.49",
36
- "croner": "^10.0.1",
37
36
  "nanoid": "^5.0.0"
38
37
  },
39
38
  "engines": {
@@ -40,8 +40,8 @@ interface SpawnOptions {
40
40
  isBackground?: boolean;
41
41
  /**
42
42
  * Skip the maxConcurrent queue check for this spawn — start immediately even
43
- * if the configured concurrency limit would otherwise queue it. Used by the
44
- * scheduler so a fired job can't be deferred past its trigger window.
43
+ * if the configured concurrency limit would otherwise queue it. Useful for
44
+ * callers (e.g. cross-extension RPC) that must not be deferred by the queue.
45
45
  */
46
46
  bypassQueue?: boolean;
47
47
  /** Isolation mode — "worktree" creates a temp git worktree for the agent. */