@fonlan/dsh-task-kanban 0.2.0 → 0.2.1
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/README.md +12 -0
- package/lib/client.js +282 -69
- package/lib/client.js.map +1 -1
- package/lib/index.js +140 -23
- package/lib/types/server/models.d.ts +16 -0
- package/lib/types/server/runner.d.ts +18 -1
- package/lib/types/server/settings.d.ts +35 -7
- package/lib/types/shared/card.d.ts +12 -1
- package/package.json +5 -1
- package/src/client/api.ts +19 -1
- package/src/client/board.css +61 -6
- package/src/client/board.tsx +0 -7
- package/src/client/index.tsx +11 -9
- package/src/client/locales.ts +16 -2
- package/src/client/sections.tsx +244 -48
- package/src/server/models.ts +40 -0
- package/src/server/rpc.ts +33 -4
- package/src/server/runner.ts +71 -18
- package/src/server/settings.ts +52 -7
- package/src/shared/card.ts +13 -1
package/src/server/settings.ts
CHANGED
|
@@ -1,26 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* User-facing plugin settings (global parallel worker count,
|
|
3
|
-
* persisted through the settings service
|
|
4
|
-
* settings service requires a lowercase
|
|
5
|
-
* (/^[a-z][a-z0-9-]*$/), so the scoped package name
|
|
2
|
+
* User-facing plugin settings (global parallel worker count, per-session-type
|
|
3
|
+
* model/effort/preset defaults), persisted through the settings service
|
|
4
|
+
* namespace `task-kanban`. The DSH settings service requires a lowercase
|
|
5
|
+
* kebab-case namespace (/^[a-z][a-z0-9-]*$/), so the scoped package name
|
|
6
|
+
* cannot be used here.
|
|
6
7
|
*/
|
|
7
8
|
import type { Context } from '@deepseek-ai/cordis'
|
|
8
9
|
import z from '@deepseek-ai/schemastery'
|
|
9
10
|
import { settingsNamespace } from '@deepseek-ai/dsh-settings'
|
|
10
|
-
import type { KanbanSettingsShape } from '../shared/card.js'
|
|
11
|
+
import type { KanbanSessionKind, KanbanSettingsShape } from '../shared/card.js'
|
|
11
12
|
|
|
12
13
|
export const KANBAN_SETTINGS_NS = settingsNamespace('task-kanban')
|
|
13
14
|
|
|
14
15
|
export const KanbanSettingsSchema = z.object({
|
|
15
16
|
maxParallelWorkers: z.natural().min(1).default(1),
|
|
16
|
-
|
|
17
|
+
refinementModel: z.string().default(''),
|
|
18
|
+
refinementProvider: z.string().default(''),
|
|
19
|
+
refinementReasoningEffort: z.string().default(''),
|
|
20
|
+
refinementPreset: z.string().default(''),
|
|
21
|
+
phaseModel: z.string().default(''),
|
|
22
|
+
phaseProvider: z.string().default(''),
|
|
23
|
+
phaseReasoningEffort: z.string().default(''),
|
|
24
|
+
phasePreset: z.string().default(''),
|
|
17
25
|
})
|
|
18
26
|
|
|
27
|
+
/** The per-session-type default slice a session kind resolves. */
|
|
28
|
+
export interface KanbanSessionDefaults {
|
|
29
|
+
model: string
|
|
30
|
+
provider: string
|
|
31
|
+
reasoningEffort: string
|
|
32
|
+
preset: string
|
|
33
|
+
}
|
|
34
|
+
|
|
19
35
|
export interface KanbanSettingsFace {
|
|
20
36
|
get(): KanbanSettingsShape
|
|
21
37
|
update(patch: Partial<KanbanSettingsShape>): Promise<void>
|
|
22
38
|
/** Default provider/model route from the agent-default-model settings namespace. */
|
|
23
39
|
defaultModelRoute(): { provider?: string; model?: string }
|
|
40
|
+
/**
|
|
41
|
+
* The configured model/effort/preset defaults for one session kind.
|
|
42
|
+
* `merge` sessions deliberately carry no per-type defaults: they keep the
|
|
43
|
+
* legacy resolution chain (card model → host default).
|
|
44
|
+
*/
|
|
45
|
+
sessionDefaults(kind: KanbanSessionKind): KanbanSessionDefaults
|
|
24
46
|
}
|
|
25
47
|
|
|
26
48
|
/** Structural settings-service subset; the real service resolves the schema. */
|
|
@@ -29,8 +51,20 @@ interface SettingsServiceLike {
|
|
|
29
51
|
update(ns: unknown, patch: Record<string, unknown>, expectedRevision?: number): Promise<unknown>
|
|
30
52
|
}
|
|
31
53
|
|
|
54
|
+
const EMPTY_DEFAULTS: KanbanSessionDefaults = { model: '', provider: '', reasoningEffort: '', preset: '' }
|
|
55
|
+
|
|
32
56
|
export function registerSettings(ctx: Context): KanbanSettingsFace {
|
|
33
|
-
let current: KanbanSettingsShape = {
|
|
57
|
+
let current: KanbanSettingsShape = {
|
|
58
|
+
maxParallelWorkers: 1,
|
|
59
|
+
refinementModel: '',
|
|
60
|
+
refinementProvider: '',
|
|
61
|
+
refinementReasoningEffort: '',
|
|
62
|
+
refinementPreset: '',
|
|
63
|
+
phaseModel: '',
|
|
64
|
+
phaseProvider: '',
|
|
65
|
+
phaseReasoningEffort: '',
|
|
66
|
+
phasePreset: '',
|
|
67
|
+
}
|
|
34
68
|
let service: SettingsServiceLike | undefined
|
|
35
69
|
ctx.inject(['settings'], (sctx) => {
|
|
36
70
|
service = sctx.settings as unknown as SettingsServiceLike
|
|
@@ -43,6 +77,17 @@ export function registerSettings(ctx: Context): KanbanSettingsFace {
|
|
|
43
77
|
})
|
|
44
78
|
return {
|
|
45
79
|
get: () => current,
|
|
80
|
+
sessionDefaults: (kind) => {
|
|
81
|
+
const s = current
|
|
82
|
+
switch (kind) {
|
|
83
|
+
case 'refine':
|
|
84
|
+
return { model: s.refinementModel, provider: s.refinementProvider, reasoningEffort: s.refinementReasoningEffort, preset: s.refinementPreset }
|
|
85
|
+
case 'phase':
|
|
86
|
+
return { model: s.phaseModel, provider: s.phaseProvider, reasoningEffort: s.phaseReasoningEffort, preset: s.phasePreset }
|
|
87
|
+
case 'merge':
|
|
88
|
+
return EMPTY_DEFAULTS
|
|
89
|
+
}
|
|
90
|
+
},
|
|
46
91
|
defaultModelRoute: () => {
|
|
47
92
|
if (service === undefined) return {}
|
|
48
93
|
try {
|
package/src/shared/card.ts
CHANGED
|
@@ -111,7 +111,19 @@ export interface ModelOption {
|
|
|
111
111
|
name?: string
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
+
/** Which kanban session kind a per-type default applies to. */
|
|
115
|
+
export type KanbanSessionKind = 'refine' | 'phase' | 'merge'
|
|
116
|
+
|
|
114
117
|
export interface KanbanSettingsShape {
|
|
115
118
|
maxParallelWorkers: number
|
|
116
|
-
|
|
119
|
+
/** Requirement-refinement session defaults. */
|
|
120
|
+
refinementModel: string
|
|
121
|
+
refinementProvider: string
|
|
122
|
+
refinementReasoningEffort: string
|
|
123
|
+
refinementPreset: string
|
|
124
|
+
/** Phase implementation session defaults. */
|
|
125
|
+
phaseModel: string
|
|
126
|
+
phaseProvider: string
|
|
127
|
+
phaseReasoningEffort: string
|
|
128
|
+
phasePreset: string
|
|
117
129
|
}
|