@codyswann/lisa 2.178.5 → 2.179.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/dist/configs/eslint/phaser.d.ts +2 -8
- package/dist/configs/eslint/phaser.d.ts.map +1 -1
- package/dist/configs/eslint/phaser.js +143 -17
- package/dist/configs/eslint/phaser.js.map +1 -1
- package/eslint-plugin-phaser/README.md +19 -0
- package/eslint-plugin-phaser/index.js +35 -0
- package/eslint-plugin-phaser/package.json +10 -0
- package/eslint-plugin-phaser/rules/no-allocation-in-update.js +189 -0
- package/eslint-plugin-phaser/rules/no-create-in-update.js +200 -0
- package/eslint-plugin-phaser/rules/require-shutdown-cleanup.js +191 -0
- package/package.json +5 -3
- package/phaser/package-lisa/package.lisa.json +11 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/skills/analyze-claude-remote/SKILL.md +72 -2
- package/plugins/lisa/skills/generate-claude-remote-build-script/SKILL.md +30 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/analyze-claude-remote/SKILL.md +72 -2
- package/plugins/lisa-agy/skills/generate-claude-remote-build-script/SKILL.md +30 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/skills/analyze-claude-remote/SKILL.md +72 -2
- package/plugins/lisa-copilot/skills/generate-claude-remote-build-script/SKILL.md +30 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/analyze-claude-remote/SKILL.md +72 -2
- package/plugins/lisa-cursor/skills/generate-claude-remote-build-script/SKILL.md +30 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/agents/ops-specialist.md +2 -2
- package/plugins/lisa-expo/skills/ops-check-logs/SKILL.md +8 -2
- package/plugins/lisa-expo/skills/ops-db-ops/SKILL.md +7 -3
- package/plugins/lisa-expo/skills/ops-deploy/SKILL.md +6 -2
- package/plugins/lisa-expo/skills/ops-run-local/SKILL.md +5 -2
- package/plugins/lisa-expo-agy/agents/ops-specialist.md +2 -2
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/ops-check-logs/SKILL.md +8 -2
- package/plugins/lisa-expo-agy/skills/ops-db-ops/SKILL.md +7 -3
- package/plugins/lisa-expo-agy/skills/ops-deploy/SKILL.md +6 -2
- package/plugins/lisa-expo-agy/skills/ops-run-local/SKILL.md +5 -2
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/agents/ops-specialist.agent.md +2 -2
- package/plugins/lisa-expo-copilot/skills/ops-check-logs/SKILL.md +8 -2
- package/plugins/lisa-expo-copilot/skills/ops-db-ops/SKILL.md +7 -3
- package/plugins/lisa-expo-copilot/skills/ops-deploy/SKILL.md +6 -2
- package/plugins/lisa-expo-copilot/skills/ops-run-local/SKILL.md +5 -2
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/agents/ops-specialist.md +2 -2
- package/plugins/lisa-expo-cursor/skills/ops-check-logs/SKILL.md +8 -2
- package/plugins/lisa-expo-cursor/skills/ops-db-ops/SKILL.md +7 -3
- package/plugins/lisa-expo-cursor/skills/ops-deploy/SKILL.md +6 -2
- package/plugins/lisa-expo-cursor/skills/ops-run-local/SKILL.md +5 -2
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/rules/phaser.md +111 -44
- package/plugins/lisa-phaser/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser/skills/phaser-accessibility/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/skills/phaser-asset-pipeline/SKILL.md +148 -0
- package/plugins/lisa-phaser/skills/phaser-asset-pipeline/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/skills/phaser-build-deploy/SKILL.md +148 -0
- package/plugins/lisa-phaser/skills/phaser-build-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser/skills/phaser-i18n/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser/skills/phaser-services/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/skills/phaser-testing/SKILL.md +103 -10
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser-agy/skills/phaser-asset-pipeline/SKILL.md +148 -0
- package/plugins/lisa-phaser-agy/skills/phaser-build-deploy/SKILL.md +148 -0
- package/plugins/lisa-phaser-agy/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser-agy/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser-agy/skills/phaser-testing/SKILL.md +103 -10
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/rules/phaser.md +111 -44
- package/plugins/lisa-phaser-copilot/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser-copilot/skills/phaser-asset-pipeline/SKILL.md +148 -0
- package/plugins/lisa-phaser-copilot/skills/phaser-build-deploy/SKILL.md +148 -0
- package/plugins/lisa-phaser-copilot/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser-copilot/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser-copilot/skills/phaser-testing/SKILL.md +103 -10
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/rules/phaser.mdc +111 -44
- package/plugins/lisa-phaser-cursor/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser-cursor/skills/phaser-asset-pipeline/SKILL.md +148 -0
- package/plugins/lisa-phaser-cursor/skills/phaser-build-deploy/SKILL.md +148 -0
- package/plugins/lisa-phaser-cursor/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser-cursor/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser-cursor/skills/phaser-testing/SKILL.md +103 -10
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/agents/ops-specialist.md +1 -1
- package/plugins/lisa-rails-agy/agents/ops-specialist.md +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/agents/ops-specialist.agent.md +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/agents/ops-specialist.md +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/skills/analyze-claude-remote/SKILL.md +72 -2
- package/plugins/src/base/skills/generate-claude-remote-build-script/SKILL.md +30 -1
- package/plugins/src/expo/agents/ops-specialist.md +2 -2
- package/plugins/src/expo/skills/ops-check-logs/SKILL.md +8 -2
- package/plugins/src/expo/skills/ops-db-ops/SKILL.md +7 -3
- package/plugins/src/expo/skills/ops-deploy/SKILL.md +6 -2
- package/plugins/src/expo/skills/ops-run-local/SKILL.md +5 -2
- package/plugins/src/phaser/rules/phaser.md +111 -44
- package/plugins/src/phaser/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/src/phaser/skills/phaser-asset-pipeline/SKILL.md +148 -0
- package/plugins/src/phaser/skills/phaser-build-deploy/SKILL.md +148 -0
- package/plugins/src/phaser/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/src/phaser/skills/phaser-services/SKILL.md +208 -0
- package/plugins/src/phaser/skills/phaser-testing/SKILL.md +103 -10
- package/plugins/src/rails/agents/ops-specialist.md +1 -1
- package/tsconfig/phaser.json +8 -1
|
@@ -73,11 +73,15 @@ Use for JS-only changes (no native module changes).
|
|
|
73
73
|
|
|
74
74
|
### Full Deploy (Serverless Framework)
|
|
75
75
|
|
|
76
|
-
1. AWS
|
|
76
|
+
1. Verify AWS credentials (discover the profile from backend `package.json` or remote-routine
|
|
77
|
+
`~/.aws/config`):
|
|
77
78
|
```bash
|
|
78
79
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
79
|
-
|
|
80
|
+
aws sts get-caller-identity --profile {aws-profile}
|
|
80
81
|
```
|
|
82
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
83
|
+
AWS signin flow. In a headless or remote-routine session, use the environment-backed assume-role
|
|
84
|
+
profile and do not start an SSO browser/device flow.
|
|
81
85
|
|
|
82
86
|
2. Deploy all functions:
|
|
83
87
|
```bash
|
|
@@ -95,11 +95,14 @@ Use when the backend is already deployed and you only need the frontend.
|
|
|
95
95
|
|
|
96
96
|
### start-backend (backend only)
|
|
97
97
|
|
|
98
|
-
1. Check AWS credentials (discover profile from backend `package.json`
|
|
98
|
+
1. Check AWS credentials (discover profile from backend `package.json` scripts or remote-routine
|
|
99
|
+
`~/.aws/config`):
|
|
99
100
|
```bash
|
|
100
101
|
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
|
|
101
102
|
```
|
|
102
|
-
If expired,
|
|
103
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
104
|
+
AWS signin flow. In headless sessions, rely on the configured environment-backed AWS profile and
|
|
105
|
+
do not start an SSO browser/device flow.
|
|
103
106
|
|
|
104
107
|
2. Start:
|
|
105
108
|
```bash
|
|
@@ -100,10 +100,10 @@ Read `app/` directory structure to discover all available routes.
|
|
|
100
100
|
|---------|-------------|-----|
|
|
101
101
|
| `port 8081 already in use` | Previous Metro bundler running | `lsof -ti :8081 \| xargs kill -9` |
|
|
102
102
|
| `port 3000 already in use` | Previous backend running | `lsof -ti :3000 \| xargs kill -9` |
|
|
103
|
-
| `ExpiredTokenException` | AWS
|
|
103
|
+
| `ExpiredTokenException` | AWS credentials expired | Interactive local: refresh the backend AWS signin flow. Headless: use the environment-backed AWS profile; do not start an SSO browser/device flow |
|
|
104
104
|
| Metro bundler crash | Cache corruption | `bun start:local --clear` |
|
|
105
105
|
| `ECONNREFUSED localhost:3000` | Backend not running | Start backend first, then frontend |
|
|
106
|
-
| Migration fails | Missing AWS credentials |
|
|
106
|
+
| Migration fails | Missing AWS credentials | Verify `aws sts get-caller-identity --profile {profile}`; use interactive signin only locally, environment-backed profile headless |
|
|
107
107
|
| EAS CLI not found | Not installed globally | `npm install -g eas-cli` |
|
|
108
108
|
| `sls` not found | Serverless not installed | `cd $BACKEND_DIR && bun install` |
|
|
109
109
|
| GraphQL schema mismatch | Stale generated types | Run `generate:types:{env}` script |
|
|
@@ -132,9 +132,14 @@ Discover available log scripts from the backend `package.json` (matching `logs:*
|
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
135
|
-
|
|
135
|
+
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
139
|
+
AWS signin flow. In a headless or remote-routine session, do not start an SSO browser/device flow;
|
|
140
|
+
use the preconfigured `~/.aws/config` profile backed by `AWS_ACCESS_KEY_ID` /
|
|
141
|
+
`AWS_SECRET_ACCESS_KEY` environment credentials.
|
|
142
|
+
|
|
138
143
|
### View Recent Logs
|
|
139
144
|
|
|
140
145
|
```bash
|
|
@@ -151,7 +156,8 @@ FUNCTION_NAME={fn} bun run logs:watch:{env}
|
|
|
151
156
|
|
|
152
157
|
## Remote Logs (AWS CLI — Advanced Filtering)
|
|
153
158
|
|
|
154
|
-
For more advanced filtering, use the AWS CLI directly. Discover the AWS profile from backend
|
|
159
|
+
For more advanced filtering, use the AWS CLI directly. Discover the AWS profile from backend
|
|
160
|
+
`package.json` scripts or the remote-routine `~/.aws/config` profile.
|
|
155
161
|
|
|
156
162
|
### Discover Log Groups
|
|
157
163
|
|
|
@@ -29,7 +29,7 @@ Read the backend `package.json` to discover available migration and schema scrip
|
|
|
29
29
|
- `migration:generate:*` — generate new migration from entity changes
|
|
30
30
|
- `migration:create` — create empty migration
|
|
31
31
|
- `generate:sql-schema*` — regenerate SQL schema for MCP
|
|
32
|
-
- `aws:signin:*`
|
|
32
|
+
- AWS credential/profile scripts such as `aws:signin:*` and any environment-backed remote profile
|
|
33
33
|
|
|
34
34
|
Read the frontend `package.json` to discover codegen scripts:
|
|
35
35
|
- `fetch:graphql:schema:*` — fetch GraphQL schema
|
|
@@ -37,13 +37,17 @@ Read the frontend `package.json` to discover codegen scripts:
|
|
|
37
37
|
|
|
38
38
|
## AWS Prerequisite
|
|
39
39
|
|
|
40
|
-
All database operations (except `codegen`) require AWS credentials.
|
|
40
|
+
All database operations (except `codegen`) require AWS credentials. Verify the target profile first:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
44
|
-
|
|
44
|
+
aws sts get-caller-identity --profile {aws-profile}
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local AWS
|
|
48
|
+
signin flow. In a headless or remote-routine session, use the preconfigured environment-backed
|
|
49
|
+
assume-role profile and do not start an SSO browser/device flow.
|
|
50
|
+
|
|
47
51
|
## Operations
|
|
48
52
|
|
|
49
53
|
### migrate (run pending migrations)
|
|
@@ -73,11 +73,15 @@ Use for JS-only changes (no native module changes).
|
|
|
73
73
|
|
|
74
74
|
### Full Deploy (Serverless Framework)
|
|
75
75
|
|
|
76
|
-
1. AWS
|
|
76
|
+
1. Verify AWS credentials (discover the profile from backend `package.json` or remote-routine
|
|
77
|
+
`~/.aws/config`):
|
|
77
78
|
```bash
|
|
78
79
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
79
|
-
|
|
80
|
+
aws sts get-caller-identity --profile {aws-profile}
|
|
80
81
|
```
|
|
82
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
83
|
+
AWS signin flow. In a headless or remote-routine session, use the environment-backed assume-role
|
|
84
|
+
profile and do not start an SSO browser/device flow.
|
|
81
85
|
|
|
82
86
|
2. Deploy all functions:
|
|
83
87
|
```bash
|
|
@@ -95,11 +95,14 @@ Use when the backend is already deployed and you only need the frontend.
|
|
|
95
95
|
|
|
96
96
|
### start-backend (backend only)
|
|
97
97
|
|
|
98
|
-
1. Check AWS credentials (discover profile from backend `package.json`
|
|
98
|
+
1. Check AWS credentials (discover profile from backend `package.json` scripts or remote-routine
|
|
99
|
+
`~/.aws/config`):
|
|
99
100
|
```bash
|
|
100
101
|
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
|
|
101
102
|
```
|
|
102
|
-
If expired,
|
|
103
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
104
|
+
AWS signin flow. In headless sessions, rely on the configured environment-backed AWS profile and
|
|
105
|
+
do not start an SSO browser/device flow.
|
|
103
106
|
|
|
104
107
|
2. Start:
|
|
105
108
|
```bash
|
|
@@ -100,10 +100,10 @@ Read `app/` directory structure to discover all available routes.
|
|
|
100
100
|
|---------|-------------|-----|
|
|
101
101
|
| `port 8081 already in use` | Previous Metro bundler running | `lsof -ti :8081 \| xargs kill -9` |
|
|
102
102
|
| `port 3000 already in use` | Previous backend running | `lsof -ti :3000 \| xargs kill -9` |
|
|
103
|
-
| `ExpiredTokenException` | AWS
|
|
103
|
+
| `ExpiredTokenException` | AWS credentials expired | Interactive local: refresh the backend AWS signin flow. Headless: use the environment-backed AWS profile; do not start an SSO browser/device flow |
|
|
104
104
|
| Metro bundler crash | Cache corruption | `bun start:local --clear` |
|
|
105
105
|
| `ECONNREFUSED localhost:3000` | Backend not running | Start backend first, then frontend |
|
|
106
|
-
| Migration fails | Missing AWS credentials |
|
|
106
|
+
| Migration fails | Missing AWS credentials | Verify `aws sts get-caller-identity --profile {profile}`; use interactive signin only locally, environment-backed profile headless |
|
|
107
107
|
| EAS CLI not found | Not installed globally | `npm install -g eas-cli` |
|
|
108
108
|
| `sls` not found | Serverless not installed | `cd $BACKEND_DIR && bun install` |
|
|
109
109
|
| GraphQL schema mismatch | Stale generated types | Run `generate:types:{env}` script |
|
|
@@ -132,9 +132,14 @@ Discover available log scripts from the backend `package.json` (matching `logs:*
|
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
135
|
-
|
|
135
|
+
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
139
|
+
AWS signin flow. In a headless or remote-routine session, do not start an SSO browser/device flow;
|
|
140
|
+
use the preconfigured `~/.aws/config` profile backed by `AWS_ACCESS_KEY_ID` /
|
|
141
|
+
`AWS_SECRET_ACCESS_KEY` environment credentials.
|
|
142
|
+
|
|
138
143
|
### View Recent Logs
|
|
139
144
|
|
|
140
145
|
```bash
|
|
@@ -151,7 +156,8 @@ FUNCTION_NAME={fn} bun run logs:watch:{env}
|
|
|
151
156
|
|
|
152
157
|
## Remote Logs (AWS CLI — Advanced Filtering)
|
|
153
158
|
|
|
154
|
-
For more advanced filtering, use the AWS CLI directly. Discover the AWS profile from backend
|
|
159
|
+
For more advanced filtering, use the AWS CLI directly. Discover the AWS profile from backend
|
|
160
|
+
`package.json` scripts or the remote-routine `~/.aws/config` profile.
|
|
155
161
|
|
|
156
162
|
### Discover Log Groups
|
|
157
163
|
|
|
@@ -29,7 +29,7 @@ Read the backend `package.json` to discover available migration and schema scrip
|
|
|
29
29
|
- `migration:generate:*` — generate new migration from entity changes
|
|
30
30
|
- `migration:create` — create empty migration
|
|
31
31
|
- `generate:sql-schema*` — regenerate SQL schema for MCP
|
|
32
|
-
- `aws:signin:*`
|
|
32
|
+
- AWS credential/profile scripts such as `aws:signin:*` and any environment-backed remote profile
|
|
33
33
|
|
|
34
34
|
Read the frontend `package.json` to discover codegen scripts:
|
|
35
35
|
- `fetch:graphql:schema:*` — fetch GraphQL schema
|
|
@@ -37,13 +37,17 @@ Read the frontend `package.json` to discover codegen scripts:
|
|
|
37
37
|
|
|
38
38
|
## AWS Prerequisite
|
|
39
39
|
|
|
40
|
-
All database operations (except `codegen`) require AWS credentials.
|
|
40
|
+
All database operations (except `codegen`) require AWS credentials. Verify the target profile first:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
44
|
-
|
|
44
|
+
aws sts get-caller-identity --profile {aws-profile}
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local AWS
|
|
48
|
+
signin flow. In a headless or remote-routine session, use the preconfigured environment-backed
|
|
49
|
+
assume-role profile and do not start an SSO browser/device flow.
|
|
50
|
+
|
|
47
51
|
## Operations
|
|
48
52
|
|
|
49
53
|
### migrate (run pending migrations)
|
|
@@ -73,11 +73,15 @@ Use for JS-only changes (no native module changes).
|
|
|
73
73
|
|
|
74
74
|
### Full Deploy (Serverless Framework)
|
|
75
75
|
|
|
76
|
-
1. AWS
|
|
76
|
+
1. Verify AWS credentials (discover the profile from backend `package.json` or remote-routine
|
|
77
|
+
`~/.aws/config`):
|
|
77
78
|
```bash
|
|
78
79
|
cd "${BACKEND_DIR:-../backend-v2}"
|
|
79
|
-
|
|
80
|
+
aws sts get-caller-identity --profile {aws-profile}
|
|
80
81
|
```
|
|
82
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
83
|
+
AWS signin flow. In a headless or remote-routine session, use the environment-backed assume-role
|
|
84
|
+
profile and do not start an SSO browser/device flow.
|
|
81
85
|
|
|
82
86
|
2. Deploy all functions:
|
|
83
87
|
```bash
|
|
@@ -95,11 +95,14 @@ Use when the backend is already deployed and you only need the frontend.
|
|
|
95
95
|
|
|
96
96
|
### start-backend (backend only)
|
|
97
97
|
|
|
98
|
-
1. Check AWS credentials (discover profile from backend `package.json`
|
|
98
|
+
1. Check AWS credentials (discover profile from backend `package.json` scripts or remote-routine
|
|
99
|
+
`~/.aws/config`):
|
|
99
100
|
```bash
|
|
100
101
|
aws sts get-caller-identity --profile {aws-profile} 2>/dev/null
|
|
101
102
|
```
|
|
102
|
-
If expired,
|
|
103
|
+
If this is an interactive local session and credentials are expired, refresh the backend's local
|
|
104
|
+
AWS signin flow. In headless sessions, rely on the configured environment-backed AWS profile and
|
|
105
|
+
do not start an SSO browser/device flow.
|
|
103
106
|
|
|
104
107
|
2. Start:
|
|
105
108
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.179.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.179.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.179.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.179.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.179.0",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,59 +1,126 @@
|
|
|
1
1
|
# Phaser 4 Project Rules
|
|
2
2
|
|
|
3
|
-
This is a **Phaser 4** (v4.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
3
|
+
This is a **Phaser 4** (v4.2+, npm `phaser@^4.2.0`) TypeScript game project built
|
|
4
|
+
on the official `template-vite-ts` layout (Vite + TypeScript 6). Phaser 4 is the
|
|
5
|
+
only supported target — never introduce Phaser 3 idioms. These decisions are
|
|
6
|
+
**locked** and most are **lint-enforced**; do not disable a rule, fix the code.
|
|
7
|
+
|
|
8
|
+
## Locked architecture decisions
|
|
9
|
+
|
|
10
|
+
1. **Thin scenes over a pure-logic core.** Scenes and GameObjects are thin
|
|
11
|
+
adapters that wire pure logic to the engine. All game rules live in
|
|
12
|
+
`src/logic/**` as plain TypeScript with **zero `phaser` imports** (data in,
|
|
13
|
+
data out). This is what makes the game unit-testable. ECS (bitECS / Miniplex)
|
|
14
|
+
is an opt-in option, not the default — reach for it only at high entity
|
|
15
|
+
counts. See `phaser-project-structure` and `phaser-testing`.
|
|
16
|
+
2. **Canvas-only, framework-agnostic UI.** UI is plain TS + DOM/canvas (the
|
|
17
|
+
`template-vite-ts` baseline). A React/Vue EventBus bridge is documented only
|
|
18
|
+
as an upgrade path — it is not the default and is not added unless required.
|
|
19
|
+
3. **Arcade physics by default; Matter is opt-in.** Matter is heavier and does
|
|
20
|
+
not interop with Arcade. Switching is a one-line config swap. See
|
|
21
|
+
`phaser-physics`.
|
|
22
|
+
4. **Determinism.** No `Math.random()`, `Date.now()`, or `performance.now()` in
|
|
23
|
+
game code. Use the seeded `Phaser.Math.RandomDataGenerator` (`Phaser.Math.RND`
|
|
24
|
+
or a local instance seeded from one place) so replays and tests reproduce.
|
|
25
|
+
5. **State and events.** Global state goes through a **typed wrapper over the
|
|
26
|
+
registry**; cross-cutting events go through a **single dedicated
|
|
27
|
+
EventsCenter** (`new Phaser.Events.EventEmitter()`) — **never reuse
|
|
28
|
+
`game.events`**. Every external `.on()` (`this.input` / `scale` / `time` /
|
|
29
|
+
`window` / the custom bus) must have a matching `.off()` in the scene's
|
|
30
|
+
`shutdown`. See `phaser-services`.
|
|
31
|
+
6. **Performance.** Pool transient objects via `Group`s; make **no allocations
|
|
32
|
+
and create no objects/tweens/timers inside `update()`**; atlas everything; use
|
|
33
|
+
`BitmapText` for high-churn text; use `SpriteGPULayer` / `TilemapGPULayer` for
|
|
34
|
+
mass rendering. See `phaser-gameobjects`.
|
|
35
|
+
7. **Baked-in asset pipeline.** Raw art in `assets/src` is packed at build time
|
|
36
|
+
(free-tex-packer-core atlases, audiosprite, BMFont) into `public/assets`, and
|
|
37
|
+
a codegen step emits typed keys to `src/assets.ts` so a missing or renamed key
|
|
38
|
+
is a **compile error**. No raw string asset / scene / event keys anywhere.
|
|
39
|
+
See `phaser-asset-pipeline`.
|
|
40
|
+
8. **PWA on by default** via `vite-plugin-pwa` (`registerType: "autoUpdate"`,
|
|
41
|
+
`globPatterns` extended to cover game assets). See `phaser-build-deploy`.
|
|
42
|
+
9. **Cross-cutting services are scaffolded** in `src/services/**`: SoundService
|
|
43
|
+
(mobile audio unlock on first gesture), InputService (semantic actions, not
|
|
44
|
+
raw keys), SaveService (typed `localStorage` with a schema `VERSION` +
|
|
45
|
+
migration chain — never raw `localStorage`), a typed i18n string catalog (no
|
|
46
|
+
hardcoded user-facing strings), accessibility (prefers-reduced-motion,
|
|
47
|
+
pause-on-blur, keyboard-navigable menus, screen-reader live region), and a
|
|
48
|
+
vendor-neutral telemetry/analytics abstraction. In-game errors are wired to
|
|
49
|
+
the observability sink. See `phaser-services`, `phaser-i18n`,
|
|
50
|
+
`phaser-accessibility`.
|
|
51
|
+
10. **Testing is a pyramid.** Pure logic is unit-tested with Vitest;
|
|
52
|
+
scenes/entities are excluded from unit coverage and verified by **runtime
|
|
53
|
+
gates** in CI (boot smoke, allocation/perf budget, leak gate, determinism
|
|
54
|
+
gate, deterministic visual regression, bundle-size budget). See
|
|
55
|
+
`phaser-testing`. Build pins: `phaser ^4.2.0`, Vite, TypeScript 6.
|
|
56
|
+
|
|
57
|
+
## Enforced lint rules (prose must match machine enforcement)
|
|
58
|
+
|
|
59
|
+
The lint config enforces the rules below. Each exists because the prose above
|
|
60
|
+
relies on it — keep them in sync.
|
|
61
|
+
|
|
62
|
+
**`no-restricted-imports`**
|
|
63
|
+
|
|
64
|
+
- Importing `phaser` anywhere under `src/logic/**` is banned. The logic core
|
|
65
|
+
stays engine-free so Vitest runs it without a browser.
|
|
66
|
+
|
|
67
|
+
**`no-restricted-syntax`** bans:
|
|
68
|
+
|
|
69
|
+
- Removed v3 idioms: `setPipeline` / `setPostPipeline` / `resetPipeline`,
|
|
70
|
+
`setTintFill`, `preFX` / `postFX`, `Phaser.Geom.Point`, `Phaser.Struct`,
|
|
71
|
+
`BitmapMask`, `Mesh`, `Plane`, `Camera3D`. Use the v4 replacements
|
|
72
|
+
(RenderNodes, Filters, `Phaser.Math.Vector2`, native `Set`/`Map`, GPU layers).
|
|
73
|
+
- `Math.random()` / `Date.now()` / `performance.now()` in `src` game code — use
|
|
74
|
+
the seeded RND and the scene clock (`this.time.now`).
|
|
75
|
+
- Reusing `game.events` for app messaging — use the dedicated EventsCenter.
|
|
76
|
+
- `debug: true` inside a physics/game config object literal — debug stays off in
|
|
77
|
+
committed code (toggle locally, never commit it on).
|
|
78
|
+
|
|
79
|
+
**Direct-`localStorage` ban**
|
|
80
|
+
|
|
81
|
+
- Direct `localStorage` access outside `src/services/**` is banned. Persist
|
|
82
|
+
through SaveService (versioned + migrated).
|
|
83
|
+
|
|
84
|
+
**Custom `eslint-plugin-phaser` rules**
|
|
85
|
+
|
|
86
|
+
- `no-create-in-update` — no `this.add.*`, `tweens.add`, `time.addEvent`,
|
|
87
|
+
`physics.add.*`, or `new Phaser.*` inside an `update()` method. Create in
|
|
88
|
+
`create()`; in the loop, reuse and pool.
|
|
89
|
+
- `no-allocation-in-update` — no object/array literals, closures, or
|
|
90
|
+
`.map`/`.filter`/`.reduce` chains inside `update()`. Hoist scratch objects.
|
|
91
|
+
- `require-shutdown-cleanup` — a `Scene` that registers persistent external
|
|
92
|
+
listeners must define a `shutdown` handler that removes them.
|
|
20
93
|
|
|
21
94
|
## Architecture
|
|
22
95
|
|
|
23
96
|
- **One scene class per file** under `src/scenes/`, named after the scene key.
|
|
24
97
|
The scene flow is `Boot → Preloader → MainMenu → Game` (plus overlays). Boot
|
|
25
98
|
loads only what the Preloader needs; the Preloader loads everything else.
|
|
26
|
-
- **Pure game logic lives
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
(`this.load.pack`), not ad-hoc `load.image` lists scattered across scenes.
|
|
33
|
-
|
|
34
|
-
## Determinism
|
|
35
|
-
|
|
36
|
-
- **No `Math.random()` in game code.** Use the scene-seeded
|
|
37
|
-
`Phaser.Math.RandomDataGenerator` (`Phaser.Math.RND` or a local instance with
|
|
38
|
-
an explicit seed) so replays and tests are reproducible.
|
|
39
|
-
- Arcade physics keeps its v4 default `fixedStep: true`. Do not switch physics to
|
|
40
|
-
variable step to "fix" a tunneling bug — fix the body/velocity configuration.
|
|
99
|
+
- **Pure game logic lives in `src/logic/**`** with no `phaser` imports — plain
|
|
100
|
+
TypeScript that takes and returns data. Scenes/entities are thin orchestrators
|
|
101
|
+
that wire that logic to GameObjects. See `phaser-testing`.
|
|
102
|
+
- **Keys are typed constants** generated into `src/assets.ts` — never inline
|
|
103
|
+
magic strings for texture/audio/animation/scene/event keys. Load via asset-pack
|
|
104
|
+
manifests (`this.load.pack`), not ad-hoc `load.image` lists.
|
|
41
105
|
|
|
42
106
|
## Performance
|
|
43
107
|
|
|
44
|
-
- **No allocations in `update()
|
|
45
|
-
|
|
108
|
+
- **No allocations in `update()`** and **no object/tween/timer creation in
|
|
109
|
+
`update()`** (both lint-enforced) — hoist scratch objects, reuse vectors.
|
|
46
110
|
- **Pool, don't churn.** Bullets, enemies, particles, and pickups come from
|
|
47
|
-
`Group` pools (`get
|
|
48
|
-
- **Mass rendering uses the GPU layers.** Large
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- Target WebGL; the Canvas renderer is deprecated in v4 and only
|
|
52
|
-
explicit, documented fallback
|
|
111
|
+
`Group` pools (`get` / `killAndHide`), never `new` / `destroy` per spawn.
|
|
112
|
+
- **Mass rendering uses the GPU layers.** Large sprite fields → `SpriteGPULayer`;
|
|
113
|
+
large tile maps → `TilemapGPULayer`. Atlas everything (see
|
|
114
|
+
`phaser-asset-pipeline`); `BitmapText` for high-churn text.
|
|
115
|
+
- Target WebGL; the Canvas renderer is deprecated in v4 and acceptable only as an
|
|
116
|
+
explicit, documented fallback.
|
|
53
117
|
|
|
54
118
|
## Verification
|
|
55
119
|
|
|
56
|
-
Before reporting any change complete: run `bun run typecheck`, `bun run
|
|
57
|
-
and `bun run build`. For changes that affect rendering or input,
|
|
58
|
-
real browser — `bun run dev` plus a Playwright check (the game
|
|
59
|
-
renders, no console errors).
|
|
120
|
+
Before reporting any change complete: run `bun run typecheck`, `bun run lint`,
|
|
121
|
+
`bun run test`, and `bun run build`. For changes that affect rendering or input,
|
|
122
|
+
verify in the real browser — `bun run dev` plus a Playwright check (the game
|
|
123
|
+
boots, the canvas renders, no console errors). CI additionally runs the runtime
|
|
124
|
+
gates (`phaser-testing`). A green typecheck alone is not proof a game works.
|
|
125
|
+
</content>
|
|
126
|
+
</invoke>
|