@sayknow-cli/coding-agent 0.5.14 → 0.5.15

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/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.5.15] - 2026-09-16
6
+
7
+ ### Fixed
8
+
9
+ - Native `UserPromptSubmit` UI-skill routing no longer lets a failed install-root lookup swallow the bundled skill directive. Candidate `SKILL.md` probes are best-effort, and hook tests isolate `home` so a runner's `~/.agents/skills` cannot pollute CI.
10
+
5
11
  ## [0.5.14] - 2026-09-16
6
12
 
7
13
  ### Added
@@ -7,6 +7,7 @@ export interface SkcNativeHookDispatchResult {
7
7
  type HookPayload = Record<string, unknown>;
8
8
  interface SkcNativeHookDispatchOptions {
9
9
  cwd?: string;
10
+ home?: string;
10
11
  stateDir?: string;
11
12
  effectiveSkillConfig?: EffectiveSkillConfigInput;
12
13
  configPaths?: string[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@sayknow-cli/coding-agent",
4
- "version": "0.5.14",
4
+ "version": "0.5.15",
5
5
  "description": "Sayknow-CLI CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://sayknow-cli.com",
7
7
  "author": "jaybeyond",
@@ -54,12 +54,12 @@
54
54
  "@agentclientprotocol/sdk": "1.3.0",
55
55
  "@babel/parser": "^7.29.3",
56
56
  "@mozilla/readability": "^0.6.0",
57
- "@sayknow-cli/stats": "0.5.14",
58
- "@sayknow-cli/agent-core": "0.5.14",
59
- "@sayknow-cli/ai": "0.5.14",
60
- "@sayknow-cli/natives": "0.5.14",
61
- "@sayknow-cli/tui": "0.5.14",
62
- "@sayknow-cli/utils": "0.5.14",
57
+ "@sayknow-cli/stats": "0.5.15",
58
+ "@sayknow-cli/agent-core": "0.5.15",
59
+ "@sayknow-cli/ai": "0.5.15",
60
+ "@sayknow-cli/natives": "0.5.15",
61
+ "@sayknow-cli/tui": "0.5.15",
62
+ "@sayknow-cli/utils": "0.5.15",
63
63
  "@puppeteer/browsers": "^2.13.0",
64
64
  "@types/turndown": "5.0.6",
65
65
  "@xterm/headless": "^6.0.0",
@@ -28,6 +28,7 @@ type HookPayload = Record<string, unknown>;
28
28
 
29
29
  interface SkcNativeHookDispatchOptions {
30
30
  cwd?: string;
31
+ home?: string;
31
32
  stateDir?: string;
32
33
  effectiveSkillConfig?: EffectiveSkillConfigInput;
33
34
  configPaths?: string[];
@@ -342,12 +343,18 @@ export async function dispatchSkcNativeSkillHook(
342
343
  };
343
344
  }
344
345
  // Frontend skills SKC routes to but does not vendor (license-restricted
345
- // collections). Resolved against the user's own install roots.
346
- const externalUiContext = await buildExternalUiSkillContext({
347
- cwd,
348
- home: os.homedir(),
349
- text: prompt,
350
- });
346
+ // collections). Resolved against the user's own install roots. A lookup
347
+ // failure must not swallow the bundled UI-skill directive.
348
+ let externalUiContext: string | null = null;
349
+ try {
350
+ externalUiContext = await buildExternalUiSkillContext({
351
+ cwd,
352
+ home: options.home ?? os.homedir(),
353
+ text: prompt,
354
+ });
355
+ } catch {
356
+ externalUiContext = null;
357
+ }
351
358
  const additionalContext = [
352
359
  skillState ? buildSkillActivationAdditionalContext(skillState, effectiveSkillConfig) : activeUltragoalContext,
353
360
  // Bundled frontend UI skills are advertised independently of workflow
@@ -264,7 +264,11 @@ function skillCandidatePaths(cwd: string, home: string, skill: string): string[]
264
264
 
265
265
  async function isSkillInstalled(cwd: string, home: string, skill: string): Promise<boolean> {
266
266
  for (const candidate of skillCandidatePaths(cwd, home, skill)) {
267
- if (await Bun.file(candidate).exists()) return true;
267
+ try {
268
+ if (await Bun.file(candidate).exists()) return true;
269
+ } catch {
270
+ // Permission or I/O on a candidate must not fail the prompt hook.
271
+ }
268
272
  }
269
273
  return false;
270
274
  }