@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 +1 -1
- package/skills/dsh-plugin-shapes/SKILL.md +70 -37
- package/workspace/package.json +3 -3
- package/workspace/pnpm-lock.yaml +4847 -4520
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyf0xx/hedgehog-core-deepseek-harness",
|
|
3
|
-
"version": "0.2.
|
|
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.
|
|
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.
|
|
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
|
|
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?)
|
|
573
|
-
`
|
|
574
|
-
|
|
575
|
-
`caller
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
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
|
-
(
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
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`
|
|
735
|
-
`session-maybe` — `sessionId`,
|
|
736
|
-
`useConversation`, `useInput`,
|
|
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
|
package/workspace/package.json
CHANGED
|
@@ -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.
|
|
14
|
-
"@deepseek-ai/cordis": "4.0.
|
|
15
|
-
"@deepseek-ai/dsh-tools": "0.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": {
|