clikit-plugin 0.2.3 → 0.2.5

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/dist/cli.js CHANGED
@@ -61,18 +61,6 @@ function parseConfig(configPath) {
61
61
  return { config: {}, raw, parseError: String(err) };
62
62
  }
63
63
  }
64
- function backupConfig(configPath) {
65
- try {
66
- if (!fs.existsSync(configPath)) {
67
- return null;
68
- }
69
- const backupPath = `${configPath}.backup-${Date.now()}`;
70
- fs.copyFileSync(configPath, backupPath);
71
- return backupPath;
72
- } catch {
73
- return null;
74
- }
75
- }
76
64
  function writeConfig(configPath, config) {
77
65
  ensureConfigDir();
78
66
  const tmpPath = `${configPath}.tmp`;
@@ -95,16 +83,11 @@ async function install() {
95
83
  }
96
84
  const configPath = getConfigPath();
97
85
  try {
98
- const backupPath = backupConfig(configPath);
99
- if (backupPath) {
100
- console.log(` Backup created: ${backupPath}`);
101
- }
102
86
  const result = parseConfig(configPath);
103
87
  if (result.parseError && result.raw.trim()) {
104
88
  console.error(`\u2717 Config file has syntax errors and cannot be safely modified.`);
105
89
  console.error(` Error: ${result.parseError}`);
106
- console.error(` Please fix the config file manually or restore from backup.`);
107
- console.error(` Backup: ${backupPath}`);
90
+ console.error(` Please fix the config file manually.`);
108
91
  return 1;
109
92
  }
110
93
  const config = result.config;
package/dist/config.d.ts CHANGED
@@ -111,7 +111,7 @@ export interface CliKitConfig {
111
111
  hooks?: HooksConfig;
112
112
  }
113
113
  declare function getUserConfigDir(): string;
114
- export declare function loadCliKitConfig(projectDirectory: string): CliKitConfig;
114
+ export declare function loadCliKitConfig(projectDirectory: unknown): CliKitConfig;
115
115
  export declare function filterAgents(agents: Record<string, AgentConfig>, config: CliKitConfig): Record<string, AgentConfig>;
116
116
  export declare function filterCommands(commands: Record<string, CommandConfig>, config: CliKitConfig): Record<string, CommandConfig>;
117
117
  export { getUserConfigDir };
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ type FormatterEntry = {
24
24
  };
25
25
  export declare function detectFormatter(projectDir: string): FormatterEntry | undefined;
26
26
  export declare function shouldFormat(filePath: string, extensions?: string[]): boolean;
27
- export declare function runFormatter(filePath: string, projectDir: string, formatterOverride?: string): FormatResult;
27
+ export declare function runFormatter(filePath: string, projectDir: unknown, formatterOverride?: string): FormatResult;
28
28
  export declare function formatAutoFormatLog(result: FormatResult): string;
29
29
  export {};
30
30
  //# sourceMappingURL=auto-format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-format.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC,CAAC;AAsBF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CA2B9E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAI7E;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,MAAM,GACzB,YAAY,CAmCd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKhE"}
1
+ {"version":3,"file":"auto-format.d.ts","sourceRoot":"","sources":["../../src/hooks/auto-format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC,CAAC;AAsBF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CA2B9E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAI7E;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,iBAAiB,CAAC,EAAE,MAAM,GACzB,YAAY,CAoCd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKhE"}
@@ -47,14 +47,14 @@ export interface CompactionPayload {
47
47
  * - .reservations/ for active file locks
48
48
  * - `bd ls` command for current task status (if bd CLI available)
49
49
  */
50
- export declare function readBeadsState(projectDir: string): BeadsState | undefined;
50
+ export declare function readBeadsState(projectDir: unknown): BeadsState | undefined;
51
51
  /**
52
52
  * Read memory references from .opencode/memory/ subdirectories.
53
53
  * Scans for .md files in subdirs: specs/, plans/, research/, reviews/, handoffs/, beads/
54
54
  * Extracts title from first heading or filename.
55
55
  */
56
- export declare function readMemoryRefs(projectDir: string, limit?: number): MemoryRef[];
56
+ export declare function readMemoryRefs(projectDir: unknown, limit?: number): MemoryRef[];
57
57
  export declare function buildCompactionBlock(payload: CompactionPayload, maxChars?: number): string;
58
- export declare function collectCompactionPayload(projectDir: string, config?: CompactionConfig): CompactionPayload;
58
+ export declare function collectCompactionPayload(projectDir: unknown, config?: CompactionConfig): CompactionPayload;
59
59
  export declare function formatCompactionLog(payload: CompactionPayload): string;
60
60
  //# sourceMappingURL=compaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAuFzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA2DlF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,CA4ChG;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,gBAAgB,GACxB,iBAAiB,CAYnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAMtE"}
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CA0F1E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA8DnF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM,CA4ChG;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,iBAAiB,CAgBnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAMtE"}
@@ -37,7 +37,7 @@ export interface PackageInfo {
37
37
  export declare function getGitInfo(cwd: string): GitInfo | undefined;
38
38
  export declare function getPackageInfo(cwd: string): PackageInfo | undefined;
39
39
  export declare function getTopLevelStructure(cwd: string, maxDepth?: number): string[];
40
- export declare function collectEnvInfo(cwd: string, config?: EnvContextConfig): EnvInfo;
40
+ export declare function collectEnvInfo(cwd: unknown, config?: EnvContextConfig): EnvInfo;
41
41
  export declare function buildEnvBlock(info: EnvInfo): string;
42
42
  export declare function formatEnvSummary(info: EnvInfo): string;
43
43
  //# sourceMappingURL=env-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-context.d.ts","sourceRoot":"","sources":["../../src/hooks/env-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAc3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAyCnE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE,CA8BhF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAoB9E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmCnD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMtD"}
1
+ {"version":3,"file":"env-context.d.ts","sourceRoot":"","sources":["../../src/hooks/env-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAc3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAyCnE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE,CA8BhF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAqB/E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmCnD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMtD"}
@@ -14,6 +14,6 @@ export interface TodoCheckResult {
14
14
  incomplete: TodoItem[];
15
15
  inProgress: TodoItem[];
16
16
  }
17
- export declare function checkTodoCompletion(todos: TodoItem[]): TodoCheckResult;
17
+ export declare function checkTodoCompletion(todos: unknown): TodoCheckResult;
18
18
  export declare function formatIncompleteWarning(result: TodoCheckResult, sessionId?: string): string;
19
19
  //# sourceMappingURL=todo-enforcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"todo-enforcer.d.ts","sourceRoot":"","sources":["../../src/hooks/todo-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,eAAe,CAStE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAuBR"}
1
+ {"version":3,"file":"todo-enforcer.d.ts","sourceRoot":"","sources":["../../src/hooks/todo-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAYnE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAuBR"}
@@ -26,6 +26,6 @@ export interface TypeCheckResult {
26
26
  export declare function isTypeScriptFile(filePath: string): boolean;
27
27
  export declare function findTsConfig(projectDir: string, override?: string): string | undefined;
28
28
  export declare function hasTscInstalled(projectDir: string): boolean;
29
- export declare function runTypeCheck(filePath: string, projectDir: string, config?: TypeCheckConfig): TypeCheckResult;
29
+ export declare function runTypeCheck(filePath: string, projectDir: unknown, config?: TypeCheckConfig): TypeCheckResult;
30
30
  export declare function formatTypeCheckWarning(result: TypeCheckResult): string;
31
31
  //# sourceMappingURL=typecheck-gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typecheck-gate.d.ts","sourceRoot":"","sources":["../../src/hooks/typecheck-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAetF;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAW3D;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,eAAe,GACvB,eAAe,CA+BjB;AAqCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAetE"}
1
+ {"version":3,"file":"typecheck-gate.d.ts","sourceRoot":"","sources":["../../src/hooks/typecheck-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAetF;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAW3D;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,eAAe,CAgCjB;AAqCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAetE"}
package/dist/index.js CHANGED
@@ -3708,8 +3708,9 @@ function deepMerge(base, override) {
3708
3708
  return result;
3709
3709
  }
3710
3710
  function loadCliKitConfig(projectDirectory) {
3711
+ const safeDir = typeof projectDirectory === "string" && projectDirectory ? projectDirectory : process.cwd();
3711
3712
  const userConfigPath = path3.join(getUserConfigDir(), "opencode", "clikit.config.json");
3712
- const projectConfigPath = path3.join(projectDirectory, ".opencode", "clikit.config.json");
3713
+ const projectConfigPath = path3.join(safeDir, ".opencode", "clikit.config.json");
3713
3714
  let config = { ...DEFAULT_CONFIG };
3714
3715
  const userConfig = loadJsonFile(userConfigPath);
3715
3716
  if (userConfig) {
@@ -3761,6 +3762,9 @@ function filterCommands(commands, config) {
3761
3762
 
3762
3763
  // src/hooks/todo-enforcer.ts
3763
3764
  function checkTodoCompletion(todos) {
3765
+ if (!Array.isArray(todos)) {
3766
+ return { complete: true, incomplete: [], inProgress: [] };
3767
+ }
3764
3768
  const incomplete = todos.filter((t) => t.status === "todo");
3765
3769
  const inProgress = todos.filter((t) => t.status === "in-progress");
3766
3770
  return {
@@ -4147,19 +4151,20 @@ function getTopLevelStructure(cwd, maxDepth = 2) {
4147
4151
  return entries;
4148
4152
  }
4149
4153
  function collectEnvInfo(cwd, config) {
4154
+ const safeCwd = typeof cwd === "string" && cwd ? cwd : process.cwd();
4150
4155
  const info = {
4151
4156
  platform: process.platform,
4152
4157
  nodeVersion: process.version,
4153
- cwd
4158
+ cwd: safeCwd
4154
4159
  };
4155
4160
  if (config?.include_git !== false) {
4156
- info.git = getGitInfo(cwd);
4161
+ info.git = getGitInfo(safeCwd);
4157
4162
  }
4158
4163
  if (config?.include_package !== false) {
4159
- info.package = getPackageInfo(cwd);
4164
+ info.package = getPackageInfo(safeCwd);
4160
4165
  }
4161
4166
  if (config?.include_structure !== false) {
4162
- info.structure = getTopLevelStructure(cwd, config?.max_depth ?? 2);
4167
+ info.structure = getTopLevelStructure(safeCwd, config?.max_depth ?? 2);
4163
4168
  }
4164
4169
  return info;
4165
4170
  }
@@ -4263,7 +4268,8 @@ function shouldFormat(filePath, extensions) {
4263
4268
  return allowedExts.includes(ext);
4264
4269
  }
4265
4270
  function runFormatter(filePath, projectDir, formatterOverride) {
4266
- const formatter = formatterOverride ? FORMATTERS.find((f) => f.name === formatterOverride) : detectFormatter(projectDir);
4271
+ const safeDir = typeof projectDir === "string" && projectDir ? projectDir : process.cwd();
4272
+ const formatter = formatterOverride ? FORMATTERS.find((f) => f.name === formatterOverride) : detectFormatter(safeDir);
4267
4273
  if (!formatter) {
4268
4274
  return {
4269
4275
  formatted: false,
@@ -4275,7 +4281,7 @@ function runFormatter(filePath, projectDir, formatterOverride) {
4275
4281
  try {
4276
4282
  const cmd = formatter.command(filePath);
4277
4283
  execSync2(cmd, {
4278
- cwd: projectDir,
4284
+ cwd: safeDir,
4279
4285
  timeout: 1e4,
4280
4286
  stdio: ["pipe", "pipe", "pipe"]
4281
4287
  });
@@ -4322,14 +4328,15 @@ function findTsConfig(projectDir, override) {
4322
4328
  return;
4323
4329
  }
4324
4330
  function runTypeCheck(filePath, projectDir, config) {
4325
- const tsConfig = findTsConfig(projectDir, config?.tsconfig);
4331
+ const safeDir = typeof projectDir === "string" && projectDir ? projectDir : process.cwd();
4332
+ const tsConfig = findTsConfig(safeDir, config?.tsconfig);
4326
4333
  if (!tsConfig) {
4327
4334
  return { clean: true, errors: [], checkedFile: filePath };
4328
4335
  }
4329
4336
  try {
4330
4337
  const tscCmd = `npx tsc --noEmit --pretty false -p "${tsConfig}"`;
4331
4338
  execSync3(tscCmd, {
4332
- cwd: projectDir,
4339
+ cwd: safeDir,
4333
4340
  timeout: 30000,
4334
4341
  stdio: ["pipe", "pipe", "pipe"],
4335
4342
  encoding: "utf-8"
@@ -4564,6 +4571,9 @@ import * as fs7 from "fs";
4564
4571
  import * as path7 from "path";
4565
4572
  import { execSync as execSync5 } from "child_process";
4566
4573
  function readBeadsState(projectDir) {
4574
+ if (typeof projectDir !== "string" || !projectDir) {
4575
+ return;
4576
+ }
4567
4577
  const beadsDir = path7.join(projectDir, ".beads");
4568
4578
  if (!fs7.existsSync(beadsDir))
4569
4579
  return;
@@ -4634,6 +4644,9 @@ function readBeadsState(projectDir) {
4634
4644
  return;
4635
4645
  }
4636
4646
  function readMemoryRefs(projectDir, limit = 10) {
4647
+ if (typeof projectDir !== "string" || !projectDir) {
4648
+ return [];
4649
+ }
4637
4650
  const memoryDir = path7.join(projectDir, ".opencode", "memory");
4638
4651
  if (!fs7.existsSync(memoryDir))
4639
4652
  return [];
@@ -4735,6 +4748,9 @@ Recent Memory References:`);
4735
4748
  }
4736
4749
  function collectCompactionPayload(projectDir, config) {
4737
4750
  const payload = {};
4751
+ if (typeof projectDir !== "string" || !projectDir) {
4752
+ return payload;
4753
+ }
4738
4754
  if (config?.include_beads_state !== false) {
4739
4755
  payload.beads = readBeadsState(projectDir);
4740
4756
  }
@@ -5588,7 +5604,7 @@ var CliKitPlugin = async (ctx) => {
5588
5604
  const todoConfig = pluginConfig.hooks?.todo_enforcer;
5589
5605
  if (todoConfig?.enabled !== false) {
5590
5606
  const todos = props?.todos;
5591
- if (todos && todos.length > 0) {
5607
+ if (Array.isArray(todos) && todos.length > 0) {
5592
5608
  const result = checkTodoCompletion(todos);
5593
5609
  if (!result.complete && todoConfig?.warn_on_incomplete !== false) {
5594
5610
  console.warn(formatIncompleteWarning(result, sessionID));
@@ -0,0 +1,80 @@
1
+ ---
2
+ date: 2026-02-15
3
+ phase: implementing
4
+ branch: main
5
+ ---
6
+
7
+ # Handoff: CliKit Runtime Bug Fixes
8
+
9
+ ---
10
+
11
+ ## Status Summary
12
+
13
+ CliKit plugin v0.2.3 published with installer merge fix and type guards in hooks. **NEW ISSUES IDENTIFIED**:
14
+ 1. Backup creation is now unnecessary since merge works correctly - should be removed
15
+ 2. Runtime error `todos.filter is not a function` when OpenCode starts
16
+
17
+ ---
18
+
19
+ ## Task Status
20
+
21
+ ### ✅ Completed
22
+ - [x] Fix installer to MERGE with existing opencode.json (v0.2.3)
23
+ - [x] Add defensive type checks to hooks (truncator, security-check, compaction)
24
+ - [x] Publish v0.2.1, v0.2.2, v0.2.3 to npm
25
+
26
+ ### 🔄 In Progress
27
+ - [ ] Remove backup creation from cli.ts
28
+ - [ ] Fix `todos.filter is not a function` runtime error
29
+
30
+ ### 📋 Not Started
31
+ - [ ] Publish v0.2.4
32
+
33
+ ---
34
+
35
+ ## Files Modified
36
+
37
+ | File | Status | Notes |
38
+ |------|--------|-------|
39
+ | `.opencode/src/cli.ts` | Needs Fix | Remove backup logic |
40
+ | `.opencode/src/index.ts` | Needs Fix | Add Array.isArray check |
41
+ | `.opencode/src/hooks/todo-enforcer.ts` | Needs Fix | Add array guard |
42
+
43
+ ---
44
+
45
+ ## Git State
46
+
47
+ - **Branch:** `main`
48
+ - **Last commit:** `31b200c` - Update README with simplified installation
49
+ - **Uncommitted changes:** Yes (8 modified files)
50
+
51
+ ---
52
+
53
+ ## Next Steps
54
+
55
+ 1. [ ] Remove backup logic from cli.ts (delete `backupConfig`, `cleanupOldBackups` functions)
56
+ 2. [ ] Fix `todos.filter` error in `index.ts:172` and `todo-enforcer.ts:20`
57
+ 3. [ ] Run typecheck
58
+ 4. [ ] Publish v0.2.4
59
+
60
+ ---
61
+
62
+ ## Root Cause: `todos.filter` Bug
63
+
64
+ ```typescript
65
+ // Current (broken) - index.ts:166-172
66
+ const todos = props?.todos as Array<{...}> | undefined;
67
+ if (todos && todos.length > 0) { // Objects with .length pass this!
68
+ checkTodoCompletion(todos); // But .filter fails
69
+ }
70
+
71
+ // Fix
72
+ if (Array.isArray(todos) && todos.length > 0) {
73
+ checkTodoCompletion(todos);
74
+ }
75
+ ```
76
+
77
+ **Key files:**
78
+ - `.opencode/src/cli.ts:78-107` — Backup functions to delete
79
+ - `.opencode/src/index.ts:165-180` — Todo handling to fix
80
+ - `.opencode/src/hooks/todo-enforcer.ts:20` — Add array guard
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clikit-plugin",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "OpenCode plugin with 10 agents, 19 commands, 48 skills, 14 hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",