@elyracode/coding-agent 0.7.12 → 0.7.14

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
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.13] - 2026-05-25
4
+
5
+ ### Changed
6
+ - Startup animation replaced with constellation design matching the favicon.svg — orange gradient with highlighted nodes
7
+ - `@elyracode/laravel` skill updated with `db-tools` integration guidance for combined model-vs-schema analysis
8
+ - `@elyracode/laravel` tools now register only in Laravel projects (no tool clutter in non-Laravel workspaces)
9
+
3
10
  ## [0.7.12] - 2026-05-24
4
11
 
5
12
  ### Added
@@ -1,7 +1,7 @@
1
1
  import type { Component, TUI } from "@elyracode/tui";
2
2
  /**
3
- * Animated startup component that reveals the Elyra logo line by line
4
- * with a gradient color effect, holds briefly, then calls onComplete.
3
+ * Animated startup component that reveals the Elyra constellation logo
4
+ * line by line with an orange gradient, holds briefly, then calls onComplete.
5
5
  */
6
6
  export declare class StartupAnimation implements Component {
7
7
  private ui;
@@ -1 +1 @@
1
- {"version":3,"file":"startup-animation.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAiBrD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IACjD,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,EAK3D;IAED,OAAO,CAAC,KAAK;IAiBb,IAAI,IAAI,IAAI,CAOX;IAED,UAAU,IAAI,IAAI,CAEjB;IAED,OAAO,CAAC,aAAa;IAOrB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B/B;CACD"}
1
+ {"version":3,"file":"startup-animation.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-animation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAoBrD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IACjD,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,EAK3D;IAED,OAAO,CAAC,KAAK;IAiBb,IAAI,IAAI,IAAI,CAOX;IAED,UAAU,IAAI,IAAI,CAEjB;IAED,OAAO,CAAC,aAAa;IAOrB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAmC/B;CACD"}
@@ -1,19 +1,22 @@
1
1
  import chalk from "chalk";
2
+ // ASCII representation of the Elyra favicon: a constellation of connected nodes
3
+ // with a bright star at the top (the north star / guiding light)
2
4
  const LOGO_LINES = [
3
- " ╭─────────────────────╮",
4
- " │ ███████╗██╗ ██╗ ",
5
- " ██╔════╝██║ ╚██╗ │",
6
- " █████╗ ██║ ██║ │",
7
- " │ ██╔══╝ ██║ ██║ │",
8
- " ███████╗███████╔╝ ",
9
- " │ ╚══════╝╚══════╝ │",
10
- " ╰─────────────────────╯",
5
+ " * ",
6
+ " /|\\ ",
7
+ " / | \\ ",
8
+ " / | \\ ",
9
+ " * | *",
10
+ " |\\ | /|",
11
+ " | \\ | / |",
12
+ " | \\|/ |",
13
+ " *---+---*",
11
14
  ];
12
- const FRAME_INTERVAL_MS = 40;
15
+ const FRAME_INTERVAL_MS = 45;
13
16
  const HOLD_MS = 600;
14
17
  /**
15
- * Animated startup component that reveals the Elyra logo line by line
16
- * with a gradient color effect, holds briefly, then calls onComplete.
18
+ * Animated startup component that reveals the Elyra constellation logo
19
+ * line by line with an orange gradient, holds briefly, then calls onComplete.
17
20
  */
18
21
  export class StartupAnimation {
19
22
  constructor(ui, version, onComplete) {
@@ -65,18 +68,25 @@ export class StartupAnimation {
65
68
  const visibleLines = LOGO_LINES.slice(0, this.currentLine);
66
69
  for (let i = 0; i < visibleLines.length; i++) {
67
70
  const line = visibleLines[i];
68
- // Gradient from sky to teal based on line position
71
+ // Orange gradient matching favicon: bright at top (star), deeper at bottom
69
72
  const t = visibleLines.length > 1 ? i / (visibleLines.length - 1) : 0;
70
- const r = Math.round(14 + t * (20 - 14));
71
- const g = Math.round(165 + t * (184 - 165));
72
- const b = Math.round(233 + t * (166 - 233));
73
- lines.push(chalk.rgb(r, g, b)(line));
73
+ const r = Math.round(251 + t * (249 - 251));
74
+ const g = Math.round(191 + t * (115 - 191));
75
+ const b = Math.round(36 + t * (22 - 36));
76
+ // Highlight nodes (*) brighter than lines
77
+ const colored = line.replace(/./g, (ch) => {
78
+ if (ch === "*" || ch === "+") {
79
+ return chalk.rgb(251, 146, 60).bold(ch);
80
+ }
81
+ return chalk.rgb(r, g, b)(ch);
82
+ });
83
+ lines.push(` ${colored}`);
74
84
  }
75
85
  if (this.phase === "hold") {
76
86
  lines.push("");
77
- const tagline = " A self-extensible AI coding agent";
87
+ const name = chalk.rgb(251, 146, 60).bold("elyra");
78
88
  const ver = chalk.dim(` v${this.version}`);
79
- lines.push(chalk.rgb(14, 165, 233)(tagline) + ver);
89
+ lines.push(` ${name}${ver}`);
80
90
  }
81
91
  lines.push("");
82
92
  return lines;
@@ -1 +1 @@
1
- {"version":3,"file":"startup-animation.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-animation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, TUI } from \"@elyracode/tui\";\nimport chalk from \"chalk\";\n\nconst LOGO_LINES = [\n\t\" ╭─────────────────────╮\",\n\t\" │ ███████╗██╗ ██╗ │\",\n\t\" ██╔════╝██║ ╚██╗ │\",\n\t\" █████╗ ██║ ██║ │\",\n\t\" │ ██╔══╝ ██║ ██║ │\",\n\t\" ███████╗███████╔╝ │\",\n\t\" ╚══════╝╚══════╝ │\",\n\t\" ╰─────────────────────╯\",\n];\n\nconst FRAME_INTERVAL_MS = 40;\nconst HOLD_MS = 600;\n\n/**\n * Animated startup component that reveals the Elyra logo line by line\n * with a gradient color effect, holds briefly, then calls onComplete.\n */\nexport class StartupAnimation implements Component {\n\tprivate ui: TUI;\n\tprivate currentLine = 0;\n\tprivate phase: \"reveal\" | \"hold\" | \"done\" = \"reveal\";\n\tprivate intervalId: ReturnType<typeof setInterval> | undefined;\n\tprivate holdTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\tprivate onComplete: () => void;\n\tprivate version: string;\n\n\tconstructor(ui: TUI, version: string, onComplete: () => void) {\n\t\tthis.ui = ui;\n\t\tthis.version = version;\n\t\tthis.onComplete = onComplete;\n\t\tthis.start();\n\t}\n\n\tprivate start(): void {\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tif (this.phase === \"reveal\") {\n\t\t\t\tthis.currentLine++;\n\t\t\t\tif (this.currentLine >= LOGO_LINES.length) {\n\t\t\t\t\tthis.phase = \"hold\";\n\t\t\t\t\tthis.clearInterval();\n\t\t\t\t\tthis.holdTimeoutId = setTimeout(() => {\n\t\t\t\t\t\tthis.phase = \"done\";\n\t\t\t\t\t\tthis.onComplete();\n\t\t\t\t\t}, HOLD_MS);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t}, FRAME_INTERVAL_MS);\n\t}\n\n\tstop(): void {\n\t\tthis.clearInterval();\n\t\tif (this.holdTimeoutId) {\n\t\t\tclearTimeout(this.holdTimeoutId);\n\t\t\tthis.holdTimeoutId = undefined;\n\t\t}\n\t\tthis.phase = \"done\";\n\t}\n\n\tinvalidate(): void {\n\t\t// No cache to clear\n\t}\n\n\tprivate clearInterval(): void {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t}\n\n\trender(_width: number): string[] {\n\t\tif (this.phase === \"done\") {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst lines: string[] = [\"\"];\n\n\t\tconst visibleLines = LOGO_LINES.slice(0, this.currentLine);\n\t\tfor (let i = 0; i < visibleLines.length; i++) {\n\t\t\tconst line = visibleLines[i];\n\t\t\t// Gradient from sky to teal based on line position\n\t\t\tconst t = visibleLines.length > 1 ? i / (visibleLines.length - 1) : 0;\n\t\t\tconst r = Math.round(14 + t * (20 - 14));\n\t\t\tconst g = Math.round(165 + t * (184 - 165));\n\t\t\tconst b = Math.round(233 + t * (166 - 233));\n\t\t\tlines.push(chalk.rgb(r, g, b)(line));\n\t\t}\n\n\t\tif (this.phase === \"hold\") {\n\t\t\tlines.push(\"\");\n\t\t\tconst tagline = \" A self-extensible AI coding agent\";\n\t\t\tconst ver = chalk.dim(` v${this.version}`);\n\t\t\tlines.push(chalk.rgb(14, 165, 233)(tagline) + ver);\n\t\t}\n\n\t\tlines.push(\"\");\n\t\treturn lines;\n\t}\n}\n"]}
1
+ {"version":3,"file":"startup-animation.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-animation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, TUI } from \"@elyracode/tui\";\nimport chalk from \"chalk\";\n\n// ASCII representation of the Elyra favicon: a constellation of connected nodes\n// with a bright star at the top (the north star / guiding light)\nconst LOGO_LINES = [\n\t\" * \",\n\t\" /|\\\\ \",\n\t\" / | \\\\ \",\n\t\" / | \\\\ \",\n\t\" * | *\",\n\t\" |\\\\ | /|\",\n\t\" | \\\\ | / |\",\n\t\" | \\\\|/ |\",\n\t\" *---+---*\",\n];\n\nconst FRAME_INTERVAL_MS = 45;\nconst HOLD_MS = 600;\n\n/**\n * Animated startup component that reveals the Elyra constellation logo\n * line by line with an orange gradient, holds briefly, then calls onComplete.\n */\nexport class StartupAnimation implements Component {\n\tprivate ui: TUI;\n\tprivate currentLine = 0;\n\tprivate phase: \"reveal\" | \"hold\" | \"done\" = \"reveal\";\n\tprivate intervalId: ReturnType<typeof setInterval> | undefined;\n\tprivate holdTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\tprivate onComplete: () => void;\n\tprivate version: string;\n\n\tconstructor(ui: TUI, version: string, onComplete: () => void) {\n\t\tthis.ui = ui;\n\t\tthis.version = version;\n\t\tthis.onComplete = onComplete;\n\t\tthis.start();\n\t}\n\n\tprivate start(): void {\n\t\tthis.intervalId = setInterval(() => {\n\t\t\tif (this.phase === \"reveal\") {\n\t\t\t\tthis.currentLine++;\n\t\t\t\tif (this.currentLine >= LOGO_LINES.length) {\n\t\t\t\t\tthis.phase = \"hold\";\n\t\t\t\t\tthis.clearInterval();\n\t\t\t\t\tthis.holdTimeoutId = setTimeout(() => {\n\t\t\t\t\t\tthis.phase = \"done\";\n\t\t\t\t\t\tthis.onComplete();\n\t\t\t\t\t}, HOLD_MS);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t}, FRAME_INTERVAL_MS);\n\t}\n\n\tstop(): void {\n\t\tthis.clearInterval();\n\t\tif (this.holdTimeoutId) {\n\t\t\tclearTimeout(this.holdTimeoutId);\n\t\t\tthis.holdTimeoutId = undefined;\n\t\t}\n\t\tthis.phase = \"done\";\n\t}\n\n\tinvalidate(): void {\n\t\t// No cache to clear\n\t}\n\n\tprivate clearInterval(): void {\n\t\tif (this.intervalId) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t}\n\n\trender(_width: number): string[] {\n\t\tif (this.phase === \"done\") {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst lines: string[] = [\"\"];\n\n\t\tconst visibleLines = LOGO_LINES.slice(0, this.currentLine);\n\t\tfor (let i = 0; i < visibleLines.length; i++) {\n\t\t\tconst line = visibleLines[i];\n\t\t\t// Orange gradient matching favicon: bright at top (star), deeper at bottom\n\t\t\tconst t = visibleLines.length > 1 ? i / (visibleLines.length - 1) : 0;\n\t\t\tconst r = Math.round(251 + t * (249 - 251));\n\t\t\tconst g = Math.round(191 + t * (115 - 191));\n\t\t\tconst b = Math.round(36 + t * (22 - 36));\n\n\t\t\t// Highlight nodes (*) brighter than lines\n\t\t\tconst colored = line.replace(/./g, (ch) => {\n\t\t\t\tif (ch === \"*\" || ch === \"+\") {\n\t\t\t\t\treturn chalk.rgb(251, 146, 60).bold(ch);\n\t\t\t\t}\n\t\t\t\treturn chalk.rgb(r, g, b)(ch);\n\t\t\t});\n\t\t\tlines.push(` ${colored}`);\n\t\t}\n\n\t\tif (this.phase === \"hold\") {\n\t\t\tlines.push(\"\");\n\t\t\tconst name = chalk.rgb(251, 146, 60).bold(\"elyra\");\n\t\t\tconst ver = chalk.dim(` v${this.version}`);\n\t\t\tlines.push(` ${name}${ver}`);\n\t\t}\n\n\t\tlines.push(\"\");\n\t\treturn lines;\n\t}\n}\n"]}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "elyra-extension-custom-provider",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "elyra-extension-custom-provider",
9
- "version": "0.7.12",
9
+ "version": "0.7.14",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elyra-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.7.12",
4
+ "version": "0.7.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elyra-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.7.12",
4
+ "version": "0.7.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "elyra-extension-sandbox",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "elyra-extension-sandbox",
9
- "version": "0.7.12",
9
+ "version": "0.7.14",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elyra-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.7.12",
4
+ "version": "0.7.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "elyra-extension-with-deps",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "elyra-extension-with-deps",
9
- "version": "0.7.12",
9
+ "version": "0.7.14",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elyra-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.7.12",
4
+ "version": "0.7.14",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elyracode/coding-agent",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "elyraConfig": {
@@ -38,9 +38,9 @@
38
38
  "prepublishOnly": "npm run clean && npm run build"
39
39
  },
40
40
  "dependencies": {
41
- "@elyracode/agent-core": "^0.7.12",
42
- "@elyracode/ai": "^0.7.12",
43
- "@elyracode/tui": "^0.7.12",
41
+ "@elyracode/agent-core": "^0.7.14",
42
+ "@elyracode/ai": "^0.7.14",
43
+ "@elyracode/tui": "^0.7.14",
44
44
  "@silvia-odwyer/photon-node": "^0.3.4",
45
45
  "chalk": "^5.5.0",
46
46
  "cli-highlight": "^2.1.11",