@cristiancorreau/forge 2.13.0 → 2.14.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/CHANGELOG.md +7 -0
- package/assets/core/hooks/post-turn-check.js +129 -0
- package/assets/core/hooks/session-start.js +142 -0
- package/assets/manifest.json +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +3 -2
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +16 -25
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/panel.d.ts.map +1 -1
- package/dist/commands/panel.js +4 -20
- package/dist/commands/panel.js.map +1 -1
- package/dist/lib/bun.d.ts +28 -0
- package/dist/lib/bun.d.ts.map +1 -0
- package/dist/lib/bun.js +92 -0
- package/dist/lib/bun.js.map +1 -0
- package/dist/tui/dashboard.js +1 -1
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/ui/ascii.d.ts +38 -0
- package/dist/ui/ascii.d.ts.map +1 -0
- package/dist/ui/ascii.js +50 -0
- package/dist/ui/ascii.js.map +1 -0
- package/dist/ui/banner.d.ts +15 -4
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +22 -4
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/box.d.ts.map +1 -1
- package/dist/ui/box.js +6 -4
- package/dist/ui/box.js.map +1 -1
- package/dist/ui/header.d.ts.map +1 -1
- package/dist/ui/header.js +4 -3
- package/dist/ui/header.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/ui/banner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAOzC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAK/C,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,QAAsB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE,YAAiB,GAAG,SAAS,MAAM,EAAE,CAEtE"}
|
package/dist/ui/banner.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FORGE ASCII banner — shared by the static header (chalk/boxen) and the
|
|
3
|
-
* OpenTUI wizard/dashboard headers.
|
|
4
|
-
* ANSI), so it is safe to feed into OpenTUI Text content and to
|
|
5
|
-
* either chalk or OpenTUI styled-text helpers.
|
|
3
|
+
* OpenTUI wizard/dashboard headers. The default banner uses Unicode box-drawing
|
|
4
|
+
* block glyphs (no ANSI), so it is safe to feed into OpenTUI Text content and to
|
|
5
|
+
* colorize with either chalk or OpenTUI styled-text helpers.
|
|
6
|
+
*
|
|
7
|
+
* On legacy Windows consoles those block glyphs render as mojibake, so an
|
|
8
|
+
* ASCII-only fallback is provided and selected via `useAscii()`.
|
|
6
9
|
*/
|
|
10
|
+
import { useAscii } from './ascii.js';
|
|
7
11
|
export const FORGE_BANNER = [
|
|
8
12
|
'███████╗ ██████╗ ██████╗ ██████╗ ███████╗',
|
|
9
13
|
'██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝',
|
|
@@ -12,6 +16,20 @@ export const FORGE_BANNER = [
|
|
|
12
16
|
'██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗',
|
|
13
17
|
'╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝',
|
|
14
18
|
];
|
|
15
|
-
/**
|
|
19
|
+
/** Pure-ASCII fallback banner for legacy Windows consoles. */
|
|
20
|
+
export const FORGE_BANNER_ASCII = [
|
|
21
|
+
' ___ ___ ___ ___ ___ ',
|
|
22
|
+
'| __/ _ \\| _ \\/ __| __|',
|
|
23
|
+
"| _| (_) | / (_ | _| ",
|
|
24
|
+
'|_| \\___/|_|_\\\\___|___|',
|
|
25
|
+
];
|
|
26
|
+
/** Number of rows the (Unicode) banner occupies (used to size OpenTUI panels). */
|
|
16
27
|
export const FORGE_BANNER_HEIGHT = FORGE_BANNER.length;
|
|
28
|
+
/**
|
|
29
|
+
* The banner rows to render for the current (or injected) environment: the
|
|
30
|
+
* Unicode block banner normally, or the ASCII fallback when `useAscii()` is on.
|
|
31
|
+
*/
|
|
32
|
+
export function forgeBanner(opts = {}) {
|
|
33
|
+
return useAscii(opts) ? FORGE_BANNER_ASCII : FORGE_BANNER;
|
|
34
|
+
}
|
|
17
35
|
//# sourceMappingURL=banner.js.map
|
package/dist/ui/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;IAC5C,4CAA4C;CAC7C,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,yBAAyB;IACzB,2BAA2B;IAC3B,yBAAyB;IACzB,4BAA4B;CAC7B,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAqB,EAAE;IACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC5D,CAAC"}
|
package/dist/ui/box.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAGA,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1D"}
|
package/dist/ui/box.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { bold, dim } from './colors.js';
|
|
2
|
+
import { borderChars } from './ascii.js';
|
|
2
3
|
export function box(title, lines) {
|
|
4
|
+
const b = borderChars();
|
|
3
5
|
const width = Math.max(title.length, ...lines.map(l => l.length)) + 4;
|
|
4
|
-
const top =
|
|
5
|
-
const bottom =
|
|
6
|
-
const pad = (s) => '
|
|
6
|
+
const top = b.topLeft + b.horizontal.repeat(width) + b.topRight;
|
|
7
|
+
const bottom = b.bottomLeft + b.horizontal.repeat(width) + b.bottomRight;
|
|
8
|
+
const pad = (s) => b.vertical + ' ' + s.padEnd(width - 2) + ' ' + b.vertical;
|
|
7
9
|
return [
|
|
8
10
|
top,
|
|
9
11
|
pad(bold(title)),
|
|
10
|
-
pad(dim(
|
|
12
|
+
pad(dim(b.horizontal.repeat(title.length))),
|
|
11
13
|
...lines.map(pad),
|
|
12
14
|
bottom,
|
|
13
15
|
].join('\n');
|
package/dist/ui/box.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,KAAe;IAChD,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChE,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;IACzE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC;IACrF,OAAO;QACL,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,MAAM;KACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/ui/header.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,IAAI,IAAI,CAelC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAiBnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQlF"}
|
package/dist/ui/header.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import boxen from 'boxen';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { VERSION } from '../version.js';
|
|
4
|
-
import {
|
|
4
|
+
import { forgeBanner } from './banner.js';
|
|
5
|
+
import { boxenBorderStyle } from './ascii.js';
|
|
5
6
|
export function printHeader() {
|
|
6
|
-
const banner =
|
|
7
|
+
const banner = forgeBanner().map(l => chalk.cyan(l)).join('\n');
|
|
7
8
|
const content = banner + '\n' +
|
|
8
9
|
chalk.dim('Configure any project for AI agents') + ' ' + chalk.dim('v' + VERSION) + '\n' +
|
|
9
10
|
chalk.dim('Claude Code · OpenCode · Codex · Kiro');
|
|
10
11
|
const output = boxen(content, {
|
|
11
|
-
borderStyle: 'double',
|
|
12
|
+
borderStyle: boxenBorderStyle('double'),
|
|
12
13
|
borderColor: 'cyan',
|
|
13
14
|
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
14
15
|
margin: { top: 1, bottom: 1, left: 0, right: 0 },
|
package/dist/ui/header.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/ui/header.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cristiancorreau/forge",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.0",
|
|
4
4
|
"description": "Agentic development framework — multi-runtime support for Claude Code, OpenCode, Codex and Kiro",
|
|
5
5
|
"author": "Cristian Correa <cristian@socialweb.cl>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"build:all": "node scripts/build-assets.mjs && tsc",
|
|
29
29
|
"dev": "tsc --watch",
|
|
30
30
|
"prepublishOnly": "npm run build:all",
|
|
31
|
-
"test": "node --test test/commands.test.mjs test/assets.test.mjs test/hook-spec-gate.test.mjs test/claude-md-specialized.test.mjs test/wiki.test.mjs test/panel.test.mjs test/catalog-install.test.mjs"
|
|
31
|
+
"test": "node --test test/commands.test.mjs test/assets.test.mjs test/hook-spec-gate.test.mjs test/claude-md-specialized.test.mjs test/wiki.test.mjs test/panel.test.mjs test/catalog-install.test.mjs test/windows-compat.test.mjs"
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"dist",
|