dsh-output-styles 0.2.0
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/LICENSE +201 -0
- package/README.es.md +197 -0
- package/README.ja.md +197 -0
- package/README.ko.md +197 -0
- package/README.md +197 -0
- package/README.zh.md +197 -0
- package/cordis.patch.yml +40 -0
- package/docs/VERIFICATION.zh.md +93 -0
- package/lib/client.js +83 -0
- package/lib/index.js +415 -0
- package/lib/invariant-LV6hQX5s.js +442 -0
- package/lib/invariant.js +2 -0
- package/lib/types/client/index.d.ts +30 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/locales.d.ts +13 -0
- package/lib/types/client/locales.d.ts.map +1 -0
- package/lib/types/config.d.ts +73 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/index.d.ts +31 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/invariant.d.ts +59 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/runtime.d.ts +144 -0
- package/lib/types/runtime.d.ts.map +1 -0
- package/lib/types/style-command.d.ts +68 -0
- package/lib/types/style-command.d.ts.map +1 -0
- package/lib/types/style-library.d.ts +78 -0
- package/lib/types/style-library.d.ts.map +1 -0
- package/lib/types/types.d.ts +78 -0
- package/lib/types/types.d.ts.map +1 -0
- package/package.json +138 -0
- package/src/client/index.ts +104 -0
- package/src/client/locales.ts +14 -0
- package/src/config.ts +110 -0
- package/src/index.ts +51 -0
- package/src/invariant.ts +144 -0
- package/src/runtime.ts +439 -0
- package/src/style-command.ts +89 -0
- package/src/style-library.ts +348 -0
- package/src/types.ts +86 -0
- package/styles/concise.md +17 -0
- package/styles/explanatory.md +14 -0
- package/styles/formal.md +14 -0
- package/styles/step-by-step.md +16 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion for `dsh-output-styles`.
|
|
3
|
+
*
|
|
4
|
+
* Two post-commit diagnostic checks over the events this plugin's write path
|
|
5
|
+
* produces (both target events are committed before dispatch, so a violation
|
|
6
|
+
* is reported — via the host registry's `fail` — rather than vetoed):
|
|
7
|
+
*
|
|
8
|
+
* 1. Every `output_style`/`selection` durable write carries this plugin's own
|
|
9
|
+
* source marker and a legal style name; when the library is known,
|
|
10
|
+
* the name must be a library member.
|
|
11
|
+
* 2. A successful `/style <name>` command has a matching selection record on
|
|
12
|
+
* its session by the time its `command/done` settles, and `/style off`
|
|
13
|
+
* leaves no record. The standalone companion (no library/domain handle)
|
|
14
|
+
* skips this check.
|
|
15
|
+
*
|
|
16
|
+
* The main plugin registers a facts-bearing installer from its own context;
|
|
17
|
+
* the `./invariant` export is the standalone companion usable through a
|
|
18
|
+
* separate profile row.
|
|
19
|
+
* @module dsh-output-styles/invariant
|
|
20
|
+
*/
|
|
21
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
22
|
+
import type { SessionId } from '@deepseek-ai/dsh-session';
|
|
23
|
+
/** Full npm package name owning the reported failures. */
|
|
24
|
+
export declare const PACKAGE_NAME = "dsh-output-styles";
|
|
25
|
+
/** A package-attributed invariant failure reported by the host registry. */
|
|
26
|
+
export type InvariantFailure = (message: string) => never;
|
|
27
|
+
/** Facts the installer needs beyond the event stream. */
|
|
28
|
+
export interface InvariantFacts {
|
|
29
|
+
/** Library style names, or undefined when the companion has no library handle. */
|
|
30
|
+
knownStyles(): ReadonlySet<string> | undefined;
|
|
31
|
+
/** One session's durable selection record; absent disables the pairing check. */
|
|
32
|
+
selectionFor?(sessionId: SessionId): {
|
|
33
|
+
style: string;
|
|
34
|
+
} | undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Installer callback accepted by the host's invariant registry. */
|
|
37
|
+
export type InvariantInstaller = (ctx: Context, fail: InvariantFailure) => void | Promise<void>;
|
|
38
|
+
/** Minimal runtime contract used by the companion without a source checkout. */
|
|
39
|
+
export interface InvariantRegistry {
|
|
40
|
+
register(packageName: string, installer: InvariantInstaller): () => void;
|
|
41
|
+
}
|
|
42
|
+
/** Cordis companion plugin name. */
|
|
43
|
+
export declare const name = "dsh-output-styles-invariant";
|
|
44
|
+
/** Service required before the companion can reserve package ownership. */
|
|
45
|
+
export declare const inject: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Build the installer over a facts source. The standalone companion and the
|
|
48
|
+
* main plugin share this body; only the facts differ.
|
|
49
|
+
* @param facts - library and domain access for the checks.
|
|
50
|
+
* @returns the installer the host registry activates in its child context.
|
|
51
|
+
*/
|
|
52
|
+
export declare function installInvariant(facts: InvariantFacts): InvariantInstaller;
|
|
53
|
+
/**
|
|
54
|
+
* Register the standalone companion with envelope-only facts.
|
|
55
|
+
* @param ctx - Cordis context carrying the invariant service.
|
|
56
|
+
* @returns the installed registration's disposer after setup succeeds.
|
|
57
|
+
*/
|
|
58
|
+
export declare const apply: (ctx: Context) => Promise<() => void>;
|
|
59
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../src/invariant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAyB,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAOhF,0DAA0D;AAC1D,eAAO,MAAM,YAAY,sBAAsB,CAAA;AAE/C,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAA;AAEzD,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAC9C,iFAAiF;IACjF,YAAY,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CACnE;AAED,oEAAoE;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/F,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;CACzE;AAED,oCAAoC;AACpC,eAAO,MAAM,IAAI,gCAAgC,CAAA;AACjD,2EAA2E;AAC3E,eAAO,MAAM,MAAM,UAAiB,CAAA;AAapC;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CA8C1E;AAkBD;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,OAAO,KAAG,OAAO,CAAC,MAAM,IAAI,CAC+C,CAAA"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime boundary and Cordis activation: style resolution over the durable
|
|
3
|
+
* selection domain, the model-visible system-prompt section, the `/style`
|
|
4
|
+
* command, the `style` session projection, and the invariant registration.
|
|
5
|
+
*
|
|
6
|
+
* Every registration is an effect — Cordis undoes all of them on unload, so
|
|
7
|
+
* configuration hot-reload replaces the whole plugin without residue.
|
|
8
|
+
* @module dsh-output-styles/runtime
|
|
9
|
+
*/
|
|
10
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
11
|
+
import type { Session, SessionId } from '@deepseek-ai/dsh-session';
|
|
12
|
+
import type { Domain } from '@deepseek-ai/dsh-storage-domain';
|
|
13
|
+
import { type Config } from './config.ts';
|
|
14
|
+
import { type OutputStyle } from './style-library.ts';
|
|
15
|
+
import { OUTPUT_STYLE_DOMAIN, type StyleSelection } from './types.ts';
|
|
16
|
+
/** Bundled style-library directory (package `styles/`), the lowest-priority `stylesDir` entry. */
|
|
17
|
+
export declare const DEFAULT_STYLES_DIR: string;
|
|
18
|
+
/** Prompt-section name; a fixed registry key a scoped composition could shadow. */
|
|
19
|
+
export declare const STYLE_SECTION_NAME = "output-style:selection";
|
|
20
|
+
/**
|
|
21
|
+
* Resolved style behavior for one session. A forced style (frontmatter
|
|
22
|
+
* `force: true`) wins over everything; otherwise the session's own durable
|
|
23
|
+
* selection wins, sessions that never selected one fall back to the project
|
|
24
|
+
* default (settings `outputStyle`, then the configured default style), and
|
|
25
|
+
* `''` means no style at all.
|
|
26
|
+
*/
|
|
27
|
+
export declare class OutputStyleRuntime {
|
|
28
|
+
private readonly domain;
|
|
29
|
+
private library;
|
|
30
|
+
private forcedStyle;
|
|
31
|
+
private readonly selection;
|
|
32
|
+
private readonly defaultStyle;
|
|
33
|
+
private readonly maxStyleChars;
|
|
34
|
+
private readonly truncationMarker;
|
|
35
|
+
private projectDefault;
|
|
36
|
+
/** Style library in deterministic directory/file order. */
|
|
37
|
+
get styles(): ReadonlyMap<string, OutputStyle>;
|
|
38
|
+
/**
|
|
39
|
+
* @param domain - the opened `output_style` domain; the caller owns `close()`.
|
|
40
|
+
* @param styles - the loaded style library (at most one `force` style).
|
|
41
|
+
* @param options - resolved style budget and default.
|
|
42
|
+
*/
|
|
43
|
+
constructor(domain: Domain<typeof OUTPUT_STYLE_DOMAIN>, styles: ReadonlyMap<string, OutputStyle>, options: {
|
|
44
|
+
readonly defaultStyle: string;
|
|
45
|
+
readonly maxStyleChars: number;
|
|
46
|
+
readonly truncationMarker: string;
|
|
47
|
+
});
|
|
48
|
+
/** Every switchable style name, in library order. */
|
|
49
|
+
get names(): readonly string[];
|
|
50
|
+
/** The forced style's name, or undefined when the library declares none. */
|
|
51
|
+
get forcedName(): string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Atomically swap the style library (style-file hot reload). The forced
|
|
54
|
+
* style is recomputed; the caller already validated the new library.
|
|
55
|
+
* @param styles - the replacement library.
|
|
56
|
+
*/
|
|
57
|
+
reload(styles: ReadonlyMap<string, OutputStyle>): void;
|
|
58
|
+
/**
|
|
59
|
+
* Point the project-default resolution at a live source (the settings
|
|
60
|
+
* scope while one is attached, the composition entry otherwise).
|
|
61
|
+
* @param get - thunk returning the project default style name (`''` = none).
|
|
62
|
+
*/
|
|
63
|
+
setProjectDefault(get: () => string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve one style by name.
|
|
66
|
+
* @param name - style name.
|
|
67
|
+
* @returns the style, or undefined when the library has none.
|
|
68
|
+
*/
|
|
69
|
+
get(name: string): OutputStyle | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* The session's durable selection record.
|
|
72
|
+
* @param sessionId - the session the selection belongs to.
|
|
73
|
+
* @returns the record, or undefined when the session never selected one.
|
|
74
|
+
*/
|
|
75
|
+
selectionFor(sessionId: SessionId): StyleSelection | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* The style in force for a session: a forced library style, else the
|
|
78
|
+
* session's own selection, else the project default, else none. A stale
|
|
79
|
+
* selection or project default (its style left the library) also degrades
|
|
80
|
+
* to none.
|
|
81
|
+
* @param sessionId - the session the style is resolved for.
|
|
82
|
+
* @returns the effective style, or undefined when no style applies.
|
|
83
|
+
*/
|
|
84
|
+
effectiveStyle(sessionId: SessionId): OutputStyle | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* The effective style name, or `''` when no style applies.
|
|
87
|
+
* @param sessionId - the session the style is resolved for.
|
|
88
|
+
* @returns the style name, or `''`.
|
|
89
|
+
*/
|
|
90
|
+
currentName(sessionId: SessionId): string;
|
|
91
|
+
/**
|
|
92
|
+
* The model-visible style directive for a session: a header naming the
|
|
93
|
+
* style plus its body under the configured budget. The exact text is what
|
|
94
|
+
* the harness logs in `request/header` before dispatch.
|
|
95
|
+
* @param sessionId - the session the directive is built for.
|
|
96
|
+
* @returns the directive, or `''` when no style applies.
|
|
97
|
+
*/
|
|
98
|
+
promptText(sessionId: SessionId): string;
|
|
99
|
+
/**
|
|
100
|
+
* The `/style` no-argument listing: the current selection followed by one
|
|
101
|
+
* line per style (`name — description`, with `whenToUse` appended when set).
|
|
102
|
+
* @param sessionId - the session the listing describes.
|
|
103
|
+
* @returns the multi-line command result text.
|
|
104
|
+
*/
|
|
105
|
+
listLine(sessionId: SessionId): string;
|
|
106
|
+
/**
|
|
107
|
+
* The unknown-name error line, shared by the command handler and the direct
|
|
108
|
+
* {@link OutputStyleRuntime.select} write path.
|
|
109
|
+
* @param name - the rejected switch target.
|
|
110
|
+
* @returns the error text listing every switchable name.
|
|
111
|
+
*/
|
|
112
|
+
unknownStyleLine(name: string): string;
|
|
113
|
+
/**
|
|
114
|
+
* Durably select a style for a session. The write resolves only after the
|
|
115
|
+
* backend acknowledged it, so a settled command implies a stored record.
|
|
116
|
+
* @param session - the session the selection belongs to.
|
|
117
|
+
* @param name - library style name; unknown names throw.
|
|
118
|
+
* @returns resolution after durability.
|
|
119
|
+
*/
|
|
120
|
+
select(session: Session, name: string): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Remove a session's selection, restoring the configured default.
|
|
123
|
+
* @param session - the session whose selection is removed.
|
|
124
|
+
* @returns resolution after durability.
|
|
125
|
+
*/
|
|
126
|
+
turnOff(session: Session): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Close the opened domain (the plugin fiber's async disposer).
|
|
129
|
+
* @returns resolution after the backend unit is released.
|
|
130
|
+
*/
|
|
131
|
+
close(): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Apply the plugin to its Cordis context.
|
|
135
|
+
*
|
|
136
|
+
* Declares `storageDomain` via `inject` (ready before `apply`; a composition
|
|
137
|
+
* without a routed kv backend keeps the plugin pending). Bad style files are
|
|
138
|
+
* skipped with warnings; a duplicate or reserved style name, an unreadable
|
|
139
|
+
* style directory, or a `defaultStyle` naming no style fails the load.
|
|
140
|
+
* @param ctx - scoped plugin context; registrations must be owned by its effects.
|
|
141
|
+
* @param config - configuration resolved by Cordis from the exported schema.
|
|
142
|
+
*/
|
|
143
|
+
export declare function apply(ctx: Context, config: Config): Promise<void>;
|
|
144
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict parsing of the `/style` command input and the pure projection fold
|
|
3
|
+
* over its logged lifecycle events.
|
|
4
|
+
*
|
|
5
|
+
* The handler and the session-projection unit share {@link parseStyleInput}:
|
|
6
|
+
* the projection folds exactly the inputs the handler accepts, so the
|
|
7
|
+
* displayed selection can never diverge from what the command did.
|
|
8
|
+
* @module dsh-output-styles/style-command
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
11
|
+
/** Command name registered on `ctx.commands`; also the log's `command/run` name. */
|
|
12
|
+
export declare const STYLE_COMMAND = "style";
|
|
13
|
+
/** One strict parse of a `/style` input line. */
|
|
14
|
+
export type StyleInput = {
|
|
15
|
+
kind: 'none';
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'off';
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'switch';
|
|
20
|
+
name: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Parse the text after `/style` into one switch decision. The empty string
|
|
24
|
+
* is `none` — the handler treats it as the listing form, and the projection
|
|
25
|
+
* fold ignores it. Anything else is a switch: `off` restores the default,
|
|
26
|
+
* and every other input is one style name taken verbatim (style names may
|
|
27
|
+
* contain spaces, so the whole remainder is the candidate). Unknown names
|
|
28
|
+
* are rejected by the handler against the library, and the fold commits only
|
|
29
|
+
* what the handler reports as successful, so both sides agree on what
|
|
30
|
+
* actually switched.
|
|
31
|
+
* @param rawInput - verbatim text after the command name.
|
|
32
|
+
* @returns the decision; non-empty inputs other than `off` name a style.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseStyleInput(rawInput: string): StyleInput;
|
|
35
|
+
/** Projection-fold state: the last settled selection plus the in-flight switch. */
|
|
36
|
+
export interface StyleFoldState {
|
|
37
|
+
/** Accepted switch target that settled successfully, or null when the session's style was turned off. */
|
|
38
|
+
current: string | null;
|
|
39
|
+
/**
|
|
40
|
+
* One `/style` run that entered its handler but has not settled yet: its
|
|
41
|
+
* `command/run` claimed this slot and only its paired `command/done`
|
|
42
|
+
* resolves it. A failed or aborted run drops the target without touching
|
|
43
|
+
* `current`, so the folded state always mirrors what the write path actually
|
|
44
|
+
* committed.
|
|
45
|
+
*/
|
|
46
|
+
pending: {
|
|
47
|
+
commandId: string;
|
|
48
|
+
target: {
|
|
49
|
+
name: string;
|
|
50
|
+
} | {
|
|
51
|
+
off: true;
|
|
52
|
+
};
|
|
53
|
+
} | null;
|
|
54
|
+
}
|
|
55
|
+
/** State for the empty log. */
|
|
56
|
+
export declare const EMPTY_STYLE_STATE: StyleFoldState;
|
|
57
|
+
/**
|
|
58
|
+
* One-event transition of the `style` projection unit. Only a successful
|
|
59
|
+
* `/style` command settles into `current`: `command/run` parks the target as
|
|
60
|
+
* `pending` and its paired `command/done` commits it on `kind: 'success'` or
|
|
61
|
+
* drops it otherwise. Every other event returns the same reference (the
|
|
62
|
+
* registry's change gate).
|
|
63
|
+
* @param state - the folded state before `event`.
|
|
64
|
+
* @param event - one committed session event.
|
|
65
|
+
* @returns the next state; the same reference when the event leaves it unchanged.
|
|
66
|
+
*/
|
|
67
|
+
export declare function applyStyleEvent(state: StyleFoldState, event: SessionEvent): StyleFoldState;
|
|
68
|
+
//# sourceMappingURL=style-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-command.d.ts","sourceRoot":"","sources":["../../src/style-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAI5D,oFAAoF;AACpF,eAAO,MAAM,aAAa,UAAU,CAAA;AAEpC,iDAAiD;AACjD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAK5D;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,yGAAyG;IACzG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;;;;;OAMG;IACH,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG;YAAE,GAAG,EAAE,IAAI,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAA;CAChF;AAED,+BAA+B;AAC/B,eAAO,MAAM,iBAAiB,EAAE,cAAiD,CAAA;AAEjF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAmB1F"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style-library loading: one style per `*.md` file (frontmatter + body),
|
|
3
|
+
* with optional Claude Code `outputStyles` JSON compatibility (single entry
|
|
4
|
+
* or an array of entries per file).
|
|
5
|
+
*
|
|
6
|
+
* A style file that does not parse is skipped with a warning; the plugin
|
|
7
|
+
* stays loadable. Structural ambiguity — a duplicate style name, a style
|
|
8
|
+
* named `off`, or two styles declaring `force` — fails the load because it
|
|
9
|
+
* would silently change which body gets injected.
|
|
10
|
+
* @module dsh-output-styles/style-library
|
|
11
|
+
*/
|
|
12
|
+
/** Character set for style names: letters, digits, spaces, and hyphens only. */
|
|
13
|
+
export declare const STYLE_NAME_RE: RegExp;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a name is a legal style name and switch target: at least one
|
|
16
|
+
* letter or digit, only letters/digits/spaces/hyphens, and no leading or
|
|
17
|
+
* trailing space. Spaces are the only whitespace allowed, so a name is
|
|
18
|
+
* always a single switchable line the model can echo back. `off` passes this
|
|
19
|
+
* check but is a reserved target rejected by the library.
|
|
20
|
+
* @param name - candidate style name.
|
|
21
|
+
* @returns whether the name is legal.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isValidStyleName(name: string): boolean;
|
|
24
|
+
/** One loaded style: library metadata plus the raw injectable body. */
|
|
25
|
+
export interface OutputStyle {
|
|
26
|
+
/** Switch target accepted by `/style`; letters, digits, spaces, and hyphens. */
|
|
27
|
+
readonly name: string;
|
|
28
|
+
/** One user-facing sentence on what the style does. */
|
|
29
|
+
readonly description: string;
|
|
30
|
+
/** Optional guidance on when the style is useful; shown in listings. */
|
|
31
|
+
readonly whenToUse?: string;
|
|
32
|
+
/** The raw directive injected into the system prompt, before truncation. */
|
|
33
|
+
readonly body: string;
|
|
34
|
+
/** Library file this style came from, relative to the style directory. */
|
|
35
|
+
readonly file: string;
|
|
36
|
+
/** Source format (`md` frontmatter or `json` compatibility entry). */
|
|
37
|
+
readonly format: 'md' | 'json';
|
|
38
|
+
/**
|
|
39
|
+
* Keep the harness prompt (identity, persona, tool guidance) when this
|
|
40
|
+
* style is active (Claude Code `keep-coding-instructions`). When false,
|
|
41
|
+
* the style replaces the whole system prompt; default false, matching
|
|
42
|
+
* Claude Code.
|
|
43
|
+
*/
|
|
44
|
+
readonly keepCodingInstructions: boolean;
|
|
45
|
+
/** Apply this style unconditionally, overriding any session selection. */
|
|
46
|
+
readonly force: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Report a style file the loader skipped or a tolerated oddity. */
|
|
49
|
+
type Warn = (message: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Load the style library from one or more directories. Later directories
|
|
52
|
+
* override earlier ones on a same-named style (the Claude Code
|
|
53
|
+
* "closest-to-the-working-directory wins" rule); duplicates within one
|
|
54
|
+
* directory still fail the load. Deterministic order: directories in the
|
|
55
|
+
* given order, files within a directory sorted by code unit.
|
|
56
|
+
* @param stylesDirs - absolute directories, lowest priority first.
|
|
57
|
+
* @param options.compatJson - whether `*.json` entries are loaded.
|
|
58
|
+
* @param warn - warning sink (skipped files, unknown frontmatter keys).
|
|
59
|
+
* @returns the library keyed by style name, in directory/file order.
|
|
60
|
+
* @throws when a directory is unreadable, a style is named `off`, two files
|
|
61
|
+
* in one directory declare the same name, or two styles declare `force`.
|
|
62
|
+
*/
|
|
63
|
+
export declare function loadStyleLibrary(stylesDirs: readonly string[], options: {
|
|
64
|
+
readonly compatJson: boolean;
|
|
65
|
+
}, warn: Warn): ReadonlyMap<string, OutputStyle>;
|
|
66
|
+
/**
|
|
67
|
+
* Apply the style-body budget: bodies at most `maxChars` code points pass
|
|
68
|
+
* through; longer bodies are cut at the budget and closed with `marker` (the
|
|
69
|
+
* marker itself is not counted against the budget). The cut is code-point
|
|
70
|
+
* safe, so a multi-unit emoji is never split in half.
|
|
71
|
+
* @param body - the raw style body.
|
|
72
|
+
* @param maxChars - budget in code points; at least 1.
|
|
73
|
+
* @param marker - text appended at the truncation point.
|
|
74
|
+
* @returns the body as it will be injected.
|
|
75
|
+
*/
|
|
76
|
+
export declare function truncateStyle(body: string, maxChars: number, marker: string): string;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=style-library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-library.d.ts","sourceRoot":"","sources":["../../src/style-library.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,gFAAgF;AAChF,eAAO,MAAM,aAAa,QAAuB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAItD;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,oEAAoE;AACpE,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAErC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAAE,EACzC,IAAI,EAAE,IAAI,GACT,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAclC;AA8OD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIpF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable domain vocabulary and type-table merges owned by this package.
|
|
3
|
+
*
|
|
4
|
+
* The selection domain is the single source of the per-session style choice;
|
|
5
|
+
* its record schema doubles as the durable validation boundary. The `style`
|
|
6
|
+
* projection key is declared here (its one home) and re-exported from the
|
|
7
|
+
* package root so consumers receive the `SessionProjectionMap` merge.
|
|
8
|
+
* @module dsh-output-styles/types
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionId } from '@deepseek-ai/dsh-session';
|
|
11
|
+
import { z as zod } from 'zod';
|
|
12
|
+
/** The reserved switch target that removes a session's selection. */
|
|
13
|
+
export declare const OFF = "off";
|
|
14
|
+
/**
|
|
15
|
+
* Provenance marker stored with every selection record. It states who wrote
|
|
16
|
+
* the record, so a session's style choice can be attributed to this plugin
|
|
17
|
+
* when the log is rebuilt or audited.
|
|
18
|
+
*/
|
|
19
|
+
export declare const STYLE_SOURCE: {
|
|
20
|
+
readonly kind: "plugin";
|
|
21
|
+
readonly plugin: "dsh-output-styles";
|
|
22
|
+
};
|
|
23
|
+
/** One durable per-session selection record. */
|
|
24
|
+
export declare const styleSelectionSchema: zod.ZodObject<{
|
|
25
|
+
style: zod.ZodString;
|
|
26
|
+
source: zod.ZodObject<{
|
|
27
|
+
kind: zod.ZodLiteral<"plugin">;
|
|
28
|
+
plugin: zod.ZodString;
|
|
29
|
+
}, zod.core.$strip>;
|
|
30
|
+
}, zod.core.$strip>;
|
|
31
|
+
/** Durable per-session selection record value. */
|
|
32
|
+
export interface StyleSelection extends zod.infer<typeof styleSelectionSchema> {
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The plugin's storage domain: one `selection` record per session, keyed by
|
|
36
|
+
* the session id. Versioned independently from the session log format.
|
|
37
|
+
*/
|
|
38
|
+
export declare const OUTPUT_STYLE_DOMAIN: {
|
|
39
|
+
name: string;
|
|
40
|
+
version: number;
|
|
41
|
+
tables: {
|
|
42
|
+
selection: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<SessionId, StyleSelection>;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** One option a client renders for the `style` projection. */
|
|
46
|
+
export interface StyleOption {
|
|
47
|
+
/** Switch target accepted by `/style`. */
|
|
48
|
+
value: string;
|
|
49
|
+
/** Human-readable style name; the style's own name when no label exists. */
|
|
50
|
+
name: string;
|
|
51
|
+
/** One user-facing sentence on what the style does. */
|
|
52
|
+
description: string;
|
|
53
|
+
/** Optional guidance on when the style is useful; shown in pickers and listings. */
|
|
54
|
+
whenToUse?: string | undefined;
|
|
55
|
+
}
|
|
56
|
+
/** Whole wire value of the `style` session projection. */
|
|
57
|
+
export interface StyleSelectionView {
|
|
58
|
+
/** Every switchable style, in library order. */
|
|
59
|
+
options: StyleOption[];
|
|
60
|
+
/** Current selection, or null when the session has none. */
|
|
61
|
+
currentValue: string | null;
|
|
62
|
+
}
|
|
63
|
+
/** Validates the `style` projection's wire payload before it leaves the host. */
|
|
64
|
+
export declare const styleSelectionViewSchema: zod.ZodObject<{
|
|
65
|
+
options: zod.ZodArray<zod.ZodObject<{
|
|
66
|
+
value: zod.ZodString;
|
|
67
|
+
name: zod.ZodString;
|
|
68
|
+
description: zod.ZodString;
|
|
69
|
+
whenToUse: zod.ZodOptional<zod.ZodString>;
|
|
70
|
+
}, zod.core.$strip>>;
|
|
71
|
+
currentValue: zod.ZodNullable<zod.ZodString>;
|
|
72
|
+
}, zod.core.$strip>;
|
|
73
|
+
declare module '@deepseek-ai/dsh-session-projection/types' {
|
|
74
|
+
interface SessionProjectionMap {
|
|
75
|
+
style: StyleSelectionView;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAA;AAG9B,qEAAqE;AACrE,eAAO,MAAM,GAAG,QAAQ,CAAA;AAExB;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;CAA2D,CAAA;AAEpF,gDAAgD;AAChD,eAAO,MAAM,oBAAoB;;;;;;mBAQ/B,CAAA;AAEF,kDAAkD;AAClD,MAAM,WAAW,cAAe,SAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC;CAAG;AAEjF;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;CAM9B,CAAA;AAEF,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAA;IACnB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,iFAAiF;AACjF,eAAO,MAAM,wBAAwB;;;;;;;;mBAQnC,CAAA;AAEF,OAAO,QAAQ,2CAA2C,CAAC;IACzD,UAAU,oBAAoB;QAC5B,KAAK,EAAE,kBAAkB,CAAA;KAC1B;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-output-styles",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Claude Code outputStyles-equivalent runtime output-style switching for DeepSeek Harness",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/PerryLink/dsh-output-styles.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/PerryLink/dsh-output-styles#readme",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\" && tsc -p tsconfig.json --noEmitOnError --pretty false && tsdown && tsdown -c tsdown.client.config.ts",
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"typecheck": "tsc -p tsconfig.json --noEmitOnError --pretty false && tsc -p tsconfig.vitest.json --pretty false",
|
|
19
|
+
"verify:self-contained": "node scripts/verify-self-contained.mjs",
|
|
20
|
+
"prepare": "node scripts/prepare.mjs"
|
|
21
|
+
},
|
|
22
|
+
"main": "lib/index.js",
|
|
23
|
+
"types": "lib/types/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./lib/types/index.d.ts",
|
|
27
|
+
"default": "./lib/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./invariant": {
|
|
30
|
+
"types": "./lib/types/invariant.d.ts",
|
|
31
|
+
"default": "./lib/invariant.js"
|
|
32
|
+
},
|
|
33
|
+
"./client": {
|
|
34
|
+
"types": "./lib/types/client/index.d.ts",
|
|
35
|
+
"default": "./lib/client.js"
|
|
36
|
+
},
|
|
37
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
38
|
+
"./package.json": "./package.json"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"lib/index.js",
|
|
42
|
+
"lib/invariant.js",
|
|
43
|
+
"lib/invariant-*.js",
|
|
44
|
+
"lib/client.js",
|
|
45
|
+
"lib/client-*.js",
|
|
46
|
+
"lib/types/**/*.d.ts",
|
|
47
|
+
"lib/types/**/*.d.ts.map",
|
|
48
|
+
"src",
|
|
49
|
+
"styles",
|
|
50
|
+
"cordis.patch.yml",
|
|
51
|
+
"LICENSE",
|
|
52
|
+
"README.md",
|
|
53
|
+
"README.zh.md",
|
|
54
|
+
"README.ja.md",
|
|
55
|
+
"README.ko.md",
|
|
56
|
+
"README.es.md",
|
|
57
|
+
"docs"
|
|
58
|
+
],
|
|
59
|
+
"keywords": [
|
|
60
|
+
"deepseek-harness",
|
|
61
|
+
"dsh",
|
|
62
|
+
"dsh-plugin",
|
|
63
|
+
"output-style",
|
|
64
|
+
"output-styles",
|
|
65
|
+
"claude-code"
|
|
66
|
+
],
|
|
67
|
+
"dsh": {
|
|
68
|
+
"bundle": {
|
|
69
|
+
"patch": "./cordis.patch.yml"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"@deepseek-ai/dsh-storage": "0.1.0-rc.6",
|
|
74
|
+
"@deepseek-ai/dsh-storage-domain": "0.1.0-rc.6",
|
|
75
|
+
"@deepseek-ai/dsh-storage-json": "0.1.0-rc.6",
|
|
76
|
+
"yaml": "^2.8.0",
|
|
77
|
+
"zod": "^4.4.3"
|
|
78
|
+
},
|
|
79
|
+
"peerDependencies": {
|
|
80
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
81
|
+
"@deepseek-ai/schemastery": "^3.18.1",
|
|
82
|
+
"@deepseek-ai/dsh-session": ">=0.1.0-rc.6 <0.2.0",
|
|
83
|
+
"@deepseek-ai/dsh-session-projection": ">=0.1.0-rc.6 <0.2.0",
|
|
84
|
+
"@deepseek-ai/dsh-storage-domain": ">=0.1.0-rc.6 <0.2.0",
|
|
85
|
+
"@deepseek-ai/dsh-settings": ">=0.1.0-rc.6 <0.2.0"
|
|
86
|
+
},
|
|
87
|
+
"peerDependenciesMeta": {
|
|
88
|
+
"@deepseek-ai/dsh-settings": {
|
|
89
|
+
"optional": true
|
|
90
|
+
},
|
|
91
|
+
"@deepseek-ai/dsh-api-remotes": {
|
|
92
|
+
"optional": true
|
|
93
|
+
},
|
|
94
|
+
"@deepseek-ai/dsh-client-runtime": {
|
|
95
|
+
"optional": true
|
|
96
|
+
},
|
|
97
|
+
"@deepseek-ai/dsh-client-ui-commands": {
|
|
98
|
+
"optional": true
|
|
99
|
+
},
|
|
100
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": {
|
|
101
|
+
"optional": true
|
|
102
|
+
},
|
|
103
|
+
"@deepseek-ai/dsh-client-locale": {
|
|
104
|
+
"optional": true
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"devDependencies": {
|
|
108
|
+
"@deepseek-ai/cordis": "4.0.1",
|
|
109
|
+
"@deepseek-ai/dsh-agent": "0.1.0-rc.6",
|
|
110
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.0-rc.6",
|
|
111
|
+
"@deepseek-ai/dsh-attachment": "0.1.0-rc.6",
|
|
112
|
+
"@deepseek-ai/dsh-brand": "0.1.0-rc.6",
|
|
113
|
+
"@deepseek-ai/dsh-client-locale": "0.1.0-rc.6",
|
|
114
|
+
"@deepseek-ai/dsh-client-runtime": "0.1.0-rc.6",
|
|
115
|
+
"@deepseek-ai/dsh-client-ui-commands": "0.1.0-rc.6",
|
|
116
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.0-rc.6",
|
|
117
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6",
|
|
118
|
+
"@deepseek-ai/dsh-commands": "0.1.0-rc.6",
|
|
119
|
+
"@deepseek-ai/dsh-llm": "0.1.0-rc.6",
|
|
120
|
+
"@deepseek-ai/dsh-scope": "0.1.0-rc.6",
|
|
121
|
+
"@deepseek-ai/dsh-session": "0.1.0-rc.6",
|
|
122
|
+
"@deepseek-ai/dsh-session-persistence": "0.1.0-rc.6",
|
|
123
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.1.0-rc.6",
|
|
124
|
+
"@deepseek-ai/dsh-session-projection": "0.1.0-rc.6",
|
|
125
|
+
"@deepseek-ai/dsh-settings": "0.1.0-rc.6",
|
|
126
|
+
"@deepseek-ai/dsh-storage": "0.1.0-rc.6",
|
|
127
|
+
"@deepseek-ai/dsh-storage-domain": "0.1.0-rc.6",
|
|
128
|
+
"@deepseek-ai/dsh-storage-json": "0.1.0-rc.6",
|
|
129
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
|
|
130
|
+
"@deepseek-ai/dsh-timeout": "0.1.0-rc.6",
|
|
131
|
+
"@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.6",
|
|
132
|
+
"@deepseek-ai/schemastery": "3.18.1",
|
|
133
|
+
"@types/node": "^22.20.0",
|
|
134
|
+
"tsdown": "^0.22.2",
|
|
135
|
+
"typescript": "^6.0.3",
|
|
136
|
+
"vitest": "^4.1.8"
|
|
137
|
+
}
|
|
138
|
+
}
|