@skyf0xx/hedgehog-core-deepseek-harness 0.2.21 → 0.2.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyf0xx/hedgehog-core-deepseek-harness",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "description": "Hedgehog's deepseek-harness core: a pinned DSH/Cordis plugin workspace, a tool-plugin generator, and the skills that drive building DeepSeek Harness plugins with Hedgehog's build discipline.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -13,7 +13,7 @@ wrapper (`package.json`'s `dsh.bundle`, `cordis.patch.yml`) that every
13
13
  shape shares regardless of which one it implements — that's the
14
14
  tool-plugin generator's concern, not this skill's.
15
15
 
16
- **Verified against DSH tag `dsh-v0.1.6-alpha.1`.** Shapes 1-4 and the
16
+ **Verified against DSH tag `dsh-v0.1.7-alpha.1`.** Shapes 1-4 and the
17
17
  "Every plugin body" structural forms were checked against
18
18
  `docs/user/develop/framework/events.md` and `service.md`. The Agent/Inbox
19
19
  section and Shapes 5-9 were checked against `docs/subsystems/core.md`,
@@ -22,7 +22,7 @@ section and Shapes 5-9 were checked against `docs/subsystems/core.md`,
22
22
  `docs/subsystems/webhook.md`, `docs/subsystems/session-query.md`. Shape 10
23
23
  was checked against `docs/subsystems/slots.md` and
24
24
  `docs/subsystems/sidebar-right.md`. All of the above plus the
25
- `dsh-v0.1.6-alpha.1` release notes were read at that tag, the same tag
25
+ `dsh-v0.1.7-alpha.1` release notes were read at that tag, the same tag
26
26
  `workspace/package.json` pins `@deepseek-ai/dsh` and `@deepseek-ai/dsh-tools`
27
27
  to. This is the one owning statement of which DSH revision this skill's
28
28
  catalog was checked against — every confirmed-event, confirmed-signature,
@@ -32,17 +32,6 @@ against the new tag's own docs before the pin line above is updated to
32
32
  match; don't bump the pin in `workspace/package.json` without also
33
33
  re-verifying this file.
34
34
 
35
- Re-check at `dsh-v0.1.6-alpha.1` found every catalogued Shape 1-10 signature,
36
- event name, and slot key unchanged from `dsh-v0.1.5-rc.2`. The only catalog
37
- update from this pass is Shape 9's `ctx.sessionQuery` method list, which
38
- gained several new confirmed methods (see below). This release's other
39
- plugin-adjacent-sounding items — the `agent/session-start` → `agent/created`
40
- lifecycle rename, and Team mode's `spawn_teammate`/disabled
41
- `subagent`/`subagent_fork` — do not appear anywhere in the doc set this
42
- skill draws from (they're internal wiring and experimental Team-mode
43
- surface, not a `ctx.*` call a plugin author makes) and are out of scope for
44
- this catalog, per "Out of scope, and why" above.
45
-
46
35
  ## Out of scope, and why
47
36
 
48
37
  Not every subsystem DSH documents is plugin-authoring surface. Checked and
@@ -72,6 +61,31 @@ excluded at this tag:
72
61
  catalog/app feature (durable records, active views, read-only Web
73
62
  catalog) with no plugin-facing registration point found. If a future
74
63
  tag adds one, re-check this file before assuming it's still out.
64
+ - **The Plugin Manager page and runtime dependency resolution/unloading**
65
+ (installing, configuring, and live enabling/disabling plugins from the
66
+ Web app; Creator mode installing persistent plugins through Plugin
67
+ Manager rather than its own dynamic definition/execution tools) — this
68
+ is the Web app's end-user plugin install/enable/disable surface and
69
+ Creator mode's own scratch-authoring workflow, the same bundle/profile-
70
+ composition category as the `sdk-minimal` item above, not a `ctx.*`
71
+ service or plugin-authoring DSL change. No doc in this skill's citation
72
+ list (`events.md`, `service.md`, the Shape 5-9 subsystem docs,
73
+ `slots.md`, `sidebar-right.md`) documents a Cordis surface for it. A
74
+ plugin's own `apply(ctx)` body, `cordis.patch.yml` entry, and Shape
75
+ 1-10 DSL are unaffected by how the Web app or Creator mode installs it
76
+ at runtime.
77
+ - **`ctx.agentPresets` (`AgentPresetRegistry`, `core.md`)** — Agent
78
+ presets are declared and installed through plugin bundles (a
79
+ plugin-facing `register(definition: PresetDefinition)` call, "the
80
+ declaring plugin owns it"), which is squarely plugin-authoring surface
81
+ and not yet catalogued here. `core.md` gives the method signatures but
82
+ never states `PresetDefinition`'s field shape or a worked registration
83
+ example, and no dedicated `docs/subsystems/agent-preset*.md` exists to
84
+ fill that gap — there isn't enough here yet to catalog a confirmed
85
+ Shape 11 responsibly. Treat a task that needs to register or resolve
86
+ an Agent preset from a plugin as needing `packages/preset/agent-preset-registry/src/types.ts`
87
+ read directly, not this skill; add a Shape 11 once a source read or a
88
+ future doc pass gives `PresetDefinition`'s fields and a real example.
75
89
 
76
90
  ## v0.1 generator coverage: tool shape only
77
91
 
@@ -560,8 +574,7 @@ export function apply(ctx: Context) {
560
574
  ctx.tools.register(defineTool({
561
575
  name: 'start-long-task',
562
576
  async execute(args) {
563
- const agent = ctx.agents.currentInitiator()
564
- const id = ctx.jobs.start(/* spec: identity, owner, synchronous starter */)
577
+ const id = ctx.jobs.start(/* spec: identity, owner session id, output sources, synchronous starter */)
565
578
  return id
566
579
  },
567
580
  }))
@@ -569,21 +582,39 @@ export function apply(ctx: Context) {
569
582
  ```
570
583
 
571
584
  Confirmed methods on `ctx.jobs`: `start(spec)`, `list(caller?)`,
572
- `get(id, caller?)`, `read(id, caller?)`, `kill(id, caller?, reason?)`,
573
- `wait(id, timeoutMs, caller?, signal?)`, `onJobDone(listener)`,
574
- `onJobsChanged(listener)`, `attachController(name)` — each optional
575
- `caller` an explicit `Agent` (the same explicit-passing pattern as
576
- everywhere else in this catalog; a non-agent caller sees only unowned
577
- jobs). Ownership is fenced by the caller's session id: "Ids are
578
- predictable, so authorization — not secrecy — is the boundary," per the
579
- doc. A job controller (something that can read/stop jobs for a scope of
580
- owners) calls `attachController(name)` — `start` refuses work for an
581
- owner no attached controller serves.
582
-
583
- **Honesty note:** `JobStart`, `JobSnapshot`, and `JobRead`'s exact fields
584
- are declared in `packages/jobs/jobs/src/types.ts` per the doc's source
585
- link, not fully restated in this skill. Confirm field names against the
586
- doc or source before constructing a `JobStart` spec.
585
+ `get(id, caller?)`, `read(id, caller?)` (consumes the ring from the
586
+ model's own cursor), `readAt(id, from, caller?)` (non-consuming, resumes
587
+ from a prior read's offset), `kill(id, caller?, reason?)`,
588
+ `wait(id, timeoutMs, caller?, signal?)`, `remove(id, caller?)`,
589
+ `attachController(name)` — each optional `caller` a `SessionId`, not an
590
+ `Agent` (ownership is fenced by session id, not by an explicit-agent
591
+ pass). Rather than callback-style `onJobDone`/`onJobsChanged` listeners,
592
+ consumers subscribe to one filtered `events` stream carrying lifecycle
593
+ events (`registered`, `progress`, `stopping`, `removed`, `settled`) and
594
+ `output` events (id + new ring total only, so an observer schedules its
595
+ own `readAt`). "Ids are predictable, so authorization — not secrecy — is
596
+ the boundary," per the doc. A job controller (something that can
597
+ read/stop jobs for a scope of owners) calls `attachController(name)` —
598
+ `start` refuses work for an owner no attached controller serves.
599
+
600
+ The starter (`spec.run`) receives a `JobHandle` — `{ id, append(text,
601
+ options?), updateProgress(line) }` — instead of returning a
602
+ `readOutput()` closure: a streaming producer calls `handle.append()` as
603
+ output arrives, and `updateProgress()` replaces the live progress line.
604
+ A job whose result is a single value rather than a stream (a subagent's
605
+ report, a workflow's rendered result) returns it as `JobOutcome.result`,
606
+ delivered once on the model's next `read()`. `spec.output` can instead
607
+ list pull sources (`JobOutputSource`, the subprocess `readFrom` family)
608
+ that the registry pumps into the ring on its own cadence — a producer
609
+ using pull sources folds nothing into `done`.
610
+
611
+ **Honesty note:** `JobSpec`'s exact fields (including `owner?: SessionId`
612
+ and `output?: readonly JobOutputSource[]`), `JobView`, `JobRead`,
613
+ `JobOutputRead`, `JobOutcome`, and `JobEvent`'s full variant shapes are
614
+ declared in `packages/jobs/jobs/src/types.ts` and the client-safe
615
+ `packages/jobs/jobs/src/view.ts`, not fully restated in this skill.
616
+ Confirm field names against the doc or source before constructing a
617
+ `JobSpec` or handling a `JobEvent`.
587
618
 
588
619
  ## Shape 8: Workflow-scripting plugin (`ctx.workflowEngine`)
589
620
 
@@ -716,10 +747,11 @@ ordered by `order` then registration order), `keyed` (the owner dispatches
716
747
  an `entryKey`; the matching cell renders), `chain` (each entry supplies
717
748
  `select(owner)`; the first non-null result in priority order renders).
718
749
  **Scope** (also fixed per slot): `root` (one instance), `session-maybe`
719
- (renderable without a Session; Session values optional), `session`
720
- (requires a resolved Session binding). `priority` is a shadowing rank for
721
- `single`/`list`/`keyed` and an election order for `chain` — lower values
722
- run or render first.
750
+ (inherits the surrounding Provider binding but stays renderable without
751
+ one; Session values optional), `session` (requires a resolved surrounding
752
+ Provider binding, receiving definite Session values). `priority` is a
753
+ shadowing rank for `single`/`list`/`keyed` and an election order for
754
+ `chain` — lower values run or render first.
723
755
 
724
756
  A registered component receives: owner values and standard scope values
725
757
  (`PropsRuntime<K>`), authorized child renderers for any slot it declares
@@ -731,9 +763,10 @@ from a declared `locale` namespace, and — for a `chain` slot — the elected
731
763
  model objects stay in the `apply` closure and are projected into
732
764
  callbacks or observable sources passed through `inject`. Framework-wide
733
765
  standard props available by scope include `useSessions`,
734
- `useWorkspaces`, `usePanelInfo` (every scope), and — for `session`/
735
- `session-maybe` — `sessionId`, `useSession`, `useProjection`,
736
- `useConversation`, `useInput`, `inputActions`.
766
+ `useSessionStatus`, `useSessionRetainInfo`, `useWorkspaces`, `usePanelInfo`
767
+ (every scope), and — for `session`/`session-maybe` — `sessionId`,
768
+ `useSession`, `useProjection`, `useConversation`, `useInput`,
769
+ `inputActions`.
737
770
 
738
771
  **The shipped hierarchy** (per `slots.md`'s "Current hierarchy") is the
739
772
  authoritative list of registrable slot keys — a plugin registers only
@@ -10,9 +10,9 @@
10
10
  "generate:tool": "node tools/generators/cli.mjs tool"
11
11
  },
12
12
  "dependencies": {
13
- "@deepseek-ai/dsh": "0.1.6-alpha.1",
14
- "@deepseek-ai/cordis": "4.0.2",
15
- "@deepseek-ai/dsh-tools": "0.1.6-alpha.1"
13
+ "@deepseek-ai/dsh": "0.1.7-alpha.1",
14
+ "@deepseek-ai/cordis": "4.0.3",
15
+ "@deepseek-ai/dsh-tools": "0.1.7-alpha.1"
16
16
  },
17
17
  "pnpm": {
18
18
  "overrides": {