dsh-trellis 0.1.1 → 0.1.3
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 +2 -2
- package/lib/client.js.map +1 -1
- package/lib/config.js +1 -1
- package/lib/index.js +64 -49
- package/lib/settings-compat.js +50 -0
- package/package.json +18 -13
package/README.md
CHANGED
|
@@ -44,12 +44,12 @@ dsh plugin --profile headless add file:C:/path/to/dsh-trellis
|
|
|
44
44
|
|
|
45
45
|
`file:` 插件会作为 profile 内的 pnpm 快照安装;拉取源码更新后,尤其是版本新增文件时,需要先 remove 再 add 刷新该 profile。
|
|
46
46
|
|
|
47
|
-
配套要求:项目的 Trellis 平台需包含 dsh(`trellis init --dsh`,见 Trellis-DeepSeekHarness 适配分支),且 `.trellis/scripts` 需包含读取原生 `DSH_SESSION_ID`
|
|
47
|
+
配套要求:项目的 Trellis 平台需包含 dsh(`trellis init --dsh`,见 Trellis-DeepSeekHarness 适配分支),且 `.trellis/scripts` 需包含读取原生 `DSH_SESSION_ID` 的适配(已含在同一分支)。v0.1.3 的 Host peer 范围显式覆盖 DSH `0.1.0-rc.6+`、`0.1.1-rc.1+` 与 `0.1.2-alpha.1+` 三条已知预发布线,避免 npm 的 prerelease 语义把新版 Host 误判为不兼容;Host 侧 Settings 桥同时兼容 rc.8 的包级 helper 与 alpha.2/alpha.3 的 provider 方法。本仓开发依赖仍固定在 `0.1.0-rc.8`,Web 配置卡片只在具备 settings/client surface 的 profile 中加载。
|
|
48
48
|
|
|
49
49
|
### DSH rc.8 对齐说明
|
|
50
50
|
|
|
51
51
|
- 已采用:command lifecycle 的 `recordInput`、command attachment envelope 的 fail-closed 输入检查、`subagent/end` 的 run/provider/final-output 元数据、rc.8 的 report-before-settlement 与 idle-parent 原生唤醒语义。
|
|
52
|
-
- 已接入:Host `dsh-trellis` settings namespace 与 `dsh.client` 浏览器卡片。保存值写入 DSH 的 `settings.yaml` 用户层,并实时重挂插件 runtime;
|
|
52
|
+
- 已接入:Host `dsh-trellis` settings namespace 与 `dsh.client` 浏览器卡片。保存值写入 DSH 的 `settings.yaml` 用户层,并实时重挂插件 runtime;settings provider 单独重载时退回 loader 配置,插件自身卸载时则不会错误重挂 runtime。没有 settings 服务的 profile 继续使用原有 loader 配置。DSH 0.1.2 alpha 已将可选 Settings 生命周期迁到 `settings.installSection()`;插件会在运行时选择对应 API,不再静态导入已移除的 helper。
|
|
53
53
|
- 保持可选:`trellis_wait` 仍是“父会话还在当前轮里、需要明确同步点”时的工具;已经 yield 的父会话直接由 DSH 原生 settlement notice 唤醒。
|
|
54
54
|
- 暂不接入:Agent Teams 在 rc.8 仍位于 `packages/experimental` 且不随正式 npm family 发布。Trellis 不应为此引入私有依赖;等它进入公开稳定面后再评估共享 task board / mailbox 映射。
|
|
55
55
|
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["useCallback","useSyncExternalStore","useState","useMemo"],"sources":["../src/client/form.js","../src/client/TrellisSettingsCard.jsx","../src/client/compat.js","../src/client/locales.js","../src/client/styles.js","../src/client/index.jsx"],"sourcesContent":["export const DEFAULTS = Object.freeze({\r\n enabled: true,\r\n maxBytes: 4096,\r\n projectRootMarkers: Object.freeze([\".git\"]),\r\n skipKeyword: \"no-trellis\",\r\n pythonCmd: \"\",\r\n commandsEnabled: true,\r\n});\r\n\r\nexport const FIELD_NAMES = Object.freeze(Object.keys(DEFAULTS));\r\n\r\nfunction record(value) {\r\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\r\n ? value\r\n : {};\r\n}\r\n\r\nexport function sameValue(left, right) {\r\n return JSON.stringify(left) === JSON.stringify(right);\r\n}\r\n\r\nexport function fallbackValue(snapshot, field) {\r\n const base = record(snapshot.base);\r\n return Object.hasOwn(base, field) ? base[field] : DEFAULTS[field];\r\n}\r\n\r\nexport function makeDraft(snapshot) {\r\n const value = record(snapshot.value);\r\n return Object.fromEntries(\r\n FIELD_NAMES.map((field) => [\r\n field,\r\n { mode: \"clean\", value: value[field] ?? DEFAULTS[field] },\r\n ]),\r\n );\r\n}\r\n\r\nexport function editDraft(draft, field, value) {\r\n return { ...draft, [field]: { mode: \"set\", value } };\r\n}\r\n\r\nexport function resetDraft(snapshot, draft, field) {\r\n return {\r\n ...draft,\r\n [field]: { mode: \"unset\", value: fallbackValue(snapshot, field) },\r\n };\r\n}\r\n\r\nexport function parseMarkers(text) {\r\n return [...new Set(text.split(/\\r?\\n/).map((entry) => entry.trim()).filter(Boolean))];\r\n}\r\n\r\nexport function parseDraft(draft) {\r\n const maxBytes = Number(String(draft.maxBytes.value).trim());\r\n return {\r\n invalid:\r\n !Number.isInteger(maxBytes) ||\r\n maxBytes < 0 ||\r\n typeof draft.enabled.value !== \"boolean\" ||\r\n typeof draft.commandsEnabled.value !== \"boolean\",\r\n value: {\r\n enabled: draft.enabled.value,\r\n maxBytes,\r\n projectRootMarkers: parseMarkers(String(draft.projectRootMarkers.value)),\r\n skipKeyword: String(draft.skipKeyword.value),\r\n pythonCmd: String(draft.pythonCmd.value),\r\n commandsEnabled: draft.commandsEnabled.value,\r\n },\r\n };\r\n}\r\n\r\nexport function planDraft(snapshot, draft) {\r\n const user = record(snapshot.user);\r\n const current = record(snapshot.value);\r\n const parsed = parseDraft(draft);\r\n const writes = [];\r\n for (const field of FIELD_NAMES) {\r\n const staged = draft[field];\r\n if (staged.mode === \"clean\") continue;\r\n if (staged.mode === \"unset\") {\r\n if (Object.hasOwn(user, field)) writes.push({ field, kind: \"unset\" });\r\n continue;\r\n }\r\n const value = parsed.value[field];\r\n if (!sameValue(current[field], value)) {\r\n writes.push({ field, kind: \"set\", value });\r\n }\r\n }\r\n return { invalid: parsed.invalid, writes };\r\n}\r\n\r\nexport function isOverridden(snapshot, draft, field) {\r\n if (draft[field].mode === \"set\") return true;\r\n if (draft[field].mode === \"unset\") return false;\r\n return Object.hasOwn(record(snapshot.user), field);\r\n}\r\n\r\nexport function planLanded(snapshot, writes) {\r\n const user = record(snapshot.user);\r\n return writes.every((write) =>\r\n write.kind === \"unset\"\r\n ? !Object.hasOwn(user, write.field)\r\n : Object.hasOwn(user, write.field) && sameValue(user[write.field], write.value),\r\n );\r\n}\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n useSyncExternalStore,\r\n} from \"react\";\r\nimport {\r\n editDraft,\r\n isOverridden,\r\n makeDraft,\r\n parseDraft,\r\n planDraft,\r\n planLanded,\r\n resetDraft,\r\n} from \"./form.js\";\r\n\r\nfunction Reset({ visible, disabled, label, onClick }) {\r\n return visible ? (\r\n <span className=\"dsh-trellis-field-head\">\r\n <span className=\"dsh-trellis-badge\">{label.overridden}</span>\r\n <button className=\"dsh-trellis-reset\" type=\"button\" disabled={disabled} onClick={onClick}>\r\n {label.reset}\r\n </button>\r\n </span>\r\n ) : null;\r\n}\r\n\r\nfunction TextField({ id, label, hint, value, disabled, multiline = false, invalid = false, onChange, onReset, overridden, t }) {\r\n const Control = multiline ? \"textarea\" : \"input\";\r\n return (\r\n <div className=\"dsh-trellis-field\">\r\n <div className=\"dsh-trellis-field-head\">\r\n <label className=\"dsh-trellis-label\" htmlFor={id}>{label}</label>\r\n <Reset visible={overridden} disabled={disabled} label={{ overridden: t(\"overridden\"), reset: t(\"reset\") }} onClick={onReset} />\r\n </div>\r\n <Control\r\n id={id}\r\n className={multiline ? \"dsh-trellis-textarea\" : \"dsh-trellis-input\"}\r\n {...multiline ? {} : { type: \"text\" }}\r\n value={value}\r\n disabled={disabled}\r\n aria-invalid={invalid || undefined}\r\n onChange={(event) => onChange(event.target.value)}\r\n />\r\n <p className=\"dsh-trellis-hint\" data-invalid={invalid}>{invalid ? t(\"maxBytesInvalid\") : hint}</p>\r\n </div>\r\n );\r\n}\r\n\r\nfunction BooleanField({ id, label, hint, value, disabled, onChange, onReset, overridden, t }) {\r\n return (\r\n <div className=\"dsh-trellis-field\">\r\n <div className=\"dsh-trellis-field-head\">\r\n <label className=\"dsh-trellis-switch-row\" htmlFor={id}>\r\n <input id={id} type=\"checkbox\" checked={value} disabled={disabled} onChange={(event) => onChange(event.target.checked)} />\r\n <span className=\"dsh-trellis-switch-copy\">\r\n <span className=\"dsh-trellis-label\">{label}</span>\r\n <span className=\"dsh-trellis-hint\">{hint}</span>\r\n </span>\r\n </label>\r\n <Reset visible={overridden} disabled={disabled} label={{ overridden: t(\"overridden\"), reset: t(\"reset\") }} onClick={onReset} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function TrellisSettingsCard({ scope, t }) {\r\n const subscribe = useCallback((listener) => scope.subscribe(listener), [scope]);\r\n const getSnapshot = useCallback(() => scope.getSnapshot(), [scope]);\r\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\r\n const [open, setOpen] = useState(false);\r\n const [draft, setDraft] = useState(() => makeDraft(snapshot));\r\n const [saving, setSaving] = useState(false);\r\n const [failed, setFailed] = useState(false);\r\n\r\n const plan = useMemo(() => planDraft(snapshot, draft), [snapshot, draft]);\r\n const dirty = plan.writes.length > 0;\r\n useEffect(() => {\r\n if (!dirty && snapshot.status === \"ready\") setDraft(makeDraft(snapshot));\r\n }, [dirty, snapshot]);\r\n\r\n if (snapshot.status !== \"ready\") return null;\r\n const disabled = !snapshot.writable || saving;\r\n const parsed = parseDraft(draft);\r\n const field = (name) => ({\r\n overridden: isOverridden(snapshot, draft, name),\r\n onReset: () => {\r\n setDraft((current) => resetDraft(snapshot, current, name));\r\n setFailed(false);\r\n },\r\n });\r\n const edit = (name, value) => {\r\n setDraft((current) => editDraft(current, name, value));\r\n setFailed(false);\r\n };\r\n const discard = () => {\r\n setDraft(makeDraft(snapshot));\r\n setFailed(false);\r\n };\r\n const save = async () => {\r\n if (saving || plan.invalid || plan.writes.length === 0) return;\r\n setSaving(true);\r\n setFailed(false);\r\n for (const write of plan.writes) {\r\n if (write.kind === \"unset\") await scope.unset(write.field);\r\n else await scope.set(write.field, write.value);\r\n }\r\n const landed = planLanded(scope.getSnapshot(), plan.writes);\r\n if (landed) setDraft(makeDraft(scope.getSnapshot()));\r\n setFailed(!landed);\r\n setSaving(false);\r\n };\r\n\r\n return (\r\n <li className=\"dsh-trellis-card\" data-open={open}>\r\n <button\r\n type=\"button\"\r\n className=\"dsh-trellis-header\"\r\n aria-expanded={open}\r\n aria-label={`${t(open ? \"collapse\" : \"expand\")}: ${t(\"title\")}`}\r\n onClick={() => setOpen((value) => !value)}\r\n >\r\n <span className=\"dsh-trellis-head-text\">\r\n <span className=\"dsh-trellis-name\">{t(\"title\")}</span>\r\n <span className=\"dsh-trellis-description\">{t(\"description\")}</span>\r\n </span>\r\n {dirty ? <span className=\"dsh-trellis-badge\">{t(\"unsaved\")}</span> : null}\r\n <span className=\"dsh-trellis-chevron\" aria-hidden=\"true\">⌄</span>\r\n </button>\r\n {open ? (\r\n <div className=\"dsh-trellis-body\">\r\n {!snapshot.writable ? <p className=\"dsh-trellis-readonly\" role=\"status\">{t(\"readOnly\")}</p> : null}\r\n <BooleanField id=\"dsh-trellis-enabled\" label={t(\"enabled\")} hint={t(\"enabledHint\")} value={Boolean(draft.enabled.value)} disabled={disabled} onChange={(value) => edit(\"enabled\", value)} t={t} {...field(\"enabled\")} />\r\n <BooleanField id=\"dsh-trellis-commands\" label={t(\"commandsEnabled\")} hint={t(\"commandsEnabledHint\")} value={Boolean(draft.commandsEnabled.value)} disabled={disabled} onChange={(value) => edit(\"commandsEnabled\", value)} t={t} {...field(\"commandsEnabled\")} />\r\n <TextField id=\"dsh-trellis-max-bytes\" label={t(\"maxBytes\")} hint={t(\"maxBytesHint\")} value={String(draft.maxBytes.value)} disabled={disabled} invalid={parsed.invalid && (!Number.isInteger(parsed.value.maxBytes) || parsed.value.maxBytes < 0)} onChange={(value) => edit(\"maxBytes\", value)} t={t} {...field(\"maxBytes\")} />\r\n <TextField id=\"dsh-trellis-markers\" label={t(\"projectRootMarkers\")} hint={t(\"projectRootMarkersHint\")} value={Array.isArray(draft.projectRootMarkers.value) ? draft.projectRootMarkers.value.join(\"\\n\") : String(draft.projectRootMarkers.value)} disabled={disabled} multiline onChange={(value) => edit(\"projectRootMarkers\", value)} t={t} {...field(\"projectRootMarkers\")} />\r\n <TextField id=\"dsh-trellis-skip-keyword\" label={t(\"skipKeyword\")} hint={t(\"skipKeywordHint\")} value={String(draft.skipKeyword.value)} disabled={disabled} onChange={(value) => edit(\"skipKeyword\", value)} t={t} {...field(\"skipKeyword\")} />\r\n <TextField id=\"dsh-trellis-python\" label={t(\"pythonCmd\")} hint={t(\"pythonCmdHint\")} value={String(draft.pythonCmd.value)} disabled={disabled} onChange={(value) => edit(\"pythonCmd\", value)} t={t} {...field(\"pythonCmd\")} />\r\n <div className=\"dsh-trellis-footer\">\r\n {failed ? <p className=\"dsh-trellis-error\" role=\"status\">{t(\"saveFailed\")}</p> : null}\r\n <button className=\"dsh-trellis-button\" type=\"button\" disabled={!dirty || saving} onClick={discard}>{t(\"discard\")}</button>\r\n <button className=\"dsh-trellis-button\" data-primary=\"true\" type=\"button\" disabled={!snapshot.writable || plan.invalid || plan.writes.length === 0 || saving} onClick={() => void save()}>{t(saving ? \"saving\" : \"save\")}</button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </li>\r\n );\r\n}\r\n","export function settingsCardIdentity(slotSpec, namespace) {\r\n return slotSpec?.kind === \"keyed\"\r\n ? { key: namespace }\r\n : { id: namespace };\r\n}\r\n","export const zh = {\r\n title: \"Trellis 工作流\",\r\n description: \"工作流状态面包屑、命令和 DSH 会话同步。\",\r\n expand: \"展开\",\r\n collapse: \"收起\",\r\n unsaved: \"未保存\",\r\n readOnly: \"当前设置文档为只读。\",\r\n saveFailed: \"保存未生效;配置可能已被其他窗口修改,请检查后重试。\",\r\n discard: \"放弃更改\",\r\n save: \"保存\",\r\n saving: \"保存中…\",\r\n overridden: \"已覆盖\",\r\n reset: \"恢复配置文件值\",\r\n enabled: \"启用插件\",\r\n enabledHint: \"关闭后立即卸载 Trellis 面包屑、命令、会话变量和等待工具。\",\r\n commandsEnabled: \"启用 /trellis 命令\",\r\n commandsEnabledHint: \"注册 /trellis-status 和只读的 /trellis-finish。\",\r\n maxBytes: \"面包屑字节上限\",\r\n maxBytesHint: \"UTF-8 字节数;0 表示不注入工作流状态。\",\r\n maxBytesInvalid: \"请输入大于等于 0 的整数。\",\r\n projectRootMarkers: \"项目根标记\",\r\n projectRootMarkersHint: \"每行一个目录项;向上查找时任意一项命中即视为项目根。\",\r\n skipKeyword: \"单轮跳过关键词\",\r\n skipKeywordHint: \"提示词中独立出现该关键词时跳过本轮面包屑;留空可关闭。\",\r\n pythonCmd: \"Python 3 命令\",\r\n pythonCmdHint: \"留空使用平台默认候选;仅影响 /trellis 命令。\",\r\n};\r\n\r\nexport const en = {\r\n title: \"Trellis workflow\",\r\n description: \"Workflow breadcrumbs, commands, and DSH session synchronization.\",\r\n expand: \"Expand\",\r\n collapse: \"Collapse\",\r\n unsaved: \"Unsaved\",\r\n readOnly: \"The current settings document is read-only.\",\r\n saveFailed: \"The save did not land. The configuration may have changed elsewhere; review and retry.\",\r\n discard: \"Discard\",\r\n save: \"Save\",\r\n saving: \"Saving…\",\r\n overridden: \"Overridden\",\r\n reset: \"Use composed value\",\r\n enabled: \"Enable plugin\",\r\n enabledHint: \"Turning this off immediately unloads breadcrumbs, commands, session facts, and the wait tool.\",\r\n commandsEnabled: \"Enable /trellis commands\",\r\n commandsEnabledHint: \"Register /trellis-status and the read-only /trellis-finish helper.\",\r\n maxBytes: \"Breadcrumb byte limit\",\r\n maxBytesHint: \"UTF-8 bytes; 0 disables workflow-state injection.\",\r\n maxBytesInvalid: \"Enter an integer greater than or equal to 0.\",\r\n projectRootMarkers: \"Project-root markers\",\r\n projectRootMarkersHint: \"One directory entry per line; any match identifies the root while walking upward.\",\r\n skipKeyword: \"Per-turn skip keyword\",\r\n skipKeywordHint: \"A standalone occurrence in the prompt skips this turn's breadcrumb; empty disables it.\",\r\n pythonCmd: \"Python 3 command\",\r\n pythonCmdHint: \"Empty uses platform-aware candidates; affects only /trellis commands.\",\r\n};\r\n","export const styles = String.raw`\r\n.dsh-trellis-card{list-style:none;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-3);transition:border-color .16s,background .16s}.dsh-trellis-card:hover{border-color:var(--dsw-alias-label-dimmed)}.dsh-trellis-card[data-open=true]{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.dsh-trellis-header{width:100%;appearance:none;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:12px}.dsh-trellis-header:focus-visible,.dsh-trellis-button:focus-visible,.dsh-trellis-reset:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.dsh-trellis-head-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.dsh-trellis-name{font-size:15px;font-weight:600;line-height:1.4;color:var(--dsw-alias-label-primary)}.dsh-trellis-description{font-size:13px;line-height:1.5;color:var(--dsw-alias-label-tertiary)}.dsh-trellis-chevron{flex:none;color:var(--dsw-alias-label-tertiary);font-size:14px;transition:transform .16s}.dsh-trellis-card[data-open=true] .dsh-trellis-chevron{transform:rotate(180deg)}.dsh-trellis-badge{flex:none;border-radius:999px;padding:1px 8px;font-size:11px;line-height:17px;font-weight:500;white-space:nowrap;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary)}.dsh-trellis-body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.dsh-trellis-readonly,.dsh-trellis-error{margin:12px 0 0;font-size:12px;line-height:1.5}.dsh-trellis-readonly{color:var(--dsw-alias-label-tertiary)}.dsh-trellis-error{color:var(--dsw-alias-label-error)}.dsh-trellis-field{display:flex;flex-direction:column;gap:6px;padding:12px 0}.dsh-trellis-field+.dsh-trellis-field{border-top:1px solid var(--dsw-alias-border-l2)}.dsh-trellis-field-head{display:flex;align-items:center;gap:8px}.dsh-trellis-label{flex:1;min-width:0;font-size:13px;font-weight:500;line-height:1.5;color:var(--dsw-alias-label-primary)}.dsh-trellis-reset{border:0;background:none;padding:0;font:inherit;font-size:12px;line-height:1.5;color:var(--dsw-alias-label-secondary);cursor:pointer}.dsh-trellis-input,.dsh-trellis-textarea{width:100%;box-sizing:border-box;padding:0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3);font:inherit;font-size:13px;line-height:1.5;color:var(--dsw-alias-label-primary)}.dsh-trellis-input{height:34px}.dsh-trellis-textarea{min-height:68px;padding-top:8px;padding-bottom:8px;resize:vertical}.dsh-trellis-input:focus-visible,.dsh-trellis-textarea:focus-visible{outline:none;border-color:var(--dsw-alias-brand-primary)}.dsh-trellis-input[aria-invalid=true]{border-color:var(--dsw-alias-label-error)}.dsh-trellis-hint{margin:0;font-size:12px;line-height:1.5;color:var(--dsw-alias-label-tertiary)}.dsh-trellis-hint[data-invalid=true]{color:var(--dsw-alias-label-error)}.dsh-trellis-switch-row{display:flex;flex:1;align-items:flex-start;gap:10px}.dsh-trellis-switch-row input{margin-top:3px;accent-color:var(--dsw-alias-brand-primary)}.dsh-trellis-switch-copy{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}.dsh-trellis-footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 0 4px;border-top:1px solid var(--dsw-alias-border-l2)}.dsh-trellis-footer .dsh-trellis-error{flex:1;margin:0}.dsh-trellis-button{appearance:none;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:5px 14px;font:inherit;font-size:13px;line-height:1.5;cursor:pointer;background:none;color:var(--dsw-alias-label-secondary)}.dsh-trellis-button[data-primary=true]{border-color:transparent;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.dsh-trellis-button:disabled,.dsh-trellis-reset:disabled,.dsh-trellis-input:disabled,.dsh-trellis-textarea:disabled{opacity:.45;cursor:default}\r\n`;\r\n","import { TrellisSettingsCard } from \"./TrellisSettingsCard.jsx\";\r\nimport { settingsCardIdentity } from \"./compat.js\";\r\nimport { en, zh } from \"./locales.js\";\r\nimport { styles } from \"./styles.js\";\r\n\r\nexport const SETTINGS_NAMESPACE = \"dsh-trellis\";\r\nexport const LOCALE_NAMESPACE = \"settings.dsh-trellis\";\r\nexport const inject = [\"slots\", \"locale\", \"settingsScope\"];\r\n\r\nexport function apply(ctx) {\r\n const scope = ctx.settingsScope.bind({ namespace: SETTINGS_NAMESPACE });\r\n ctx.effect(\r\n () => ctx.locale.register(LOCALE_NAMESPACE, { zh, en }),\r\n \"dsh-trellis.client.locale\",\r\n );\r\n ctx.effect(() => {\r\n const selector = 'style[data-plugin-css=\"dsh-trellis/client\"]';\r\n if (document.querySelector(selector) !== null) return () => {};\r\n const tag = document.createElement(\"style\");\r\n tag.dataset.plugin = \"dsh-trellis\";\r\n tag.dataset.pluginCss = \"dsh-trellis/client\";\r\n tag.textContent = styles;\r\n document.head.appendChild(tag);\r\n return () => tag.remove();\r\n }, \"dsh-trellis.client.styles\");\r\n\r\n ctx.slots.inject(\"settings.plugin.item\", () =>\r\n ctx.slots.register(\r\n {\r\n name: \"settings.plugin.item\",\r\n ...settingsCardIdentity(\r\n ctx.slots.spec(\"settings.plugin.item\"),\r\n SETTINGS_NAMESPACE,\r\n ),\r\n locale: LOCALE_NAMESPACE,\r\n inject: () => ({ scope }),\r\n },\r\n TrellisSettingsCard,\r\n ),\r\n );\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["useCallback","useSyncExternalStore","useState","useMemo"],"sources":["../src/client/form.js","../src/client/TrellisSettingsCard.jsx","../src/client/compat.js","../src/client/locales.js","../src/client/styles.js","../src/client/index.jsx"],"mappings":"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"}
|
package/lib/config.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import z from "@deepseek-ai/schemastery";
|
|
7
7
|
|
|
8
8
|
export const Config = z.object({
|
|
9
|
-
/** Runtime master switch; the
|
|
9
|
+
/** Runtime master switch; the settings namespace remains available for re-enabling. */
|
|
10
10
|
enabled: z
|
|
11
11
|
.boolean()
|
|
12
12
|
.default(true)
|
package/lib/index.js
CHANGED
|
@@ -19,15 +19,17 @@
|
|
|
19
19
|
*
|
|
20
20
|
* @module dsh-trellis
|
|
21
21
|
*/
|
|
22
|
-
import { isDeepStrictEqual } from "node:util";
|
|
23
|
-
import
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
import { isDeepStrictEqual } from "node:util";
|
|
23
|
+
import * as settingsModule from "@deepseek-ai/dsh-settings";
|
|
24
|
+
import { Config, resolveConfig } from "./config.js";
|
|
25
|
+
import { createBreadcrumbComposer, isBreadcrumbMessage } from "./breadcrumb.js";
|
|
26
|
+
import { registerCommands } from "./commands.js";
|
|
27
|
+
import { registerSessionEnv } from "./session-env.js";
|
|
28
|
+
import { installSettingsSectionCompat } from "./settings-compat.js";
|
|
29
|
+
import { registerWaitTool } from "./wait-tool.js";
|
|
30
|
+
|
|
31
|
+
export const name = "dsh-trellis";
|
|
32
|
+
export const SETTINGS_NAMESPACE = "dsh-trellis";
|
|
31
33
|
|
|
32
34
|
/** @type {string[]} */
|
|
33
35
|
export const inject = ["commands", "shellEnv", "subagents", "tools"];
|
|
@@ -46,9 +48,10 @@ function sameBreadcrumbPayload(left, right) {
|
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
/** @param {import("@deepseek-ai/cordis").Context} ctx */
|
|
49
|
-
export function apply(ctx, config = {}) {
|
|
50
|
-
let stopped = false;
|
|
51
|
-
let disposeRuntime = () => {};
|
|
51
|
+
export function apply(ctx, config = {}) {
|
|
52
|
+
let stopped = false;
|
|
53
|
+
let disposeRuntime = () => {};
|
|
54
|
+
let currentConfig = () => config;
|
|
52
55
|
|
|
53
56
|
const mountRuntime = (nextConfig) => {
|
|
54
57
|
if (stopped) return;
|
|
@@ -74,37 +77,55 @@ export function apply(ctx, config = {}) {
|
|
|
74
77
|
disposeRuntime = () => stopAll(disposers);
|
|
75
78
|
};
|
|
76
79
|
|
|
77
|
-
// Keep the composition entry working when no settings provider is mounted.
|
|
78
|
-
// Once
|
|
79
|
-
//
|
|
80
|
-
ctx.effect(() => {
|
|
81
|
-
mountRuntime(
|
|
82
|
-
return () => {
|
|
83
|
-
stopped = true;
|
|
84
|
-
disposeRuntime();
|
|
80
|
+
// Keep the composition entry working when no settings provider is mounted.
|
|
81
|
+
// Once the service appears, its resolved section becomes the live source and
|
|
82
|
+
// a saved Web card edit remounts only this plugin's runtime.
|
|
83
|
+
ctx.effect(() => {
|
|
84
|
+
mountRuntime(currentConfig());
|
|
85
|
+
return () => {
|
|
86
|
+
stopped = true;
|
|
87
|
+
disposeRuntime();
|
|
85
88
|
};
|
|
86
89
|
}, "dsh-trellis.runtime");
|
|
87
90
|
|
|
88
|
-
// Optional by design:
|
|
89
|
-
// loader-config behavior
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
91
|
+
// Optional by design: profiles without a settings service retain the
|
|
92
|
+
// loader-config behavior. The canonical bridge also distinguishes a settings
|
|
93
|
+
// provider reload (fall back to config) from this plugin's own teardown
|
|
94
|
+
// (leave the runtime alone until its owning effect disposes it).
|
|
95
|
+
installSettingsSectionCompat(
|
|
96
|
+
ctx,
|
|
97
|
+
settingsModule,
|
|
98
|
+
SETTINGS_NAMESPACE,
|
|
99
|
+
Config,
|
|
100
|
+
config,
|
|
101
|
+
{
|
|
102
|
+
setSource(source) {
|
|
103
|
+
currentConfig = source;
|
|
104
|
+
},
|
|
105
|
+
onChange() {
|
|
106
|
+
mountRuntime(currentConfig());
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Insert a breadcrumb without discarding decision metadata added by DSH or
|
|
114
|
+
* another pre-step participant (for example `startsRequestSeries`).
|
|
115
|
+
*
|
|
116
|
+
* @param {{ messages: unknown[], [key: string]: unknown }} decision
|
|
117
|
+
* @param {unknown[]} claimedMessages
|
|
118
|
+
* @param {unknown} desired
|
|
119
|
+
*/
|
|
120
|
+
export function insertBreadcrumbDecision(decision, claimedMessages, desired) {
|
|
121
|
+
const lastClaimedIndex = decision.messages.findLastIndex((message) =>
|
|
122
|
+
claimedMessages.includes(message),
|
|
123
|
+
);
|
|
124
|
+
return {
|
|
125
|
+
...decision,
|
|
126
|
+
messages: decision.messages.toSpliced(lastClaimedIndex + 1, 0, desired),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
108
129
|
|
|
109
130
|
function registerBreadcrumb(ctx, resolved) {
|
|
110
131
|
const { compose } = createBreadcrumbComposer(resolved, ctx);
|
|
@@ -175,12 +196,6 @@ function registerBreadcrumb(ctx, resolved) {
|
|
|
175
196
|
) {
|
|
176
197
|
return decision;
|
|
177
198
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
return {
|
|
182
|
-
kind: "enter",
|
|
183
|
-
messages: decision.messages.toSpliced(lastClaimedIndex + 1, 0, desired),
|
|
184
|
-
};
|
|
185
|
-
});
|
|
186
|
-
}
|
|
199
|
+
return insertBreadcrumbDecision(decision, messages, desired);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install an optional settings section across the two published DSH APIs.
|
|
3
|
+
*
|
|
4
|
+
* DSH through 0.1.1 exposes `installSettingsSection` as a package helper.
|
|
5
|
+
* The 0.1.2 alpha line moved the same lifecycle onto
|
|
6
|
+
* `SettingsProvider.installSection` and removed the helper export. A namespace
|
|
7
|
+
* import keeps this module loadable on both lines while the provider remains
|
|
8
|
+
* optional for profiles that do not mount settings.
|
|
9
|
+
*
|
|
10
|
+
* @param {import("@deepseek-ai/cordis").Context} ctx
|
|
11
|
+
* @param {{ installSettingsSection?: Function }} settingsModule
|
|
12
|
+
* @param {string} namespace
|
|
13
|
+
* @param {unknown} schema
|
|
14
|
+
* @param {unknown} entry
|
|
15
|
+
* @param {{ setSource: Function, onChange: Function, validate?: Function }} hooks
|
|
16
|
+
*/
|
|
17
|
+
export function installSettingsSectionCompat(
|
|
18
|
+
ctx,
|
|
19
|
+
settingsModule,
|
|
20
|
+
namespace,
|
|
21
|
+
schema,
|
|
22
|
+
entry,
|
|
23
|
+
hooks,
|
|
24
|
+
) {
|
|
25
|
+
if (typeof settingsModule.installSettingsSection === "function") {
|
|
26
|
+
settingsModule.installSettingsSection(
|
|
27
|
+
ctx,
|
|
28
|
+
namespace,
|
|
29
|
+
schema,
|
|
30
|
+
entry,
|
|
31
|
+
hooks,
|
|
32
|
+
);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ctx.inject(["settings"], (settingsCtx) => {
|
|
37
|
+
if (typeof settingsCtx.settings?.installSection !== "function") {
|
|
38
|
+
throw new TypeError(
|
|
39
|
+
"The mounted DSH settings service does not expose installSection().",
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
settingsCtx.settings.installSection(
|
|
43
|
+
ctx,
|
|
44
|
+
namespace,
|
|
45
|
+
schema,
|
|
46
|
+
entry,
|
|
47
|
+
hooks,
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-trellis",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Trellis workflow integration for DeepSeek Harness: per-turn workflow-state breadcrumbs, utility commands, and native session identity.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -54,14 +54,15 @@
|
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
57
|
-
"@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
|
|
58
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8",
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8",
|
|
60
|
-
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.8",
|
|
61
|
-
"@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
57
|
+
"@deepseek-ai/dsh-commands": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
58
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
60
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.8 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
61
|
+
"@deepseek-ai/dsh-llm": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
62
|
+
"@deepseek-ai/dsh-settings": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
63
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
64
|
+
"@deepseek-ai/dsh-subagent": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-tools": "^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
65
66
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
66
67
|
"react": "^18.2.0"
|
|
67
68
|
},
|
|
@@ -81,9 +82,12 @@
|
|
|
81
82
|
"@deepseek-ai/dsh-client-ui-settings-plugins": {
|
|
82
83
|
"optional": true
|
|
83
84
|
},
|
|
84
|
-
"@deepseek-ai/dsh-llm": {
|
|
85
|
-
"optional": true
|
|
86
|
-
},
|
|
85
|
+
"@deepseek-ai/dsh-llm": {
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
88
|
+
"@deepseek-ai/dsh-settings": {
|
|
89
|
+
"optional": true
|
|
90
|
+
},
|
|
87
91
|
"@deepseek-ai/dsh-shell-env": {
|
|
88
92
|
"optional": true
|
|
89
93
|
},
|
|
@@ -103,7 +107,8 @@
|
|
|
103
107
|
"devDependencies": {
|
|
104
108
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
105
109
|
"@deepseek-ai/dsh-commands": "0.1.0-rc.8",
|
|
106
|
-
"@deepseek-ai/dsh-llm": "0.1.0-rc.8",
|
|
110
|
+
"@deepseek-ai/dsh-llm": "0.1.0-rc.8",
|
|
111
|
+
"@deepseek-ai/dsh-settings": "0.1.0-rc.8",
|
|
107
112
|
"@deepseek-ai/dsh-shell-env": "0.1.0-rc.8",
|
|
108
113
|
"@deepseek-ai/dsh-subagent": "0.1.0-rc.8",
|
|
109
114
|
"@deepseek-ai/dsh-tools": "0.1.0-rc.8",
|