@trackunit/iris-app 2.2.24 → 2.2.26-alpha-288640a1f26.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 +4 -0
- package/package.json +8 -8
- package/src/generators/ai-agent-sync/README.md +1 -1
- package/src/generators/ai-agent-sync/generator.js +5 -7
- package/src/generators/create/generator.js +7 -7
- package/src/generators/extend/dependencies.js +2 -2
- package/src/generators/extend/generator.js +6 -2
- package/src/generators/preset/files/.agents/skills/browser-testing/SKILL.md +2 -1
- package/src/generators/preset/files/{.cursor/mcp.json → .mcp.json} +3 -0
- package/src/generators/preset/root-files/CLAUDE.md +2 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/iris-app",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.26-alpha-288640a1f26.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"generators": "./generators.json",
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"ts-morph": "^20.0.0",
|
|
19
19
|
"@phenomnomnominal/tsquery": "^6.1.3",
|
|
20
20
|
"typescript": "6.0.2",
|
|
21
|
-
"@nx/js": "
|
|
22
|
-
"@nx/eslint": "
|
|
23
|
-
"@nx/react": "
|
|
21
|
+
"@nx/js": "23.1.0",
|
|
22
|
+
"@nx/eslint": "23.1.0",
|
|
23
|
+
"@nx/react": "23.1.0",
|
|
24
24
|
"@npmcli/arborist": "^9.1.9",
|
|
25
25
|
"win-ca": "^3.5.1",
|
|
26
|
-
"@trackunit/shared-utils": "1.15.
|
|
27
|
-
"@trackunit/iris-app-api": "2.1.
|
|
26
|
+
"@trackunit/shared-utils": "1.15.86-alpha-288640a1f26.0",
|
|
27
|
+
"@trackunit/iris-app-api": "2.1.24-alpha-288640a1f26.0",
|
|
28
28
|
"tslib": "^2.6.2",
|
|
29
29
|
"@clack/prompts": "^1.0.0",
|
|
30
30
|
"@npm/types": "^1.0.2",
|
|
31
|
-
"@nx/devkit": "
|
|
32
|
-
"nx": "
|
|
31
|
+
"@nx/devkit": "23.1.0",
|
|
32
|
+
"nx": "23.1.0"
|
|
33
33
|
},
|
|
34
34
|
"migrations": "./migrations.json",
|
|
35
35
|
"types": "./src/index.d.ts",
|
|
@@ -11,7 +11,7 @@ nx g @trackunit/iris-app:ai-agent-sync
|
|
|
11
11
|
## What it syncs
|
|
12
12
|
|
|
13
13
|
- `.agents/skills/` - AI agent skills for the IrisX App SDK (editor-agnostic)
|
|
14
|
-
- `.
|
|
14
|
+
- `.mcp.json` - project-scoped MCP configuration for coding agents
|
|
15
15
|
- `AGENTS.md` - Workspace-level agent instructions (always applied)
|
|
16
16
|
- `CLAUDE.md` - Claude-specific configuration (references AGENTS.md)
|
|
17
17
|
|
|
@@ -75,8 +75,9 @@ async function aiAgentSyncGenerator(tree, options) {
|
|
|
75
75
|
`Then run this generator again.`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
// Clean up old .cursor
|
|
78
|
+
// Clean up old .cursor files that were managed by previous versions.
|
|
79
79
|
const oldManagedFiles = [
|
|
80
|
+
".cursor/mcp.json",
|
|
80
81
|
".cursor/rules/irisx-app-sdk.mdc",
|
|
81
82
|
".cursor/rules/rules-index.mdc",
|
|
82
83
|
".cursor/rules/structured-development.mdc",
|
|
@@ -94,12 +95,9 @@ async function aiAgentSyncGenerator(tree, options) {
|
|
|
94
95
|
tree.delete(file);
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
|
-
// Copy
|
|
98
|
-
const
|
|
99
|
-
(0, devkit_1.generateFiles)(tree,
|
|
100
|
-
// Copy agent skills (editor-agnostic)
|
|
101
|
-
const agentsTemplatePath = path.join(__dirname, "../preset/files/.agents");
|
|
102
|
-
(0, devkit_1.generateFiles)(tree, agentsTemplatePath, ".agents", {});
|
|
98
|
+
// Copy MCP configuration and agent skills shared with the preset generator.
|
|
99
|
+
const managedFilesTemplatePath = path.join(__dirname, "../preset/files");
|
|
100
|
+
(0, devkit_1.generateFiles)(tree, managedFilesTemplatePath, ".", {});
|
|
103
101
|
// Copy AGENTS.md and CLAUDE.md to workspace root
|
|
104
102
|
const rootTemplatePath = path.join(__dirname, "../preset/root-files");
|
|
105
103
|
(0, devkit_1.generateFiles)(tree, rootTemplatePath, ".", {});
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.IrisAppGenerator = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const devkit_1 = require("@nx/devkit");
|
|
6
|
-
const
|
|
6
|
+
const internal_1 = require("@nx/js/internal");
|
|
7
7
|
const pacote = tslib_1.__importStar(require("pacote"));
|
|
8
8
|
const path = tslib_1.__importStar(require("path"));
|
|
9
9
|
function normalizeOptions(tree, options) {
|
|
@@ -11,7 +11,7 @@ function normalizeOptions(tree, options) {
|
|
|
11
11
|
const projectDirectory = options.directory ? path.join(options.directory, name) : name;
|
|
12
12
|
const toNxRoot = `../../${projectDirectory.indexOf("/") !== -1 ? "../" : ""}`;
|
|
13
13
|
const projectName = name.replace(new RegExp("/", "g"), "_");
|
|
14
|
-
const npmScope = (0,
|
|
14
|
+
const npmScope = (0, internal_1.getNpmScope)(tree);
|
|
15
15
|
if (!npmScope) {
|
|
16
16
|
throw new Error("Could not find npm scope in package.json");
|
|
17
17
|
}
|
|
@@ -83,11 +83,11 @@ const IrisAppGenerator = async function (tree, options) {
|
|
|
83
83
|
"single-spa-react": "5.1.4",
|
|
84
84
|
}, {
|
|
85
85
|
...tuDevDependencies,
|
|
86
|
-
nx: "
|
|
87
|
-
"@nx/react": "
|
|
88
|
-
"@nx/workspace": "
|
|
89
|
-
"@nx/devkit": "
|
|
90
|
-
"@nx/eslint-plugin": "
|
|
86
|
+
nx: "23.1.0",
|
|
87
|
+
"@nx/react": "23.1.0",
|
|
88
|
+
"@nx/workspace": "23.1.0",
|
|
89
|
+
"@nx/devkit": "23.1.0",
|
|
90
|
+
"@nx/eslint-plugin": "23.1.0",
|
|
91
91
|
"@types/react": "19.0.8",
|
|
92
92
|
eslint: "9.33.0",
|
|
93
93
|
"eslint-plugin-react-hooks": "7.0.1",
|
|
@@ -12,10 +12,10 @@ exports.spaDependencies = {
|
|
|
12
12
|
"single-spa-react": "5.1.4",
|
|
13
13
|
};
|
|
14
14
|
exports.testDependencies = {
|
|
15
|
-
"@nx/jest": "
|
|
15
|
+
"@nx/jest": "23.1.0",
|
|
16
16
|
"@testing-library/react": "16.2.0",
|
|
17
17
|
"@testing-library/dom": "^10.4.0",
|
|
18
|
-
jest: "30.0
|
|
18
|
+
jest: "30.3.0",
|
|
19
19
|
"jest-environment-jsdom": "30.0.5",
|
|
20
20
|
"jest-transform-stub": "^2.0.0",
|
|
21
21
|
"jest-fetch-mock": "^3.0.3",
|
|
@@ -6,7 +6,7 @@ const tslib_1 = require("tslib");
|
|
|
6
6
|
const devkit_1 = require("@nx/devkit");
|
|
7
7
|
const eslint_1 = require("@nx/eslint");
|
|
8
8
|
const js_1 = require("@nx/js");
|
|
9
|
-
const
|
|
9
|
+
const internal_1 = require("@nx/js/internal");
|
|
10
10
|
const react_1 = require("@nx/react");
|
|
11
11
|
const iris_app_api_1 = require("@trackunit/iris-app-api");
|
|
12
12
|
const fs = tslib_1.__importStar(require("fs"));
|
|
@@ -24,7 +24,7 @@ function normalizeOptions(tree, options) {
|
|
|
24
24
|
const projectRoot = `${wsLayout.libsDir}/${projectDirectory}`;
|
|
25
25
|
const sourceRoot = `${wsLayout.libsDir}/${projectDirectory}/src`;
|
|
26
26
|
const dependencyDefinitionFile = `${wsLayout.libsDir}/${projectDirectory}/package.json`;
|
|
27
|
-
const npmScope = (0,
|
|
27
|
+
const npmScope = (0, internal_1.getNpmScope)(tree);
|
|
28
28
|
if (!npmScope) {
|
|
29
29
|
throw new Error("Could not find npm scope in package.json");
|
|
30
30
|
}
|
|
@@ -104,6 +104,10 @@ const IrisAppExtensionGenerator = async function (tree, options) {
|
|
|
104
104
|
style: "none",
|
|
105
105
|
skipFormat: false,
|
|
106
106
|
strict: true,
|
|
107
|
+
// Nx 23 warns that "jest" emits the deprecated @nx/jest:jest target, but unlike
|
|
108
|
+
// createSubgraph this generator has no jest.config/tsconfig.spec templates of its
|
|
109
|
+
// own and updates the generated tsconfig.spec.json below. Switching to "none"
|
|
110
|
+
// requires shipping those templates first.
|
|
107
111
|
unitTestRunner: "jest",
|
|
108
112
|
linter: eslint_1.Linter.EsLint,
|
|
109
113
|
routing: false,
|
|
@@ -26,11 +26,12 @@ Before browser testing, verify the MCP is available:
|
|
|
26
26
|
If Chrome DevTools MCP is not available:
|
|
27
27
|
|
|
28
28
|
1. **Install the MCP server** - Guide the user to install `chrome-devtools-mcp`
|
|
29
|
-
2. **Configure
|
|
29
|
+
2. **Configure the coding agent** - Add the server to `.mcp.json` at the workspace root:
|
|
30
30
|
```json
|
|
31
31
|
{
|
|
32
32
|
"mcpServers": {
|
|
33
33
|
"chrome-devtools": {
|
|
34
|
+
"type": "stdio",
|
|
34
35
|
"command": "npx",
|
|
35
36
|
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
36
37
|
}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"chrome-devtools": {
|
|
4
|
+
"type": "stdio",
|
|
4
5
|
"command": "npx",
|
|
5
6
|
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
6
7
|
},
|
|
7
8
|
"nx-mcp": {
|
|
9
|
+
"type": "stdio",
|
|
8
10
|
"command": "npx",
|
|
9
11
|
"args": ["-y", "nx-mcp@latest"]
|
|
10
12
|
},
|
|
11
13
|
"trackunit": {
|
|
14
|
+
"type": "http",
|
|
12
15
|
"url": "https://mcp.trackunit.ai/mcp"
|
|
13
16
|
}
|
|
14
17
|
}
|
|
@@ -8,6 +8,8 @@ This is an IrisX App project generated by the Trackunit SDK. Follow AGENTS.md fo
|
|
|
8
8
|
|
|
9
9
|
SDK-specific skills live in `.agents/skills/`. The generator creates a `.claude/skills` symlink pointing at `../.agents/skills` so Claude Code auto-discovers them. When a skill is referenced in AGENTS.md, read it from `.agents/skills/[skill-name]/SKILL.md`.
|
|
10
10
|
|
|
11
|
+
Project-scoped MCP servers are configured in `.mcp.json` at the workspace root. Restart Claude Code after changing that file so the MCP servers are reloaded.
|
|
12
|
+
|
|
11
13
|
If skills are not appearing in your available skills list, the symlink may be missing (for example on Windows without Developer Mode, or if a real `.claude/skills` directory existed first). Recreate it with:
|
|
12
14
|
|
|
13
15
|
```bash
|