@codyswann/lisa 4.62.3 → 4.63.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/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui-cmd.d.ts +24 -0
- package/dist/cli/ui-cmd.d.ts.map +1 -1
- package/dist/cli/ui-cmd.js +40 -13
- package/dist/cli/ui-cmd.js.map +1 -1
- package/dist/cli/ui-health.d.ts.map +1 -1
- package/dist/cli/ui-health.js +1 -40
- package/dist/cli/ui-health.js.map +1 -1
- package/dist/cli/ui-request-origin.d.ts +8 -0
- package/dist/cli/ui-request-origin.d.ts.map +1 -0
- package/dist/cli/ui-request-origin.js +41 -0
- package/dist/cli/ui-request-origin.js.map +1 -0
- package/dist/cli/ui-starter-sync.d.ts +17 -0
- package/dist/cli/ui-starter-sync.d.ts.map +1 -0
- package/dist/cli/ui-starter-sync.js +75 -0
- package/dist/cli/ui-starter-sync.js.map +1 -0
- 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 +25 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- 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/.codex-plugin/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-starter-sync/SKILL.md +35 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-starter-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/commands/starter-sync.md +6 -0
- package/plugins/lisa/scripts/automation-status-expected-fleet.mjs +15 -0
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/lisa/skills/lisa-starter-sync/SKILL.md +35 -0
- package/plugins/lisa/skills/lisa-starter-sync/agents/openai.yaml +4 -0
- package/plugins/lisa-agy/commands/lisa/starter-sync.md +6 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +15 -0
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/lisa-agy/skills/lisa-starter-sync/SKILL.md +35 -0
- 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/commands/lisa/starter-sync.md +6 -0
- package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +15 -0
- package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/lisa-copilot/skills/lisa-starter-sync/SKILL.md +35 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/commands/lisa/starter-sync.md +6 -0
- package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +15 -0
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/lisa-cursor/skills/lisa-starter-sync/SKILL.md +35 -0
- 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/plugins/src/base/commands/starter-sync.md +6 -0
- package/plugins/src/base/scripts/automation-status-expected-fleet.mjs +15 -0
- package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +20 -0
- package/plugins/src/base/skills/lisa-starter-sync/SKILL.md +35 -0
- package/ui/README.md +30 -0
- package/ui/index.html +129 -12
package/ui/index.html
CHANGED
|
@@ -1848,6 +1848,14 @@
|
|
|
1848
1848
|
<div class="toast" id="toast"></div>
|
|
1849
1849
|
<script>
|
|
1850
1850
|
"use strict";
|
|
1851
|
+
// The launch fragment is never sent to the HTTP server. Keep the capability
|
|
1852
|
+
// only in this page's memory and remove it before normal section routing.
|
|
1853
|
+
const starterSyncCapability = (() => {
|
|
1854
|
+
const match = /^#lisa-token=([a-f0-9]{64})$/u.exec(location.hash);
|
|
1855
|
+
if (match)
|
|
1856
|
+
history.replaceState(null, "", location.pathname + location.search);
|
|
1857
|
+
return match ? match[1] : null;
|
|
1858
|
+
})();
|
|
1851
1859
|
document.title = "Lisa Console — Project Settings";
|
|
1852
1860
|
|
|
1853
1861
|
/* ------------------------------------------------------------------ *
|
|
@@ -7703,7 +7711,7 @@
|
|
|
7703
7711
|
type: "callout",
|
|
7704
7712
|
staticCopy: "published starter-sync scope",
|
|
7705
7713
|
variant: "warn",
|
|
7706
|
-
text: "<b>Starter provenance.</b> Entries and preferences come from project configuration.
|
|
7714
|
+
text: "<b>Starter provenance.</b> Entries and preferences come from project configuration. Sync now checks for starter updates and applies them using the selected strategy. Automatic sync requires scheduler setup after saving. Upstream proposals are not yet connected to this console.",
|
|
7707
7715
|
},
|
|
7708
7716
|
{
|
|
7709
7717
|
type: "flow",
|
|
@@ -7791,7 +7799,7 @@
|
|
|
7791
7799
|
{
|
|
7792
7800
|
key: "starter.sync.auto",
|
|
7793
7801
|
label: "Automatic sync",
|
|
7794
|
-
desc: "On: check the
|
|
7802
|
+
desc: "On: check the starter daily using the runtime scheduler. After saving, run setup-automations to create or remove the schedule. Off: sync only runs manually.",
|
|
7795
7803
|
control: tog(false),
|
|
7796
7804
|
},
|
|
7797
7805
|
{
|
|
@@ -7811,8 +7819,10 @@
|
|
|
7811
7819
|
control: {
|
|
7812
7820
|
type: "button",
|
|
7813
7821
|
label: "Sync now",
|
|
7814
|
-
|
|
7815
|
-
|
|
7822
|
+
action: "run-starter-sync",
|
|
7823
|
+
id: "runStarterSyncButton",
|
|
7824
|
+
statusId: "starterSyncStatus",
|
|
7825
|
+
statusMessage: "Ready to check for starter updates",
|
|
7816
7826
|
},
|
|
7817
7827
|
},
|
|
7818
7828
|
],
|
|
@@ -11619,15 +11629,18 @@
|
|
|
11619
11629
|
b.title = control.reason;
|
|
11620
11630
|
b.setAttribute("aria-describedby", id + "-reason");
|
|
11621
11631
|
}
|
|
11622
|
-
} else {
|
|
11623
|
-
b.addEventListener("click", () => {
|
|
11624
|
-
if (control.action === "run-health") {
|
|
11625
|
-
void runHealthCheck();
|
|
11626
|
-
return;
|
|
11627
|
-
}
|
|
11628
|
-
showToast(control.toast || "Prototype action");
|
|
11629
|
-
});
|
|
11630
11632
|
}
|
|
11633
|
+
b.addEventListener("click", () => {
|
|
11634
|
+
if (control.action === "run-starter-sync") {
|
|
11635
|
+
void runStarterSyncFromConsole(control);
|
|
11636
|
+
return;
|
|
11637
|
+
}
|
|
11638
|
+
if (control.action === "run-health") {
|
|
11639
|
+
void runHealthCheck();
|
|
11640
|
+
return;
|
|
11641
|
+
}
|
|
11642
|
+
showToast(control.toast || "Prototype action");
|
|
11643
|
+
});
|
|
11631
11644
|
wrap.appendChild(b);
|
|
11632
11645
|
if (control.statusId) {
|
|
11633
11646
|
const status = el(
|
|
@@ -11639,6 +11652,8 @@
|
|
|
11639
11652
|
)
|
|
11640
11653
|
);
|
|
11641
11654
|
status.id = control.statusId;
|
|
11655
|
+
if (control.action === "run-starter-sync")
|
|
11656
|
+
paintStarterSyncStatus(status, control);
|
|
11642
11657
|
status.setAttribute(
|
|
11643
11658
|
"role",
|
|
11644
11659
|
control.statusRole === "alert" ? "alert" : "status"
|
|
@@ -13609,6 +13624,108 @@
|
|
|
13609
13624
|
return request;
|
|
13610
13625
|
}
|
|
13611
13626
|
|
|
13627
|
+
/** Render only text and a validated PR URL from the real landing result. */
|
|
13628
|
+
function paintStarterSyncStatus(status, control) {
|
|
13629
|
+
status.textContent = control.statusMessage;
|
|
13630
|
+
if (control.resultUrl) {
|
|
13631
|
+
const link = document.createElement("a");
|
|
13632
|
+
link.href = control.resultUrl;
|
|
13633
|
+
link.textContent = "View pull request";
|
|
13634
|
+
link.target = "_blank";
|
|
13635
|
+
link.rel = "noopener noreferrer";
|
|
13636
|
+
status.append(" ", link);
|
|
13637
|
+
}
|
|
13638
|
+
}
|
|
13639
|
+
|
|
13640
|
+
/** Call the existing landing path, preserving its three distinct outcomes. */
|
|
13641
|
+
async function runStarterSyncFromConsole(control) {
|
|
13642
|
+
if (control.disabled) return;
|
|
13643
|
+
const update = (message, failed = false) => {
|
|
13644
|
+
control.statusMessage = message;
|
|
13645
|
+
control.statusRole = failed ? "alert" : "status";
|
|
13646
|
+
const button = document.getElementById(control.id);
|
|
13647
|
+
const status = document.getElementById(control.statusId);
|
|
13648
|
+
if (button) button.disabled = !!control.disabled;
|
|
13649
|
+
if (status) {
|
|
13650
|
+
status.setAttribute("role", control.statusRole);
|
|
13651
|
+
status.setAttribute("aria-live", failed ? "assertive" : "polite");
|
|
13652
|
+
paintStarterSyncStatus(status, control);
|
|
13653
|
+
}
|
|
13654
|
+
};
|
|
13655
|
+
control.resultUrl = null;
|
|
13656
|
+
if (!lisaLiveMode) {
|
|
13657
|
+
update("Open this project with lisa ui to run starter sync.", true);
|
|
13658
|
+
return;
|
|
13659
|
+
}
|
|
13660
|
+
if (!starterSyncCapability) {
|
|
13661
|
+
update(
|
|
13662
|
+
"Open the console using its terminal launch link to authorize starter sync.",
|
|
13663
|
+
true
|
|
13664
|
+
);
|
|
13665
|
+
return;
|
|
13666
|
+
}
|
|
13667
|
+
if (saving || dirty.size > 0) {
|
|
13668
|
+
update("Save or discard pending settings before syncing.", true);
|
|
13669
|
+
return;
|
|
13670
|
+
}
|
|
13671
|
+
control.disabled = true;
|
|
13672
|
+
update(
|
|
13673
|
+
"Checking the starter and running the configured landing strategy…"
|
|
13674
|
+
);
|
|
13675
|
+
try {
|
|
13676
|
+
const response = await fetch("/api/starter-sync", {
|
|
13677
|
+
method: "POST",
|
|
13678
|
+
cache: "no-store",
|
|
13679
|
+
headers: { "x-lisa-starter-token": starterSyncCapability },
|
|
13680
|
+
});
|
|
13681
|
+
const result = await response.json();
|
|
13682
|
+
if (!response.ok || result.state === "failed")
|
|
13683
|
+
throw new Error(
|
|
13684
|
+
result.error ||
|
|
13685
|
+
"Starter sync failed. Check the Lisa console terminal for details."
|
|
13686
|
+
);
|
|
13687
|
+
if (result.state === "current") {
|
|
13688
|
+
update("Nothing to do — the starter is already current.");
|
|
13689
|
+
} else if (
|
|
13690
|
+
result.state === "committed" &&
|
|
13691
|
+
typeof result.commit === "string" &&
|
|
13692
|
+
result.commit
|
|
13693
|
+
) {
|
|
13694
|
+
update("Starter changes committed: " + result.commit);
|
|
13695
|
+
} else if (
|
|
13696
|
+
result.state === "pull-request" &&
|
|
13697
|
+
typeof result.url === "string"
|
|
13698
|
+
) {
|
|
13699
|
+
const url = new URL(result.url);
|
|
13700
|
+
if (url.protocol !== "https:" || url.username || url.password)
|
|
13701
|
+
throw new Error(
|
|
13702
|
+
"Starter sync returned an invalid pull request URL."
|
|
13703
|
+
);
|
|
13704
|
+
control.resultUrl = url.href;
|
|
13705
|
+
update(
|
|
13706
|
+
"Starter update pull request is open for review. The project's baseline has not advanced." +
|
|
13707
|
+
(result.worktree
|
|
13708
|
+
? " Changes were retained at " + result.worktree + "."
|
|
13709
|
+
: "")
|
|
13710
|
+
);
|
|
13711
|
+
} else {
|
|
13712
|
+
throw new Error(
|
|
13713
|
+
"The server did not return a recognized starter-sync outcome."
|
|
13714
|
+
);
|
|
13715
|
+
}
|
|
13716
|
+
} catch (error) {
|
|
13717
|
+
update(
|
|
13718
|
+
"Starter sync failed: " +
|
|
13719
|
+
(error instanceof Error ? error.message : String(error)),
|
|
13720
|
+
true
|
|
13721
|
+
);
|
|
13722
|
+
} finally {
|
|
13723
|
+
control.disabled = false;
|
|
13724
|
+
const button = document.getElementById(control.id);
|
|
13725
|
+
if (button) button.disabled = false;
|
|
13726
|
+
}
|
|
13727
|
+
}
|
|
13728
|
+
|
|
13612
13729
|
/** Run exactly one deterministic Health v1 check through the local server. */
|
|
13613
13730
|
async function runHealthCheck() {
|
|
13614
13731
|
const button = document.getElementById("runHealthCheckButton");
|