@wenaixi/dsh-ponytail 5.0.0 → 5.1.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.
@@ -0,0 +1,165 @@
1
+ /**
2
+ * ponytail-settings — 可持久化配置的读写通道(方案 B 深模块)
3
+ *
4
+ * 迁移到 DSH 官方插件配置组合后,本插件的可持久化字段(defaultMode、disabledSkills)
5
+ * 声明为 Cordis Config 的 `.volatile()` 字段,由宿主的 settings 服务投影成官方表单,
6
+ * 写入落到 profile 补丁(`profiles/<name>/cordis.patch.yml`)。
7
+ * 通道本身有两个实现:
8
+ *
9
+ * - `createSettingsSink`:官方路径,经 `ctx.settings.mutate(ns, ops, revision)` 写入。
10
+ * 宿主负责 schema 校验、revision 冲突检测与 loader 的 volatile 热提交。
11
+ * - `createFileSink`:回退路径,直读直写 profile 内的 `ponytail/config.json`(无 profileContext 时退回 DSH 数据根)。
12
+ * 存在于无 profileContext 的组合(headless、CLI)——dsh-base 的 settings 行
13
+ * `disabled: !!js "!ctx.get('profileContext')"`,那些组合装配不上 settings 服务,
14
+ * 此时必须仍能改配置,不能因迁移而静默失效。
15
+ *
16
+ * 优先级链不在本模块:resolvePriority 仍是 env > profile 补丁 > full 的唯一真源。
17
+ */
18
+ import { DEFAULT_MODE, normalizeMode, readFullConfig, resetFullConfig, writeFullConfig } from './ponytail-config.js';
19
+ function namespaceOf(describeResult, namespace) {
20
+ const namespaces = (Array.isArray(describeResult)
21
+ ? describeResult
22
+ : describeResult?.namespaces ?? []);
23
+ const row = namespaces.find((item) => item?.ns === namespace);
24
+ const value = row?.value !== null && typeof row?.value === 'object'
25
+ ? row.value
26
+ : {};
27
+ return { revision: row?.revision ?? 0, value };
28
+ }
29
+ export function createSettingsSink(ctx, namespace = 'ponytail', options = {}) {
30
+ const provided = ctx.settings;
31
+ if (provided === undefined || provided === null || typeof provided.mutate !== 'function') {
32
+ throw new Error('settings service is not available');
33
+ }
34
+ const service = provided;
35
+ const logger = options.logger;
36
+ // 本地镜像:启动时读一次 describe,之后跟随自己的写入(乐观更新)。
37
+ let mirror = {};
38
+ let revision = 0;
39
+ try {
40
+ const row = namespaceOf(service.describe(), namespace);
41
+ mirror = row.value;
42
+ revision = row.revision;
43
+ }
44
+ catch {
45
+ mirror = {};
46
+ }
47
+ function write(ops) {
48
+ // 先更新本地镜像再发请求:调用方拿到的同步返回值与 UI 显示都以此为准。
49
+ mirror = applyOps(mirror, ops);
50
+ void service
51
+ .mutate(namespace, ops, revision)
52
+ .then((response) => {
53
+ const next = response?.value?.revision;
54
+ if (typeof next === 'number')
55
+ revision = next;
56
+ })
57
+ .catch((error) => {
58
+ // 写入被宿主拒绝(schema 校验、上层补丁覆盖、revision 冲突)时如实记录。
59
+ // 不抛给同步调用方:命令层没有 await 链可走,抛出只会变成未处理拒绝;
60
+ // 面板侧下一次 describe 会带回服务端真值并覆盖乐观值。
61
+ logger?.warn(`[ponytail] 配置写入被拒(下次读取会带回真实值):${String(error)}`);
62
+ });
63
+ }
64
+ return {
65
+ readDefaultMode() {
66
+ const raw = mirror['defaultMode'];
67
+ return typeof raw === 'string' ? (normalizeMode(raw) ?? DEFAULT_MODE) : DEFAULT_MODE;
68
+ },
69
+ readDisabled() {
70
+ const raw = mirror['disabledSkills'];
71
+ return Array.isArray(raw) ? raw.filter((item) => typeof item === 'string') : [];
72
+ },
73
+ writeDefaultMode(mode) {
74
+ const normalized = normalizeMode(mode);
75
+ if (normalized === null)
76
+ return null;
77
+ write([{ op: 'set', path: ['defaultMode'], value: normalized }]);
78
+ return normalized;
79
+ },
80
+ writeDisabled(skills) {
81
+ write([{ op: 'set', path: ['disabledSkills'], value: skills.filter((item) => typeof item === 'string') }]);
82
+ },
83
+ reset() {
84
+ write([
85
+ { op: 'unset', path: ['defaultMode'] },
86
+ { op: 'unset', path: ['disabledSkills'] },
87
+ ]);
88
+ },
89
+ };
90
+ }
91
+ function applyOps(value, ops) {
92
+ const next = { ...value };
93
+ for (const op of ops) {
94
+ if (op.op === 'unset')
95
+ delete next[op.path[0]];
96
+ else
97
+ next[op.path[0]] = op.value;
98
+ }
99
+ return next;
100
+ }
101
+ /**
102
+ * 文件回退通道:无 settings 服务的组合(headless / CLI)直接读写 profile 内 config.json。
103
+ * 与 settings 通道共享同一组语义:非法档不写、reset 清空两项。
104
+ */
105
+ export function createFileSink(profileDir) {
106
+ return {
107
+ readDefaultMode() {
108
+ return readFullConfig(profileDir).defaultMode;
109
+ },
110
+ writeDefaultMode(mode) {
111
+ const normalized = normalizeMode(mode);
112
+ if (normalized === null)
113
+ return null;
114
+ const written = writeFullConfig({ defaultMode: normalized }, profileDir);
115
+ return written === null ? null : written.defaultMode;
116
+ },
117
+ readDisabled() {
118
+ return readFullConfig(profileDir).disabledSkills;
119
+ },
120
+ writeDisabled(skills) {
121
+ writeFullConfig({ disabledSkills: skills }, profileDir);
122
+ },
123
+ reset() {
124
+ resetFullConfig(profileDir);
125
+ },
126
+ };
127
+ }
128
+ /**
129
+ * 一次性把 config.json 的两个字段导入 profile 补丁,并改名旧文件使其幂等。
130
+ *
131
+ * 判据:旧配置「有内容」且 profile 侧该命名空间「还没设过」。两者同时成立才导入。
132
+ * 导入失败只 warn,不阻断启动——老用户配置丢了可以手动再填,但插件不该起不来。
133
+ */
134
+ export async function migrateLegacyConfig(deps) {
135
+ const legacy = deps.readLegacy();
136
+ const hasContent = legacy.disabledSkills.length > 0 || legacy.defaultMode !== DEFAULT_MODE;
137
+ if (!hasContent)
138
+ return false;
139
+ let alreadySet = false;
140
+ try {
141
+ const described = deps.settings.describe();
142
+ const namespaces = (Array.isArray(described) ? described : described.namespaces ?? []);
143
+ alreadySet = namespaces.some((item) => item?.ns === deps.namespace);
144
+ }
145
+ catch (error) {
146
+ deps.logger.warn(`[ponytail] 读取 profile 命名空间失败,跳过旧配置导入:${String(error)}`);
147
+ return false;
148
+ }
149
+ if (alreadySet)
150
+ return false;
151
+ try {
152
+ await deps.settings.update(deps.namespace, {
153
+ defaultMode: legacy.defaultMode,
154
+ disabledSkills: legacy.disabledSkills,
155
+ });
156
+ }
157
+ catch (error) {
158
+ deps.logger.warn(`[ponytail] 旧配置导入 profile 补丁失败(可用 /ponytail default 重新设置):${String(error)}`);
159
+ return false;
160
+ }
161
+ await deps.renameLegacy();
162
+ deps.logger.info('[ponytail] 旧 config.json 已导入 profile 补丁并改名');
163
+ return true;
164
+ }
165
+ //# sourceMappingURL=ponytail-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ponytail-settings.js","sourceRoot":"","sources":["../src/ponytail-settings.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  * 实例必须是 apply() 内的闭包变量:DSH 常驻进程下 HMR 重载会重建 apply,
14
14
  * 模块级单例会让旧状态跨实例存活,与 flag 文件双写竞争。
15
15
  */
16
+ import { type PonytailConfigSink } from './ponytail-settings.js';
16
17
  /**
17
18
  * 状态持久化存储适配器契约(两个适配器证明切面价值:生产物理磁盘 + 测试内存隔离)
18
19
  */
@@ -24,6 +25,11 @@ export interface PonytailStorage {
24
25
  export interface PonytailStateOptions {
25
26
  /** 可选注入的存储适配器;缺省时使用内联的 DSH 配置目录磁盘实现(flag 存取已并入本模块) */
26
27
  storage?: PonytailStorage;
28
+ /**
29
+ * 可持久化配置(默认档 + 技能禁用列表)的读写通道。缺省走 profile 内 config.json 文件实现;
30
+ * 有 settings 服务的组合由 apply 注入 settings 实现(写入落 profile 补丁)。
31
+ */
32
+ sink?: PonytailConfigSink;
27
33
  }
28
34
  export interface PonytailState {
29
35
  /** 当前等级的内存视图;不触发任何文件读。null 表示关闭('off' 由 set 归一为 null) */
@@ -46,12 +52,10 @@ export interface PonytailState {
46
52
  setDefaultMode(mode: string): void;
47
53
  /** 恢复所有默认配置(等级切回 full,启用所有技能) */
48
54
  resetToDefaults(): void;
49
- /** 文件优先:重读 config.json 的 disabledSkills 重建内存 Set(外部手改文件后的收敛入口) */
55
+ /** 文件优先:重读 profile 内 config.json 的 disabledSkills 重建内存 Set(外部手改文件后的收敛入口) */
50
56
  reloadDisabledSkills(): void;
51
57
  }
52
- export declare function setMode(mode: string): void;
53
- export declare function clearMode(): void;
54
- export declare function readMode(): string | null;
58
+ export declare function createDiskStorage(profileDir?: string): PonytailStorage;
55
59
  export declare function createPonytailState(options?: PonytailStateOptions): PonytailState;
56
60
  /**
57
61
  * 纯函数守卫:「禁用主技能 ponytail → 关闭运行等级」业务规则的唯一实现。
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-state.d.ts","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,GAAG,IAAI,MAAM,GAAG,IAAI,CAAA;IACpB,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC9B,yDAAyD;IACzD,YAAY,IAAI,IAAI,CAAA;IACpB,uDAAuD;IACvD,UAAU,IAAI,IAAI,CAAA;IAClB,kBAAkB;IAClB,iBAAiB,IAAI,MAAM,EAAE,CAAA;IAC7B,wBAAwB;IACxB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzC,uBAAuB;IACvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACrD,qBAAqB;IACrB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,iCAAiC;IACjC,eAAe,IAAI,IAAI,CAAA;IACvB,kEAAkE;IAClE,oBAAoB,IAAI,IAAI,CAAA;CAC7B;AAOD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG1C;AACD,wBAAgB,SAAS,IAAI,IAAI,CAMhC;AACD,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAOxC;AAQD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAmFjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAExE"}
1
+ {"version":3,"file":"ponytail-state.d.ts","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,GAAG,IAAI,MAAM,GAAG,IAAI,CAAA;IACpB,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC9B,yDAAyD;IACzD,YAAY,IAAI,IAAI,CAAA;IACpB,uDAAuD;IACvD,UAAU,IAAI,IAAI,CAAA;IAClB,kBAAkB;IAClB,iBAAiB,IAAI,MAAM,EAAE,CAAA;IAC7B,wBAAwB;IACxB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzC,uBAAuB;IACvB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACrC,8BAA8B;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IACrD,qBAAqB;IACrB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,iCAAiC;IACjC,eAAe,IAAI,IAAI,CAAA;IACvB,4EAA4E;IAC5E,oBAAoB,IAAI,IAAI,CAAA;CAC7B;AASD,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CAsBtE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAkFjF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAExE"}
@@ -15,42 +15,44 @@
15
15
  */
16
16
  import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
17
17
  import { dirname, join } from 'node:path';
18
- import { normalizeMode, readFullConfig, writeFullConfig, resetFullConfig, getConfigDir } from './ponytail-config.js';
19
- // flag 物理存取(原 src/ponytail-runtime.ts,C6 内联):DSH 数据根下 .ponytail-active
18
+ import { normalizeMode, getConfigDir } from './ponytail-config.js';
19
+ import { createFileSink } from './ponytail-settings.js';
20
+ // flag 物理存取(原 src/ponytail-runtime.ts,C6 内联):profile 内 .ponytail-active
21
+ //
22
+ // profileDir 与 config.json 同维度:不带它时 flag 落在 $DSH_HOME/ponytail 下,被所有实例共享,
23
+ // 多实例并存时 renderPromptSection 的 syncFromFile(文件优先)会把另一个实例写的档位当成本实例的
24
+ // 生效档。createDiskStorage(profileDir) 由 apply() 传入 profileContext.dir。
20
25
  const STATE_FILE = '.ponytail-active';
21
- function statePath() {
22
- return join(getConfigDir(), STATE_FILE);
23
- }
24
- export function setMode(mode) {
25
- mkdirSync(dirname(statePath()), { recursive: true });
26
- writeFileSync(statePath(), mode, 'utf8');
27
- }
28
- export function clearMode() {
29
- try {
30
- unlinkSync(statePath());
31
- }
32
- catch {
33
- // ignore
34
- }
35
- }
36
- export function readMode() {
37
- try {
38
- const v = readFileSync(statePath(), 'utf8').trim();
39
- return v || null;
40
- }
41
- catch {
42
- return null;
43
- }
26
+ export function createDiskStorage(profileDir) {
27
+ const statePath = () => join(getConfigDir(profileDir), STATE_FILE);
28
+ return {
29
+ read: () => {
30
+ try {
31
+ return readFileSync(statePath(), 'utf8').trim() || null;
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ },
37
+ write: (mode) => {
38
+ mkdirSync(dirname(statePath()), { recursive: true });
39
+ writeFileSync(statePath(), mode, 'utf8');
40
+ },
41
+ clear: () => {
42
+ try {
43
+ unlinkSync(statePath());
44
+ }
45
+ catch {
46
+ // ignore
47
+ }
48
+ },
49
+ };
44
50
  }
45
- const defaultDiskStorage = {
46
- read: () => readMode(),
47
- write: (mode) => setMode(mode),
48
- clear: () => clearMode(),
49
- };
50
51
  export function createPonytailState(options) {
51
- const storage = options?.storage ?? defaultDiskStorage;
52
+ const storage = options?.storage ?? createDiskStorage();
52
53
  let current = null;
53
- let disabledSkills = new Set(readFullConfig().disabledSkills);
54
+ const sink = options?.sink ?? createFileSink();
55
+ let disabledSkills = new Set(sink.readDisabled());
54
56
  return {
55
57
  get: () => current,
56
58
  getDisabledSkills() {
@@ -58,7 +60,7 @@ export function createPonytailState(options) {
58
60
  },
59
61
  setDisabledSkills(skills) {
60
62
  disabledSkills = new Set(skills);
61
- writeFullConfig({ disabledSkills: Array.from(disabledSkills) });
63
+ sink.writeDisabled(Array.from(disabledSkills));
62
64
  },
63
65
  isSkillEnabled(name) {
64
66
  return !disabledSkills.has(name);
@@ -71,23 +73,22 @@ export function createPonytailState(options) {
71
73
  else {
72
74
  disabledSkills.add(name);
73
75
  }
74
- writeFullConfig({ disabledSkills: Array.from(disabledSkills) });
76
+ sink.writeDisabled(Array.from(disabledSkills));
75
77
  return !disabledSkills.has(name);
76
78
  },
77
79
  setDefaultMode(mode) {
78
80
  const nm = normalizeMode(mode);
79
- if (nm) {
80
- writeFullConfig({ defaultMode: nm });
81
- }
81
+ if (nm)
82
+ sink.writeDefaultMode(nm);
82
83
  },
83
84
  resetToDefaults() {
84
- resetFullConfig();
85
+ sink.reset();
85
86
  disabledSkills.clear();
86
87
  current = 'full';
87
88
  storage.write('full');
88
89
  },
89
90
  reloadDisabledSkills() {
90
- disabledSkills = new Set(readFullConfig().disabledSkills);
91
+ disabledSkills = new Set(sink.readDisabled());
91
92
  },
92
93
  syncToFile() {
93
94
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-state.js","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-state.js","sourceRoot":"","sources":["../src/ponytail-state.ts"],"names":[],"mappings":"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"}
package/lib/ponytail.d.ts CHANGED
@@ -11,14 +11,34 @@ import type { Context } from '@deepseek-ai/cordis';
11
11
  import Schema from '@deepseek-ai/schemastery';
12
12
  import { type PonytailConfig } from './ponytail-config.js';
13
13
  export type Config = PonytailConfig;
14
- export declare const Config: Schema<Config>;
14
+ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
15
+ providerName: Schema<string, string, "defined">;
16
+ skillDir: Schema<string, string, "plain">;
17
+ defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
18
+ disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
19
+ }>>, Schemastery.ObjectT<NoInfer<{
20
+ providerName: Schema<string, string, "defined">;
21
+ skillDir: Schema<string, string, "plain">;
22
+ defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
23
+ disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
24
+ }>>, "plain">;
15
25
  export declare const name = "ponytail";
16
- export declare const inject: readonly ["skills", "systemPrompt", "webServer"];
26
+ export declare const inject: readonly ["skills", "systemPrompt"];
17
27
  export declare function apply(ctx: Context, config?: Config): void;
18
28
  declare const _default: {
19
29
  name: string;
20
- inject: readonly ["skills", "systemPrompt", "webServer"];
21
- Config: Schema<PonytailConfig>;
30
+ inject: readonly ["skills", "systemPrompt"];
31
+ Config: Schema<Schemastery.ObjectS<NoInfer<{
32
+ providerName: Schema<string, string, "defined">;
33
+ skillDir: Schema<string, string, "plain">;
34
+ defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
35
+ disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
36
+ }>>, Schemastery.ObjectT<NoInfer<{
37
+ providerName: Schema<string, string, "defined">;
38
+ skillDir: Schema<string, string, "plain">;
39
+ defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
40
+ disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
41
+ }>>, "plain">;
22
42
  apply: typeof apply;
23
43
  };
24
44
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail.d.ts","sourceRoot":"","sources":["../src/ponytail.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAY7B,MAAM,MAAM,MAAM,GAAG,cAAc,CAAA;AAEnC,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAOhC,CAAA;AAMF,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B,eAAO,MAAM,MAAM,kDAAmD,CAAA;AAmBtE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAqB,GAAG,IAAI,CAoPvE;;;;;;;AAED,wBAA8C"}
1
+ {"version":3,"file":"ponytail.d.ts","sourceRoot":"","sources":["../src/ponytail.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAkB7B,MAAM,MAAM,MAAM,GAAG,cAAc,CAAA;AAInC,eAAO,MAAM,MAAM;;;;;;;;;;aAgBjB,CAAA;AAMF,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B,eAAO,MAAM,MAAM,qCAAsC,CAAA;AA0DzD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAqB,GAAG,IAAI,CA+QvE;;;;;;;;;;;;;;;;;AAED,wBAA8C"}