@codyswann/lisa 4.53.4 → 4.53.5
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/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +6 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/expo/copy-overwrite/plugins/withAndroidSplashNoClientExit.js +106 -8
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -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-cursor/.claude-plugin/plugin.json +1 -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-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- 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-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +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-cursor/.claude-plugin/plugin.json +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/typescript/copy-contents/.husky/commit-msg +52 -14
- package/typescript/copy-contents/.husky/pre-commit +52 -18
- package/typescript/copy-contents/.husky/pre-push +52 -14
|
@@ -1,18 +1,48 @@
|
|
|
1
1
|
// This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
2
2
|
// Do not edit directly — durable changes belong upstream in Lisa.
|
|
3
3
|
|
|
4
|
-
const { withMainActivity } = require("expo/config-plugins");
|
|
5
|
-
const {
|
|
6
|
-
mergeContents,
|
|
7
|
-
} = require("@expo/config-plugins/build/utils/generateCode");
|
|
8
|
-
|
|
9
4
|
/**
|
|
10
5
|
* Tag written into the generated MainActivity so the mod is idempotent. Expo
|
|
11
6
|
* runs prebuild mods repeatedly, and `expo prebuild` can be run against an
|
|
12
7
|
* existing `android/` directory, so an unconditional insert would stack.
|
|
8
|
+
*
|
|
9
|
+
* **Renaming this is a supported operation, and it did not used to be.**
|
|
10
|
+
* `mergeContents` looks for a block bearing exactly this tag and INSERTS when
|
|
11
|
+
* it does not find one. So changing the value made every previously generated
|
|
12
|
+
* block invisible to the check and appended a second one — the unconditional
|
|
13
|
+
* insert this tag exists to prevent, reached by editing the tag itself. The
|
|
14
|
+
* consumer holds the stale side, because this file is copy-overwrite and
|
|
15
|
+
* upstream moves the value.
|
|
16
|
+
*
|
|
17
|
+
* `IDENTITY` below is what makes a rename safe: matching is on the stable
|
|
18
|
+
* identity, and the tag is payload.
|
|
13
19
|
*/
|
|
14
20
|
const TAG = "lisa-splash-no-client-exit";
|
|
15
21
|
|
|
22
|
+
/**
|
|
23
|
+
* The stable identity every tag this plugin has ever written must satisfy.
|
|
24
|
+
*
|
|
25
|
+
* Matching on this rather than on the whole tag is the fix: a block written
|
|
26
|
+
* under any `lisa-splash-*` tag is recognised as OURS, retired, and re-emitted
|
|
27
|
+
* under the current one. The tag can then be renamed freely within the family
|
|
28
|
+
* without stranding anything.
|
|
29
|
+
*
|
|
30
|
+
* The boundary is load-bearing. Without it `lisa-splash` would also match a
|
|
31
|
+
* hypothetical `lisa-splash-something-else`, and this plugin would delete
|
|
32
|
+
* another plugin's block.
|
|
33
|
+
*/
|
|
34
|
+
const IDENTITY = /^lisa-splash(?:-|$)/;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Tags this plugin wrote that fall OUTSIDE `IDENTITY`.
|
|
38
|
+
*
|
|
39
|
+
* Empty today, and the list is the escape hatch rather than the mechanism: a
|
|
40
|
+
* rename that stays inside the identity family needs no entry here. Append the
|
|
41
|
+
* OLD value only when a rename leaves the family, and never remove an entry —
|
|
42
|
+
* a consumer regenerating native sources years later still carries it.
|
|
43
|
+
*/
|
|
44
|
+
const PRIOR_TAGS = Object.freeze([]);
|
|
45
|
+
|
|
16
46
|
/**
|
|
17
47
|
* Anchor. `super.onCreate(null)` is React Native's own template line, not one
|
|
18
48
|
* of expo-splash-screen's `@generated` markers, so this does not depend on
|
|
@@ -95,7 +125,64 @@ const SNIPPET = ` // Opt out of the Android 12+ client-side splash-exit hands
|
|
|
95
125
|
* @param {string} contents Current MainActivity source.
|
|
96
126
|
* @returns {object} The mergeContents result, with the snippet inserted.
|
|
97
127
|
*/
|
|
128
|
+
/**
|
|
129
|
+
* Is this tag one of ours, but not the one we write today?
|
|
130
|
+
* @param {string} tag A tag read out of a `@generated begin` marker.
|
|
131
|
+
* @returns {boolean} True when the block it opens should be retired.
|
|
132
|
+
*/
|
|
133
|
+
const isPriorTag = tag =>
|
|
134
|
+
tag !== TAG && (IDENTITY.test(tag) || PRIOR_TAGS.includes(tag));
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Remove every block this plugin wrote under a PREVIOUS tag.
|
|
138
|
+
*
|
|
139
|
+
* Blocks bearing the CURRENT tag are deliberately left alone. `mergeContents`
|
|
140
|
+
* already recognises those and replaces them in place, and letting it do so
|
|
141
|
+
* preserves a property worth keeping: an already-patched file is updated
|
|
142
|
+
* without needing the anchor, so a React Native upgrade that moves
|
|
143
|
+
* `onCreate` does not turn a working project into a hard prebuild failure.
|
|
144
|
+
* Stripping everything and re-inserting would have traded that away.
|
|
145
|
+
*
|
|
146
|
+
* Markers are matched by structure — `@generated begin <tag>` through
|
|
147
|
+
* `@generated end <tag>` — rather than by reproducing the exact header
|
|
148
|
+
* `mergeContents` writes, because that header carries a content hash whose
|
|
149
|
+
* format is upstream's to change.
|
|
150
|
+
* @param {string} contents Current MainActivity source.
|
|
151
|
+
* @returns {{contents: string, retired: string[]}} Source with prior blocks
|
|
152
|
+
* removed, and the tags that were retired.
|
|
153
|
+
*/
|
|
154
|
+
const stripPriorBlocks = contents => {
|
|
155
|
+
const lines = contents.split("\n");
|
|
156
|
+
const kept = [];
|
|
157
|
+
const retired = [];
|
|
158
|
+
let dropping = null;
|
|
159
|
+
for (const line of lines) {
|
|
160
|
+
if (dropping === null) {
|
|
161
|
+
const begin = /@generated begin (\S+)/.exec(line);
|
|
162
|
+
if (begin && isPriorTag(begin[1])) {
|
|
163
|
+
dropping = begin[1];
|
|
164
|
+
retired.push(begin[1]);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
kept.push(line);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Inside a doomed block: drop through its own end marker, and only its
|
|
171
|
+
// own. Keying the end on the tag we opened with means a nested or
|
|
172
|
+
// adjacent block belonging to something else cannot close ours early.
|
|
173
|
+
if (line.includes(`@generated end ${dropping}`)) dropping = null;
|
|
174
|
+
}
|
|
175
|
+
// An unterminated block would otherwise swallow the rest of the file. Losing
|
|
176
|
+
// MainActivity to a truncated marker is far worse than leaving a stale block
|
|
177
|
+
// in place, so this fails closed by keeping the original.
|
|
178
|
+
if (dropping !== null) return { contents, retired: [] };
|
|
179
|
+
return { contents: kept.join("\n"), retired };
|
|
180
|
+
};
|
|
181
|
+
|
|
98
182
|
const mergeOrThrow = contents => {
|
|
183
|
+
const {
|
|
184
|
+
mergeContents,
|
|
185
|
+
} = require("@expo/config-plugins/build/utils/generateCode");
|
|
99
186
|
try {
|
|
100
187
|
return mergeContents({
|
|
101
188
|
src: contents,
|
|
@@ -140,8 +227,14 @@ const mergeOrThrow = contents => {
|
|
|
140
227
|
* @param {object} config The Expo config being modified.
|
|
141
228
|
* @returns {object} The config with the MainActivity mod applied.
|
|
142
229
|
*/
|
|
143
|
-
const withAndroidSplashNoClientExit = config =>
|
|
144
|
-
|
|
230
|
+
const withAndroidSplashNoClientExit = config => {
|
|
231
|
+
// Required here rather than at module load so this file can be imported by a
|
|
232
|
+
// test without the Expo toolchain installed. The tag-migration logic is the
|
|
233
|
+
// part that needs proving and it depends on neither package; a top-level
|
|
234
|
+
// require made the whole module unloadable, which is why the duplicate-block
|
|
235
|
+
// defect shipped with no test that could have caught it.
|
|
236
|
+
const { withMainActivity } = require("expo/config-plugins");
|
|
237
|
+
return withMainActivity(config, config => {
|
|
145
238
|
const { modResults } = config;
|
|
146
239
|
|
|
147
240
|
if (modResults.language !== "kt") {
|
|
@@ -152,7 +245,8 @@ const withAndroidSplashNoClientExit = config =>
|
|
|
152
245
|
);
|
|
153
246
|
}
|
|
154
247
|
|
|
155
|
-
const
|
|
248
|
+
const { contents: withoutPrior } = stripPriorBlocks(modResults.contents);
|
|
249
|
+
const merged = mergeOrThrow(withoutPrior);
|
|
156
250
|
|
|
157
251
|
return {
|
|
158
252
|
...config,
|
|
@@ -162,6 +256,10 @@ const withAndroidSplashNoClientExit = config =>
|
|
|
162
256
|
},
|
|
163
257
|
};
|
|
164
258
|
});
|
|
259
|
+
};
|
|
165
260
|
|
|
166
261
|
module.exports = withAndroidSplashNoClientExit;
|
|
167
262
|
module.exports.TAG = TAG;
|
|
263
|
+
module.exports.PRIOR_TAGS = PRIOR_TAGS;
|
|
264
|
+
module.exports.isPriorTag = isPriorTag;
|
|
265
|
+
module.exports.stripPriorBlocks = stripPriorBlocks;
|
package/package.json
CHANGED
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"zod-validation-error": "^4.0.0"
|
|
182
182
|
},
|
|
183
183
|
"name": "@codyswann/lisa",
|
|
184
|
-
"version": "4.53.
|
|
184
|
+
"version": "4.53.5",
|
|
185
185
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
186
186
|
"main": "dist/index.js",
|
|
187
187
|
"exports": {
|
|
@@ -329,7 +329,7 @@
|
|
|
329
329
|
"test": "tests"
|
|
330
330
|
},
|
|
331
331
|
"types": "./dist/index.d.ts",
|
|
332
|
-
"lisaReleaseCommit": "
|
|
333
|
-
"gitHead": "
|
|
334
|
-
"lisaReleaseTag": "v4.53.
|
|
332
|
+
"lisaReleaseCommit": "9ebcb61eaae497d8284e614fa4b180ba6f40fd43",
|
|
333
|
+
"gitHead": "9ebcb61eaae497d8284e614fa4b180ba6f40fd43",
|
|
334
|
+
"lisaReleaseTag": "v4.53.5"
|
|
335
335
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.53.
|
|
3
|
+
"version": "4.53.5",
|
|
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": "4.53.
|
|
3
|
+
"version": "4.53.5",
|
|
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": "4.53.
|
|
3
|
+
"version": "4.53.5",
|
|
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": "4.53.
|
|
3
|
+
"version": "4.53.5",
|
|
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": "4.53.
|
|
3
|
+
"version": "4.53.5",
|
|
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"
|