dsh-doublecheck 0.9.29 → 0.9.31
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 +20 -0
- package/LICENSE +0 -0
- package/PRIVACY.md +11 -0
- package/README.en.md +577 -0
- package/README.es.md +577 -0
- package/README.hi.md +577 -0
- package/README.md +369 -247
- package/README.pt.md +577 -0
- package/cordis.patch.yml +0 -0
- package/icon.svg +1 -0
- package/lib/ci.d.ts +0 -0
- package/lib/ci.js +0 -0
- package/lib/domain/evidence.d.ts +7 -6
- package/lib/domain/evidence.js +15 -21
- package/lib/domain/gate.d.ts +0 -0
- package/lib/domain/gate.js +0 -0
- package/lib/domain/projection.d.ts +0 -0
- package/lib/domain/projection.js +0 -0
- package/lib/domain/report.d.ts +6 -0
- package/lib/domain/report.js +1 -1
- package/lib/domain/stages.d.ts +0 -0
- package/lib/domain/stages.js +0 -0
- package/lib/domain/vagueness.d.ts +0 -0
- package/lib/domain/vagueness.js +0 -0
- package/lib/domain/vocabulary.d.ts +0 -0
- package/lib/domain/vocabulary.js +0 -0
- package/lib/events.d.ts +2 -0
- package/lib/events.js +0 -0
- package/lib/grill/index.d.ts +0 -0
- package/lib/grill/index.js +84 -26
- package/lib/grill/provider.d.ts +0 -0
- package/lib/grill/provider.js +0 -0
- package/lib/guard/activation.d.ts +0 -0
- package/lib/guard/activation.js +0 -0
- package/lib/guard/command.d.ts +0 -0
- package/lib/guard/command.js +1 -0
- package/lib/guard/gate.d.ts +0 -0
- package/lib/guard/gate.js +0 -0
- package/lib/guard/index.d.ts +0 -0
- package/lib/guard/index.js +30 -25
- package/lib/guard/prose.d.ts +0 -0
- package/lib/guard/prose.js +0 -0
- package/lib/guard/review.d.ts +0 -0
- package/lib/guard/review.js +0 -0
- package/lib/index.d.ts +0 -0
- package/lib/index.js +0 -0
- package/lib/invariant.d.ts +0 -0
- package/lib/invariant.js +0 -0
- package/lib/session-events.d.ts +0 -0
- package/lib/session-events.js +0 -0
- package/lib/types.d.ts +0 -0
- package/lib/types.js +0 -0
- package/package.json +38 -29
- package/skills/delivery-proof/SKILL.md +0 -0
- package/skills/delivery-review/SKILL.md +0 -0
- package/skills/grill-requirements/SKILL.md +0 -0
- package/skills/red-green-tdd/SKILL.md +0 -0
- package/strict.patch.yml +0 -0
- package/README-es.md +0 -449
- package/README-hi.md +0 -449
- package/README-pt.md +0 -449
- package/README-zh.md +0 -449
package/lib/domain/evidence.js
CHANGED
|
@@ -60,35 +60,29 @@ export function emptyDetection() {
|
|
|
60
60
|
* Normalize one settled PTC sub-dispatch event, across the event-vocabulary
|
|
61
61
|
* rename at the session-format V2→V3 edge.
|
|
62
62
|
*
|
|
63
|
-
* The
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
63
|
+
* The V3 line names the settled sub-dispatch `tool/ptc-dispatch` (the host's
|
|
64
|
+
* V2→V3 migration renames the predecessor `tool/code-dispatch`, keeping the
|
|
65
|
+
* payload values), so a stored V2 log arrives under the new label. Neither
|
|
66
|
+
* label is a member of this host line's `SessionEventMap` — the 0.2.2 tools
|
|
67
|
+
* contract retires the PTC declaration while persistence still recognizes both
|
|
68
|
+
* names — so both are matched structurally instead of as switch cases. The
|
|
69
|
+
* fold therefore never depends on which generation wrote the log.
|
|
69
70
|
*
|
|
70
71
|
* @param event - one committed session event.
|
|
71
72
|
* @returns the settled payload, or `undefined` when the event is not a settled sub-dispatch.
|
|
72
73
|
*/
|
|
73
74
|
export function ptcSettle(event) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
name: event.data.name,
|
|
77
|
-
arguments: event.data.arguments,
|
|
78
|
-
isError: event.data.isError,
|
|
79
|
-
content: event.data.content,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
if (event.type !== 'tool/code-dispatch')
|
|
75
|
+
const type = event.type;
|
|
76
|
+
if (type !== 'tool/ptc-dispatch' && type !== 'tool/code-dispatch')
|
|
83
77
|
return undefined;
|
|
84
|
-
const
|
|
85
|
-
if (
|
|
78
|
+
const settled = event.data;
|
|
79
|
+
if (settled === null || settled === undefined || typeof settled.name !== 'string')
|
|
86
80
|
return undefined;
|
|
87
81
|
return {
|
|
88
|
-
name:
|
|
89
|
-
arguments:
|
|
90
|
-
isError:
|
|
91
|
-
content: Array.isArray(
|
|
82
|
+
name: settled.name,
|
|
83
|
+
arguments: settled.arguments,
|
|
84
|
+
isError: settled.isError === true,
|
|
85
|
+
content: Array.isArray(settled.content) ? settled.content : [],
|
|
92
86
|
};
|
|
93
87
|
}
|
|
94
88
|
/**
|
package/lib/domain/gate.d.ts
CHANGED
|
File without changes
|
package/lib/domain/gate.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/domain/projection.js
CHANGED
|
File without changes
|
package/lib/domain/report.d.ts
CHANGED
|
@@ -55,6 +55,12 @@ export interface ReportData extends ReportFacts {
|
|
|
55
55
|
checks: VerifyCheck[];
|
|
56
56
|
complete: boolean;
|
|
57
57
|
} | null;
|
|
58
|
+
/**
|
|
59
|
+
* Why verification did not run, when it was requested. `null` when it ran or
|
|
60
|
+
* was not requested — the renderer must not reduce a failed attempt to a
|
|
61
|
+
* bare "Not run.".
|
|
62
|
+
*/
|
|
63
|
+
verificationNote: string | null;
|
|
58
64
|
/** Workspace markdown copy outcome. */
|
|
59
65
|
path: string | null;
|
|
60
66
|
written: boolean;
|
package/lib/domain/report.js
CHANGED
|
@@ -179,7 +179,7 @@ export function renderReportMarkdown(data) {
|
|
|
179
179
|
}
|
|
180
180
|
lines.push('', '## Verification');
|
|
181
181
|
if (data.verification === null) {
|
|
182
|
-
lines.push('Not run.');
|
|
182
|
+
lines.push(data.verificationNote === null || data.verificationNote === undefined ? 'Not run.' : `Not run — ${data.verificationNote}`);
|
|
183
183
|
}
|
|
184
184
|
else {
|
|
185
185
|
for (const check of data.verification.checks) {
|
package/lib/domain/stages.d.ts
CHANGED
|
File without changes
|
package/lib/domain/stages.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/domain/vagueness.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/domain/vocabulary.js
CHANGED
|
File without changes
|
package/lib/events.d.ts
CHANGED
|
@@ -196,6 +196,8 @@ declare module '@deepseek-ai/cordis' {
|
|
|
196
196
|
checks: VerifyCheck[];
|
|
197
197
|
complete: boolean;
|
|
198
198
|
} | null;
|
|
199
|
+
/** Why verification did not run, when it was requested; null otherwise. */
|
|
200
|
+
verificationNote?: string | null;
|
|
199
201
|
path: string | null;
|
|
200
202
|
written: boolean;
|
|
201
203
|
}): void;
|
package/lib/events.js
CHANGED
|
File without changes
|
package/lib/grill/index.d.ts
CHANGED
|
File without changes
|
package/lib/grill/index.js
CHANGED
|
@@ -348,6 +348,7 @@ export function apply(ctx, config) {
|
|
|
348
348
|
],
|
|
349
349
|
required: true,
|
|
350
350
|
},
|
|
351
|
+
verificationNote: { oneOf: [{ type: 'string' }, { type: 'null' }], required: true },
|
|
351
352
|
path: { oneOf: [{ type: 'string' }, { type: 'null' }], required: true },
|
|
352
353
|
written: { type: 'boolean', required: true },
|
|
353
354
|
},
|
|
@@ -365,13 +366,14 @@ export function apply(ctx, config) {
|
|
|
365
366
|
? { spec: null, testRuns: { failed: 0, passed: 0 }, timeline: [], edits: 0, review: null }
|
|
366
367
|
: foldReportFacts(sessionEvents(session), reportDetection);
|
|
367
368
|
const verify = args.verify ?? config.reportVerify;
|
|
368
|
-
const
|
|
369
|
+
const attempt = verify
|
|
369
370
|
? await runVerifyWorkflow(ctx, config, facts.spec, exec)
|
|
370
|
-
: null;
|
|
371
|
+
: { verification: null, note: null };
|
|
371
372
|
const report = {
|
|
372
373
|
...facts,
|
|
373
|
-
verdict: deriveReportVerdict(facts, verification),
|
|
374
|
-
verification,
|
|
374
|
+
verdict: deriveReportVerdict(facts, attempt.verification),
|
|
375
|
+
verification: attempt.verification,
|
|
376
|
+
verificationNote: attempt.note,
|
|
375
377
|
path: null,
|
|
376
378
|
written: false,
|
|
377
379
|
};
|
|
@@ -379,7 +381,7 @@ export function apply(ctx, config) {
|
|
|
379
381
|
report.path = outcome.path;
|
|
380
382
|
report.written = outcome.written;
|
|
381
383
|
if (session !== undefined) {
|
|
382
|
-
ctx.emit('doublecheck/report', { session, verdict: report.verdict, verification, path: report.path, written: report.written });
|
|
384
|
+
ctx.emit('doublecheck/report', { session, verdict: report.verdict, verification: report.verification, verificationNote: report.verificationNote, path: report.path, written: report.written });
|
|
383
385
|
}
|
|
384
386
|
return report;
|
|
385
387
|
},
|
|
@@ -394,19 +396,65 @@ export function apply(ctx, config) {
|
|
|
394
396
|
}));
|
|
395
397
|
}
|
|
396
398
|
/**
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
399
|
+
* Resolve the workflow engine for this call.
|
|
400
|
+
*
|
|
401
|
+
* A profile-level bundle row lives in the Host realm, but the web profile
|
|
402
|
+
* mounts the engine inside the calling preset's isolated `delegation` group,
|
|
403
|
+
* so `ctx.get('workflowEngine')` from the plugin context returns undefined
|
|
404
|
+
* even though the service is registered. `agentPresets.serviceFor()` is the
|
|
405
|
+
* host's explicit cross-realm accessor (it inspects the agent's retained
|
|
406
|
+
* composition), so it is tried first; the plain lookup stays as the fallback
|
|
407
|
+
* for profiles that mount the engine on the host plane.
|
|
408
|
+
* @param ctx - the plugin context (Host/profile realm).
|
|
409
|
+
* @param agent - the calling agent, when the tool call has one.
|
|
410
|
+
* @returns the engine, or a human-readable reason it is unreachable.
|
|
411
|
+
*/
|
|
412
|
+
function resolveWorkflowEngine(ctx, agent) {
|
|
413
|
+
const presets = ctx.get('agentPresets');
|
|
414
|
+
if (agent?.ctx !== undefined && typeof presets?.serviceFor === 'function') {
|
|
415
|
+
try {
|
|
416
|
+
const scoped = presets.serviceFor(agent, 'workflowEngine');
|
|
417
|
+
if (scoped !== undefined)
|
|
418
|
+
return { engine: scoped };
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
ctx.logger.debug(`dsh-doublecheck: preset workflowEngine lookup failed: ${String(error)}`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
const host = ctx.get('workflowEngine');
|
|
425
|
+
if (host !== undefined)
|
|
426
|
+
return { engine: host };
|
|
427
|
+
return {
|
|
428
|
+
why: presets === undefined
|
|
429
|
+
? 'the agent-preset registry is not mounted and the host plane has no workflowEngine'
|
|
430
|
+
: typeof presets.serviceFor !== 'function'
|
|
431
|
+
? 'the mounted agentPresets service has no serviceFor() and the host plane has no workflowEngine'
|
|
432
|
+
: 'the calling agent preset does not mount a workflow engine (standard/cordis enable workflow-ptc; ptc/minimal do not) and the host plane has none',
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Run the per-dimension verification workflow through the workflow seam.
|
|
437
|
+
*
|
|
438
|
+
* Every way this can fail — no spec, no agent, an engine that is unreachable
|
|
439
|
+
* from this realm, a rejected start, an early stop, a malformed value, a
|
|
440
|
+
* rejected result — settles as `verification: null` plus a note that the
|
|
441
|
+
* report renders. A missing seam must not fail the report call itself, but it
|
|
442
|
+
* must not look like "the checks all passed and there was nothing to say"
|
|
443
|
+
* either.
|
|
444
|
+
* @returns the settled checks, or null verification with the reason.
|
|
402
445
|
*/
|
|
403
446
|
async function runVerifyWorkflow(ctx, config, spec, exec) {
|
|
404
|
-
if (spec === null
|
|
405
|
-
return null;
|
|
406
|
-
|
|
447
|
+
if (spec === null) {
|
|
448
|
+
return { verification: null, note: 'no committed spec is on record; record one with doublecheck_spec before verification' };
|
|
449
|
+
}
|
|
450
|
+
if (exec.agent === undefined) {
|
|
451
|
+
return { verification: null, note: 'the call has no owning agent, so no agent preset can supply a workflow engine' };
|
|
452
|
+
}
|
|
453
|
+
const { engine, why } = resolveWorkflowEngine(ctx, exec.agent);
|
|
407
454
|
if (engine === undefined) {
|
|
408
|
-
|
|
409
|
-
|
|
455
|
+
const note = `verification did not run: ${why}`;
|
|
456
|
+
ctx.logger.warn(`dsh-doublecheck: ${note}`);
|
|
457
|
+
return { verification: null, note };
|
|
410
458
|
}
|
|
411
459
|
let run;
|
|
412
460
|
try {
|
|
@@ -423,16 +471,20 @@ async function runVerifyWorkflow(ctx, config, spec, exec) {
|
|
|
423
471
|
catch (error) {
|
|
424
472
|
// Invalid script/meta or an absent verify provider: verification did not
|
|
425
473
|
// run, and the report states so instead of failing the report itself.
|
|
426
|
-
|
|
427
|
-
|
|
474
|
+
const note = `verification did not run: the workflow engine rejected the verify run: ${String(error)}`;
|
|
475
|
+
ctx.logger.warn(`dsh-doublecheck: ${note}`);
|
|
476
|
+
return { verification: null, note };
|
|
428
477
|
}
|
|
429
478
|
try {
|
|
430
479
|
const result = await run.result;
|
|
431
|
-
if (result.stopReason !== 'completed')
|
|
432
|
-
|
|
480
|
+
if (result.stopReason !== 'completed') {
|
|
481
|
+
const detail = result.error === undefined ? '' : `: ${result.error}`;
|
|
482
|
+
return { verification: null, note: `verification did not run: the verify workflow stopped with "${result.stopReason}" before completing${detail}` };
|
|
483
|
+
}
|
|
433
484
|
const value = result.value;
|
|
434
|
-
if (value === null || value === undefined || !Array.isArray(value.checks))
|
|
435
|
-
return null;
|
|
485
|
+
if (value === null || value === undefined || !Array.isArray(value.checks)) {
|
|
486
|
+
return { verification: null, note: 'verification did not run: the verify workflow completed without a structured checks array' };
|
|
487
|
+
}
|
|
436
488
|
const checks = [];
|
|
437
489
|
for (const check of value.checks) {
|
|
438
490
|
if (!VERIFY_DIMENSIONS.includes(check.dimension))
|
|
@@ -443,17 +495,23 @@ async function runVerifyWorkflow(ctx, config, spec, exec) {
|
|
|
443
495
|
// judged here so a checker that silently dropped a dimension cannot
|
|
444
496
|
// upgrade the delivery.
|
|
445
497
|
const complete = VERIFY_DIMENSIONS.every(dimension => checks.some(check => check.dimension === dimension));
|
|
446
|
-
return { checks, complete };
|
|
498
|
+
return { verification: { checks, complete }, note: null };
|
|
447
499
|
}
|
|
448
500
|
catch (error) {
|
|
449
501
|
// A broken workflow engine must not fail the report call itself: the
|
|
450
502
|
// delivery settles as unverified and the markdown says verification did
|
|
451
|
-
// not run.
|
|
452
|
-
|
|
453
|
-
|
|
503
|
+
// not run, with the reason.
|
|
504
|
+
const note = `verification did not run: the verify workflow failed: ${String(error)}`;
|
|
505
|
+
ctx.logger.warn(`dsh-doublecheck: ${note}`);
|
|
506
|
+
return { verification: null, note };
|
|
454
507
|
}
|
|
455
508
|
finally {
|
|
456
|
-
|
|
509
|
+
try {
|
|
510
|
+
await run.dispose();
|
|
511
|
+
}
|
|
512
|
+
catch (error) {
|
|
513
|
+
ctx.logger.warn(`dsh-doublecheck: verify run disposal failed: ${String(error)}`);
|
|
514
|
+
}
|
|
457
515
|
}
|
|
458
516
|
}
|
|
459
517
|
/** Write the report markdown through the filesystem seam, when one exists. */
|
package/lib/grill/provider.d.ts
CHANGED
|
File without changes
|
package/lib/grill/provider.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/guard/activation.js
CHANGED
|
File without changes
|
package/lib/guard/command.d.ts
CHANGED
|
File without changes
|
package/lib/guard/command.js
CHANGED
package/lib/guard/gate.d.ts
CHANGED
|
File without changes
|
package/lib/guard/gate.js
CHANGED
|
File without changes
|
package/lib/guard/index.d.ts
CHANGED
|
File without changes
|
package/lib/guard/index.js
CHANGED
|
@@ -585,31 +585,36 @@ export function apply(ctx, config) {
|
|
|
585
585
|
const registry = projectionCtx.get('sessionProjections');
|
|
586
586
|
if (registry === undefined)
|
|
587
587
|
return;
|
|
588
|
-
//
|
|
589
|
-
//
|
|
590
|
-
//
|
|
591
|
-
//
|
|
592
|
-
//
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
588
|
+
// Registration is asynchronous on the 0.2.2 line and returns a ready
|
|
589
|
+
// handle; awaiting it inside the effect keeps the fiber from publishing a
|
|
590
|
+
// half-registered unit. The handle's `dispose()` is the unregistration
|
|
591
|
+
// path and MUST be owned by an effect. Registering without holding it left
|
|
592
|
+
// the old closure live after a config hot-reload: turning `gate` (or any
|
|
593
|
+
// detection knob) off and on again kept judging with the stale
|
|
594
|
+
// definitions — a silent false-safety window, and a hard throw once the
|
|
595
|
+
// state version moved.
|
|
596
|
+
projectionCtx.effect(async () => {
|
|
597
|
+
const handle = await registry.register({
|
|
598
|
+
key: 'doublecheck',
|
|
599
|
+
stateSchema: doublecheckStateSchema,
|
|
600
|
+
init: emptyDoublecheckState,
|
|
601
|
+
apply: (state, event) => applyDoublecheckEvent(state, event, detection),
|
|
602
|
+
wire: {
|
|
603
|
+
viewSchema: doublecheckViewSchema,
|
|
604
|
+
view: viewDoublecheck,
|
|
605
|
+
},
|
|
606
|
+
// stateVersion is the persisted-cache invalidation the registry
|
|
607
|
+
// documents, and it IS the backward-compatibility story: the state
|
|
608
|
+
// fields themselves are unchanged and still pass
|
|
609
|
+
// `doublecheckStateSchema`, but a row written at `ver: 2` is
|
|
610
|
+
// discarded on a `ver: 3` unit and the key refolds from `init` over
|
|
611
|
+
// the full log (the host's `restoreFloor` drops to seq 0 on any
|
|
612
|
+
// version mismatch). No migration code, and a pre-upgrade session
|
|
613
|
+
// degrades to a recomputed line instead of a stale one or a crash.
|
|
614
|
+
stateVersion: 3,
|
|
615
|
+
});
|
|
616
|
+
return () => handle.dispose();
|
|
617
|
+
}, 'dsh-doublecheck: projection');
|
|
613
618
|
});
|
|
614
619
|
// The invariant companion, registered from the main plugin so its checks
|
|
615
620
|
// see the live detection knobs. Activates only when an invariant registry
|
package/lib/guard/prose.d.ts
CHANGED
|
File without changes
|
package/lib/guard/prose.js
CHANGED
|
File without changes
|
package/lib/guard/review.d.ts
CHANGED
|
File without changes
|
package/lib/guard/review.js
CHANGED
|
File without changes
|
package/lib/index.d.ts
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
File without changes
|
package/lib/invariant.d.ts
CHANGED
|
File without changes
|
package/lib/invariant.js
CHANGED
|
File without changes
|
package/lib/session-events.d.ts
CHANGED
|
File without changes
|
package/lib/session-events.js
CHANGED
|
File without changes
|
package/lib/types.d.ts
CHANGED
|
File without changes
|
package/lib/types.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-doublecheck",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.31",
|
|
4
4
|
"description": "Delivery quality gate for DeepSeek Harness: grill the requirements, test the implementation, prove the delivery, and gate the handoff with a deliverable/rework decision.",
|
|
5
5
|
"packageManager": "pnpm@11.7.0",
|
|
6
6
|
"repository": {
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
"README-es.md",
|
|
52
52
|
"README-pt.md",
|
|
53
53
|
"README-hi.md",
|
|
54
|
-
"LICENSE"
|
|
54
|
+
"LICENSE",
|
|
55
|
+
"PRIVACY.md",
|
|
56
|
+
"icon.svg"
|
|
55
57
|
],
|
|
56
58
|
"scripts": {
|
|
57
59
|
"build": "tsc --noEmitOnError && node scripts/fix-dts.mjs",
|
|
@@ -83,14 +85,18 @@
|
|
|
83
85
|
"author": "PerryLink",
|
|
84
86
|
"license": "Apache-2.0",
|
|
85
87
|
"engines": {
|
|
86
|
-
"node": "^22.19.0 || >=24.
|
|
87
|
-
"dsh": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0"
|
|
88
|
+
"node": "^22.19.0 || >=24.9.0",
|
|
89
|
+
"dsh": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0"
|
|
88
90
|
},
|
|
89
91
|
"dsh": {
|
|
90
92
|
"manifestVersion": 1,
|
|
91
93
|
"bundle": {
|
|
92
94
|
"patch": "./cordis.patch.yml"
|
|
93
|
-
}
|
|
95
|
+
},
|
|
96
|
+
"capabilities": [
|
|
97
|
+
"tools:register"
|
|
98
|
+
],
|
|
99
|
+
"labels": []
|
|
94
100
|
},
|
|
95
101
|
"dshWorkshop": {
|
|
96
102
|
"schema": "omdsh-workshop-package/v1",
|
|
@@ -137,46 +143,49 @@
|
|
|
137
143
|
},
|
|
138
144
|
"peerDependencies": {
|
|
139
145
|
"@deepseek-ai/cordis": "^4.0.5-alpha.1",
|
|
140
|
-
"@deepseek-ai/dsh-agent": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
141
|
-
"@deepseek-ai/dsh-commands": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
146
|
+
"@deepseek-ai/dsh-agent": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
147
|
+
"@deepseek-ai/dsh-commands": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
142
148
|
"@deepseek-ai/dsh-invariants": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
143
|
-
"@deepseek-ai/dsh-llm": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
144
|
-
"@deepseek-ai/dsh-session": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
145
|
-
"@deepseek-ai/dsh-session-projection": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
146
|
-
"@deepseek-ai/dsh-skill": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
147
|
-
"@deepseek-ai/dsh-tools": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0",
|
|
149
|
+
"@deepseek-ai/dsh-llm": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
150
|
+
"@deepseek-ai/dsh-session": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
151
|
+
"@deepseek-ai/dsh-session-projection": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
152
|
+
"@deepseek-ai/dsh-skill": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
153
|
+
"@deepseek-ai/dsh-tools": ">=0.1.6-0 <0.2.0 || >=0.2.0-0 <0.3.0 || >=0.2.1-0 <0.3.0 || >=0.2.2-0 <0.3.0",
|
|
148
154
|
"@deepseek-ai/schemastery": "^3.18.5-alpha.1"
|
|
149
155
|
},
|
|
150
156
|
"dependencies": {
|
|
151
157
|
"zod": "^4.4.3"
|
|
152
158
|
},
|
|
153
159
|
"devDependencies": {
|
|
154
|
-
"@deepseek-ai/cordis": "^4.0
|
|
155
|
-
"@deepseek-ai/cordis-plugin-loader": "^1.0
|
|
156
|
-
"@deepseek-ai/dsh-agent": "0.2.
|
|
157
|
-
"@deepseek-ai/dsh-commands": "0.2.
|
|
158
|
-
"@deepseek-ai/dsh-fs": "0.2.
|
|
160
|
+
"@deepseek-ai/cordis": "^4.1.0",
|
|
161
|
+
"@deepseek-ai/cordis-plugin-loader": "^1.1.0",
|
|
162
|
+
"@deepseek-ai/dsh-agent": "0.2.2-rc.1",
|
|
163
|
+
"@deepseek-ai/dsh-commands": "0.2.2-rc.1",
|
|
164
|
+
"@deepseek-ai/dsh-fs": "0.2.2-rc.1",
|
|
159
165
|
"@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
|
|
160
|
-
"@deepseek-ai/dsh-llm": "0.2.
|
|
161
|
-
"@deepseek-ai/dsh-session": "0.2.
|
|
162
|
-
"@deepseek-ai/dsh-session-projection": "0.2.
|
|
163
|
-
"@deepseek-ai/dsh-settings": "0.2.
|
|
164
|
-
"@deepseek-ai/dsh-skill": "0.2.
|
|
165
|
-
"@deepseek-ai/dsh-subagent": "0.2.
|
|
166
|
-
"@deepseek-ai/dsh-system-prompt": "0.2.
|
|
167
|
-
"@deepseek-ai/dsh-
|
|
168
|
-
"@deepseek-ai/dsh-
|
|
169
|
-
"@deepseek-ai/
|
|
166
|
+
"@deepseek-ai/dsh-llm": "0.2.2-rc.1",
|
|
167
|
+
"@deepseek-ai/dsh-session": "0.2.2-rc.1",
|
|
168
|
+
"@deepseek-ai/dsh-session-projection": "0.2.2-rc.1",
|
|
169
|
+
"@deepseek-ai/dsh-settings": "0.2.2-rc.1",
|
|
170
|
+
"@deepseek-ai/dsh-skill": "0.2.2-rc.1",
|
|
171
|
+
"@deepseek-ai/dsh-subagent": "0.2.2-rc.1",
|
|
172
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.2-rc.1",
|
|
173
|
+
"@deepseek-ai/dsh-tool-executor-native": "0.2.2-rc.1",
|
|
174
|
+
"@deepseek-ai/dsh-tools": "0.2.2-rc.1",
|
|
175
|
+
"@deepseek-ai/dsh-workflow": "0.2.2-rc.1",
|
|
176
|
+
"@deepseek-ai/schemastery": "~3.19.0",
|
|
170
177
|
"@eslint/js": "^9.30.0",
|
|
171
178
|
"@types/node": "^22.15.0",
|
|
172
179
|
"@vitest/coverage-v8": "^3.2.0",
|
|
173
180
|
"eslint": "^9.30.0",
|
|
174
181
|
"typescript-eslint": "^8.35.0",
|
|
175
182
|
"vitest": "^3.2.0",
|
|
176
|
-
"typescript": "^5.7.0"
|
|
183
|
+
"typescript": "^5.7.0",
|
|
184
|
+
"@deepseek-ai/dsh-package-manifest": "0.2.2-rc.1"
|
|
177
185
|
},
|
|
178
186
|
"funding": {
|
|
179
187
|
"type": "individual",
|
|
180
188
|
"url": "https://github.com/sponsors/PerryLink"
|
|
181
|
-
}
|
|
189
|
+
},
|
|
190
|
+
"icon": "icon.svg"
|
|
182
191
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/strict.patch.yml
CHANGED
|
File without changes
|