@staff0rd/assist 0.772.0 → 0.773.1
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/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from "commander";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "@staff0rd/assist",
|
|
9
|
-
version: "0.
|
|
9
|
+
version: "0.773.1",
|
|
10
10
|
type: "module",
|
|
11
11
|
main: "dist/index.js",
|
|
12
12
|
bin: {
|
|
@@ -563,7 +563,7 @@ function stripLegacyConfigKeys(config) {
|
|
|
563
563
|
}
|
|
564
564
|
|
|
565
565
|
// src/shared/types.ts
|
|
566
|
-
import { z as
|
|
566
|
+
import { z as z5 } from "zod";
|
|
567
567
|
|
|
568
568
|
// src/shared/adviceFragmentNames.ts
|
|
569
569
|
var adviceFragmentTitles = {
|
|
@@ -601,47 +601,185 @@ var adviceFragmentNames = [
|
|
|
601
601
|
"verify"
|
|
602
602
|
];
|
|
603
603
|
|
|
604
|
-
// src/shared/
|
|
604
|
+
// src/shared/hotkeys/hotkeysSchema.ts
|
|
605
605
|
import { z } from "zod";
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
606
|
+
|
|
607
|
+
// src/shared/hotkeys/hotkeyKeyCode.ts
|
|
608
|
+
var PUNCTUATION_CODES = {
|
|
609
|
+
"/": "Slash",
|
|
610
|
+
".": "Period",
|
|
611
|
+
",": "Comma",
|
|
612
|
+
";": "Semicolon",
|
|
613
|
+
"'": "Quote",
|
|
614
|
+
"[": "BracketLeft",
|
|
615
|
+
"]": "BracketRight",
|
|
616
|
+
"\\": "Backslash",
|
|
617
|
+
"-": "Minus",
|
|
618
|
+
"=": "Equal",
|
|
619
|
+
"`": "Backquote"
|
|
620
|
+
};
|
|
621
|
+
var NAMED_KEYS = [
|
|
622
|
+
"Enter",
|
|
623
|
+
"Space",
|
|
624
|
+
"Escape",
|
|
625
|
+
"Backspace",
|
|
626
|
+
"Delete",
|
|
627
|
+
"Insert",
|
|
628
|
+
"Home",
|
|
629
|
+
"End",
|
|
630
|
+
"PageUp",
|
|
631
|
+
"PageDown",
|
|
632
|
+
"ArrowUp",
|
|
633
|
+
"ArrowDown",
|
|
634
|
+
"ArrowLeft",
|
|
635
|
+
"ArrowRight"
|
|
636
|
+
];
|
|
637
|
+
function hotkeyKeyCode(token) {
|
|
638
|
+
if (/^[a-z]$/i.test(token)) {
|
|
639
|
+
const label2 = token.toUpperCase();
|
|
640
|
+
return { code: `Key${label2}`, label: label2 };
|
|
641
|
+
}
|
|
642
|
+
if (/^\d$/.test(token)) return { code: `Digit${token}`, label: token };
|
|
643
|
+
const punctuation = PUNCTUATION_CODES[token];
|
|
644
|
+
if (punctuation) return { code: punctuation, label: token };
|
|
645
|
+
if (/^F([1-9]|1[0-2])$/i.test(token)) {
|
|
646
|
+
const label2 = token.toUpperCase();
|
|
647
|
+
return { code: label2, label: label2 };
|
|
648
|
+
}
|
|
649
|
+
const named = NAMED_KEYS.find(
|
|
650
|
+
(name) => name.toLowerCase() === token.toLowerCase()
|
|
651
|
+
);
|
|
652
|
+
return named ? { code: named, label: named } : void 0;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
// src/shared/hotkeys/parseModifiers.ts
|
|
656
|
+
var MODIFIER_ALIASES = {
|
|
657
|
+
mod: "Mod",
|
|
658
|
+
ctrl: "Ctrl",
|
|
659
|
+
control: "Ctrl",
|
|
660
|
+
alt: "Alt",
|
|
661
|
+
option: "Alt",
|
|
662
|
+
opt: "Alt",
|
|
663
|
+
shift: "Shift",
|
|
664
|
+
meta: "Meta",
|
|
665
|
+
cmd: "Meta",
|
|
666
|
+
command: "Meta",
|
|
667
|
+
win: "Meta"
|
|
668
|
+
};
|
|
669
|
+
var MODIFIER_ORDER = [
|
|
670
|
+
"Mod",
|
|
671
|
+
"Ctrl",
|
|
672
|
+
"Alt",
|
|
673
|
+
"Shift",
|
|
674
|
+
"Meta"
|
|
675
|
+
];
|
|
676
|
+
function parseModifiers(tokens, text17) {
|
|
677
|
+
const modifiers = /* @__PURE__ */ new Set();
|
|
678
|
+
for (const token of tokens) {
|
|
679
|
+
const modifier = MODIFIER_ALIASES[token.toLowerCase()];
|
|
680
|
+
if (!modifier)
|
|
681
|
+
return { ok: false, error: `"${token}" is not a modifier in "${text17}"` };
|
|
682
|
+
if (modifiers.has(modifier))
|
|
683
|
+
return { ok: false, error: `"${token}" is repeated in "${text17}"` };
|
|
684
|
+
modifiers.add(modifier);
|
|
685
|
+
}
|
|
686
|
+
if (![...modifiers].some((modifier) => modifier !== "Shift"))
|
|
687
|
+
return {
|
|
688
|
+
ok: false,
|
|
689
|
+
error: `"${text17}" needs at least one of Mod, Ctrl, Alt or Meta`
|
|
690
|
+
};
|
|
691
|
+
if (modifiers.has("Mod") && (modifiers.has("Ctrl") || modifiers.has("Meta")))
|
|
692
|
+
return {
|
|
693
|
+
ok: false,
|
|
694
|
+
error: `"${text17}" combines Mod with Ctrl or Meta, which Mod already means`
|
|
695
|
+
};
|
|
696
|
+
return {
|
|
697
|
+
ok: true,
|
|
698
|
+
modifiers: MODIFIER_ORDER.filter((modifier) => modifiers.has(modifier))
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// src/shared/hotkeys/parseChord.ts
|
|
703
|
+
function parseChord(text17, { modifiersOnly = false } = {}) {
|
|
704
|
+
const tokens = text17.split("+").map((token) => token.trim());
|
|
705
|
+
const keyToken = modifiersOnly ? void 0 : tokens.pop();
|
|
706
|
+
const parsed = parseModifiers(tokens, text17);
|
|
707
|
+
if (!parsed.ok) return parsed;
|
|
708
|
+
const { modifiers } = parsed;
|
|
709
|
+
if (keyToken === void 0) return { ok: true, chord: { modifiers } };
|
|
710
|
+
const key = hotkeyKeyCode(keyToken);
|
|
711
|
+
if (!key)
|
|
712
|
+
return { ok: false, error: `"${keyToken}" is not a key in "${text17}"` };
|
|
713
|
+
return { ok: true, chord: { modifiers, key } };
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// src/shared/hotkeys/hotkeysSchema.ts
|
|
717
|
+
function chordSchema(modifiersOnly) {
|
|
718
|
+
return z.string().superRefine((value, ctx) => {
|
|
719
|
+
const parsed = parseChord(value, { modifiersOnly });
|
|
720
|
+
if (!parsed.ok) ctx.addIssue({ code: "custom", message: parsed.error });
|
|
721
|
+
});
|
|
722
|
+
}
|
|
723
|
+
var keyChord = chordSchema(false).optional();
|
|
724
|
+
var hotkeysSchema = z.strictObject({
|
|
725
|
+
navTab: chordSchema(true).optional(),
|
|
726
|
+
focusSidebar: keyChord,
|
|
727
|
+
focusTerminal: keyChord,
|
|
728
|
+
toggleDiff: keyChord,
|
|
729
|
+
focusRepoPicker: keyChord,
|
|
730
|
+
openConfig: keyChord,
|
|
731
|
+
openMenu: keyChord,
|
|
732
|
+
focusAddAgent: keyChord,
|
|
733
|
+
focusVsCode: keyChord,
|
|
734
|
+
focusDone: keyChord,
|
|
735
|
+
nextWaiting: keyChord,
|
|
736
|
+
newSession: keyChord,
|
|
737
|
+
quickOpen: keyChord,
|
|
738
|
+
save: keyChord,
|
|
739
|
+
shortcutsSheet: keyChord
|
|
611
740
|
});
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
741
|
+
|
|
742
|
+
// src/shared/runConfigSchema.ts
|
|
743
|
+
import { z as z2 } from "zod";
|
|
744
|
+
var runParamSchema = z2.strictObject({
|
|
745
|
+
name: z2.string(),
|
|
746
|
+
required: z2.boolean().optional(),
|
|
747
|
+
default: z2.string().optional(),
|
|
748
|
+
description: z2.string().optional()
|
|
749
|
+
});
|
|
750
|
+
var runConfigSchema = z2.strictObject({
|
|
751
|
+
name: z2.string(),
|
|
752
|
+
command: z2.string(),
|
|
753
|
+
args: z2.array(z2.string()).optional(),
|
|
754
|
+
params: z2.array(runParamSchema).optional(),
|
|
755
|
+
env: z2.record(z2.string(), z2.string()).optional(),
|
|
756
|
+
filter: z2.string().optional(),
|
|
757
|
+
pre: z2.array(z2.string()).optional(),
|
|
758
|
+
cwd: z2.string().optional(),
|
|
759
|
+
quiet: z2.boolean().optional(),
|
|
760
|
+
server: z2.union([z2.boolean(), z2.string().min(1)]).optional(),
|
|
761
|
+
port: z2.number().optional()
|
|
624
762
|
});
|
|
625
|
-
var runLinkSchema =
|
|
626
|
-
link:
|
|
627
|
-
prefix:
|
|
763
|
+
var runLinkSchema = z2.strictObject({
|
|
764
|
+
link: z2.string(),
|
|
765
|
+
prefix: z2.string()
|
|
628
766
|
});
|
|
629
767
|
|
|
630
768
|
// src/shared/secretConfigValue.ts
|
|
631
|
-
import { z as
|
|
769
|
+
import { z as z3 } from "zod";
|
|
632
770
|
var SECRET_META_KEY = "assistSecret";
|
|
633
771
|
function secretConfigValue(schema2) {
|
|
634
772
|
return schema2.meta({ [SECRET_META_KEY]: true });
|
|
635
773
|
}
|
|
636
774
|
function isSecretSchemaNode(node) {
|
|
637
|
-
const meta =
|
|
775
|
+
const meta = z3.globalRegistry.get(node);
|
|
638
776
|
return meta?.[SECRET_META_KEY] === true;
|
|
639
777
|
}
|
|
640
778
|
|
|
641
779
|
// src/shared/sessionLinkSchema.ts
|
|
642
|
-
import { z as
|
|
780
|
+
import { z as z4 } from "zod";
|
|
643
781
|
var SSH_LINK_RETIRED = "ssh links are no longer supported; relink with `assist sessions nodes link <name> --tailscale <host> --port <port>`";
|
|
644
|
-
var sessionLinkSchema =
|
|
782
|
+
var sessionLinkSchema = z4.preprocess(
|
|
645
783
|
(link3, ctx) => {
|
|
646
784
|
if (link3 && typeof link3 === "object" && "ssh" in link3)
|
|
647
785
|
ctx.issues.push({
|
|
@@ -651,260 +789,261 @@ var sessionLinkSchema = z3.preprocess(
|
|
|
651
789
|
});
|
|
652
790
|
return link3;
|
|
653
791
|
},
|
|
654
|
-
|
|
792
|
+
z4.strictObject({ name: z4.string(), url: z4.string() })
|
|
655
793
|
);
|
|
656
794
|
|
|
657
795
|
// src/shared/types.ts
|
|
658
|
-
var transcriptConfigSchema =
|
|
659
|
-
vttDir:
|
|
660
|
-
transcriptsDir:
|
|
661
|
-
summaryDir:
|
|
796
|
+
var transcriptConfigSchema = z5.strictObject({
|
|
797
|
+
vttDir: z5.string(),
|
|
798
|
+
transcriptsDir: z5.string(),
|
|
799
|
+
summaryDir: z5.string()
|
|
662
800
|
});
|
|
663
|
-
var miroExtractSchema =
|
|
664
|
-
board:
|
|
665
|
-
frame:
|
|
666
|
-
topLeft:
|
|
667
|
-
bottomRight:
|
|
668
|
-
items:
|
|
669
|
-
ignore:
|
|
670
|
-
out:
|
|
801
|
+
var miroExtractSchema = z5.strictObject({
|
|
802
|
+
board: z5.string().optional(),
|
|
803
|
+
frame: z5.string().optional(),
|
|
804
|
+
topLeft: z5.string(),
|
|
805
|
+
bottomRight: z5.string(),
|
|
806
|
+
items: z5.string(),
|
|
807
|
+
ignore: z5.string().optional(),
|
|
808
|
+
out: z5.string().optional()
|
|
671
809
|
});
|
|
672
810
|
var DEFAULT_BACKUP_DIR = "~/.assist/backups";
|
|
673
811
|
var DEFAULT_CLONE_DIR = "~/git";
|
|
674
812
|
var assistConfigShape = {
|
|
675
|
-
advice:
|
|
676
|
-
sections:
|
|
677
|
-
extra:
|
|
678
|
-
verify:
|
|
813
|
+
advice: z5.strictObject({
|
|
814
|
+
sections: z5.partialRecord(z5.enum(adviceFragmentNames), z5.boolean()).default({}),
|
|
815
|
+
extra: z5.string().optional(),
|
|
816
|
+
verify: z5.string().optional()
|
|
679
817
|
}).optional(),
|
|
680
|
-
backlog:
|
|
681
|
-
previewComments:
|
|
818
|
+
backlog: z5.strictObject({
|
|
819
|
+
previewComments: z5.boolean().default(false)
|
|
682
820
|
}).optional(),
|
|
683
|
-
backup:
|
|
684
|
-
dir:
|
|
821
|
+
backup: z5.strictObject({
|
|
822
|
+
dir: z5.string().default(DEFAULT_BACKUP_DIR)
|
|
685
823
|
}).default({ dir: DEFAULT_BACKUP_DIR }),
|
|
686
|
-
clone:
|
|
687
|
-
baseDir:
|
|
824
|
+
clone: z5.strictObject({
|
|
825
|
+
baseDir: z5.string().default(DEFAULT_CLONE_DIR)
|
|
688
826
|
}).default({ baseDir: DEFAULT_CLONE_DIR }),
|
|
689
|
-
commit:
|
|
690
|
-
conventional:
|
|
691
|
-
pull:
|
|
692
|
-
push:
|
|
693
|
-
expectedBranch:
|
|
827
|
+
commit: z5.strictObject({
|
|
828
|
+
conventional: z5.boolean().default(false),
|
|
829
|
+
pull: z5.boolean().default(false),
|
|
830
|
+
push: z5.boolean().default(false),
|
|
831
|
+
expectedBranch: z5.string().optional()
|
|
694
832
|
}).default({ conventional: false, pull: false, push: false }),
|
|
695
|
-
branch:
|
|
696
|
-
prefix:
|
|
697
|
-
defaultBranch:
|
|
833
|
+
branch: z5.strictObject({
|
|
834
|
+
prefix: z5.string().optional(),
|
|
835
|
+
defaultBranch: z5.string().optional()
|
|
698
836
|
}).optional(),
|
|
699
|
-
devlog:
|
|
700
|
-
name:
|
|
701
|
-
ignore:
|
|
702
|
-
skip:
|
|
837
|
+
devlog: z5.strictObject({
|
|
838
|
+
name: z5.string().optional(),
|
|
839
|
+
ignore: z5.array(z5.string()).optional(),
|
|
840
|
+
skip: z5.record(z5.string(), z5.array(z5.string())).optional()
|
|
703
841
|
}).optional(),
|
|
704
|
-
notify:
|
|
705
|
-
enabled:
|
|
842
|
+
notify: z5.strictObject({
|
|
843
|
+
enabled: z5.boolean().default(true)
|
|
706
844
|
}).default({ enabled: true }),
|
|
707
|
-
complexity:
|
|
708
|
-
ignore:
|
|
845
|
+
complexity: z5.strictObject({
|
|
846
|
+
ignore: z5.array(z5.string()).default(["**/*test.ts*"])
|
|
709
847
|
}).default({ ignore: ["**/*test.ts*"] }),
|
|
710
|
-
hardcodedColors:
|
|
711
|
-
ignore:
|
|
848
|
+
hardcodedColors: z5.strictObject({
|
|
849
|
+
ignore: z5.array(z5.string()).default([])
|
|
712
850
|
}).optional(),
|
|
713
|
-
blockCodeComments:
|
|
714
|
-
ignore:
|
|
851
|
+
blockCodeComments: z5.strictObject({
|
|
852
|
+
ignore: z5.array(z5.string()).default([])
|
|
715
853
|
}).optional(),
|
|
716
|
-
restructure:
|
|
717
|
-
ignore:
|
|
718
|
-
pin:
|
|
719
|
-
maxDepth:
|
|
854
|
+
restructure: z5.strictObject({
|
|
855
|
+
ignore: z5.array(z5.string()).default([]),
|
|
856
|
+
pin: z5.array(z5.string()).default([]),
|
|
857
|
+
maxDepth: z5.number().int().positive().default(10)
|
|
720
858
|
}).optional(),
|
|
721
|
-
jira:
|
|
722
|
-
acField:
|
|
859
|
+
jira: z5.strictObject({
|
|
860
|
+
acField: z5.string().default("customfield_11937")
|
|
723
861
|
}).optional(),
|
|
724
|
-
roam:
|
|
725
|
-
clientId: secretConfigValue(
|
|
726
|
-
clientSecret: secretConfigValue(
|
|
727
|
-
accessToken: secretConfigValue(
|
|
728
|
-
refreshToken: secretConfigValue(
|
|
729
|
-
tokenExpiresAt:
|
|
862
|
+
roam: z5.strictObject({
|
|
863
|
+
clientId: secretConfigValue(z5.string()),
|
|
864
|
+
clientSecret: secretConfigValue(z5.string()),
|
|
865
|
+
accessToken: secretConfigValue(z5.string()).optional(),
|
|
866
|
+
refreshToken: secretConfigValue(z5.string()).optional(),
|
|
867
|
+
tokenExpiresAt: z5.number().optional()
|
|
730
868
|
}).optional(),
|
|
731
|
-
slack:
|
|
732
|
-
channel:
|
|
869
|
+
slack: z5.strictObject({
|
|
870
|
+
channel: z5.string().optional()
|
|
733
871
|
}).optional(),
|
|
734
|
-
prs:
|
|
735
|
-
slack:
|
|
736
|
-
required:
|
|
737
|
-
promptJira:
|
|
738
|
-
promptGithub:
|
|
739
|
-
draft:
|
|
740
|
-
readingWordsPerMinute:
|
|
872
|
+
prs: z5.strictObject({
|
|
873
|
+
slack: z5.string().optional(),
|
|
874
|
+
required: z5.boolean().default(true),
|
|
875
|
+
promptJira: z5.boolean().default(false),
|
|
876
|
+
promptGithub: z5.boolean().default(false),
|
|
877
|
+
draft: z5.boolean().default(false),
|
|
878
|
+
readingWordsPerMinute: z5.number().int().positive().optional()
|
|
741
879
|
}).optional(),
|
|
742
|
-
review:
|
|
743
|
-
codexModel:
|
|
744
|
-
highLevel:
|
|
745
|
-
criticalPaths:
|
|
746
|
-
uiPaths:
|
|
747
|
-
descriptionWordCap:
|
|
880
|
+
review: z5.strictObject({
|
|
881
|
+
codexModel: z5.string().optional(),
|
|
882
|
+
highLevel: z5.strictObject({
|
|
883
|
+
criticalPaths: z5.array(z5.string()).default([]),
|
|
884
|
+
uiPaths: z5.array(z5.string()).default([]),
|
|
885
|
+
descriptionWordCap: z5.number().int().positive().default(300)
|
|
748
886
|
}).optional()
|
|
749
887
|
}).optional(),
|
|
750
|
-
readTime:
|
|
751
|
-
wordsPerMinute:
|
|
888
|
+
readTime: z5.strictObject({
|
|
889
|
+
wordsPerMinute: z5.number().int().positive().default(200)
|
|
752
890
|
}).optional(),
|
|
753
|
-
releases:
|
|
754
|
-
streams:
|
|
755
|
-
|
|
756
|
-
name:
|
|
757
|
-
repo:
|
|
758
|
-
workflow:
|
|
759
|
-
nodes:
|
|
760
|
-
|
|
761
|
-
id:
|
|
762
|
-
environment:
|
|
763
|
-
kind:
|
|
764
|
-
label:
|
|
891
|
+
releases: z5.strictObject({
|
|
892
|
+
streams: z5.array(
|
|
893
|
+
z5.strictObject({
|
|
894
|
+
name: z5.string(),
|
|
895
|
+
repo: z5.string(),
|
|
896
|
+
workflow: z5.string(),
|
|
897
|
+
nodes: z5.array(
|
|
898
|
+
z5.strictObject({
|
|
899
|
+
id: z5.string(),
|
|
900
|
+
environment: z5.string().optional(),
|
|
901
|
+
kind: z5.enum(["build", "gate"]).optional(),
|
|
902
|
+
label: z5.string().optional()
|
|
765
903
|
})
|
|
766
904
|
),
|
|
767
|
-
edges:
|
|
905
|
+
edges: z5.array(z5.tuple([z5.string(), z5.string()])).default([])
|
|
768
906
|
})
|
|
769
907
|
).default([])
|
|
770
908
|
}).optional(),
|
|
771
|
-
worktree:
|
|
772
|
-
enabled:
|
|
773
|
-
watcher:
|
|
774
|
-
trunk:
|
|
775
|
-
includeDrafts:
|
|
776
|
-
root:
|
|
777
|
-
install:
|
|
778
|
-
commitBeforeManualChecks:
|
|
779
|
-
commitBeforePhaseEnd:
|
|
780
|
-
copy:
|
|
909
|
+
worktree: z5.strictObject({
|
|
910
|
+
enabled: z5.boolean().default(false),
|
|
911
|
+
watcher: z5.boolean().default(false),
|
|
912
|
+
trunk: z5.boolean().default(false),
|
|
913
|
+
includeDrafts: z5.boolean().default(false),
|
|
914
|
+
root: z5.string().optional(),
|
|
915
|
+
install: z5.union([z5.boolean(), z5.string(), z5.array(z5.string())]).default(true),
|
|
916
|
+
commitBeforeManualChecks: z5.boolean().default(false),
|
|
917
|
+
commitBeforePhaseEnd: z5.boolean().optional(),
|
|
918
|
+
copy: z5.array(z5.string()).default([
|
|
781
919
|
".env",
|
|
782
920
|
"settings.local.json",
|
|
783
921
|
".claude/settings.local.json"
|
|
784
922
|
])
|
|
785
923
|
}).optional(),
|
|
786
|
-
run:
|
|
787
|
-
subtasks:
|
|
788
|
-
|
|
789
|
-
title:
|
|
790
|
-
description:
|
|
924
|
+
run: z5.array(z5.union([runConfigSchema, runLinkSchema])).optional(),
|
|
925
|
+
subtasks: z5.array(
|
|
926
|
+
z5.strictObject({
|
|
927
|
+
title: z5.string(),
|
|
928
|
+
description: z5.string().optional()
|
|
791
929
|
})
|
|
792
930
|
).optional(),
|
|
793
931
|
transcript: transcriptConfigSchema.optional(),
|
|
794
|
-
cliReadVerbs:
|
|
795
|
-
cliHook:
|
|
796
|
-
blockNpmRun:
|
|
932
|
+
cliReadVerbs: z5.record(z5.string(), z5.array(z5.string())).optional(),
|
|
933
|
+
cliHook: z5.strictObject({
|
|
934
|
+
blockNpmRun: z5.boolean().default(true)
|
|
797
935
|
}).optional(),
|
|
798
|
-
dotnet:
|
|
799
|
-
inspect:
|
|
800
|
-
suppress:
|
|
936
|
+
dotnet: z5.strictObject({
|
|
937
|
+
inspect: z5.strictObject({
|
|
938
|
+
suppress: z5.array(z5.string()).default([])
|
|
801
939
|
}).default({ suppress: [] })
|
|
802
940
|
}).optional(),
|
|
803
|
-
litellm:
|
|
804
|
-
baseUrl:
|
|
805
|
-
apiKey: secretConfigValue(
|
|
941
|
+
litellm: z5.strictObject({
|
|
942
|
+
baseUrl: z5.string().optional(),
|
|
943
|
+
apiKey: secretConfigValue(z5.string()).optional()
|
|
806
944
|
}).optional(),
|
|
807
|
-
ravendb:
|
|
808
|
-
connections:
|
|
809
|
-
|
|
810
|
-
name:
|
|
811
|
-
url:
|
|
812
|
-
database:
|
|
813
|
-
apiKeyRef:
|
|
945
|
+
ravendb: z5.strictObject({
|
|
946
|
+
connections: z5.array(
|
|
947
|
+
z5.strictObject({
|
|
948
|
+
name: z5.string(),
|
|
949
|
+
url: z5.string(),
|
|
950
|
+
database: z5.string(),
|
|
951
|
+
apiKeyRef: z5.string()
|
|
814
952
|
})
|
|
815
953
|
).default([]),
|
|
816
|
-
defaultConnection:
|
|
954
|
+
defaultConnection: z5.string().optional()
|
|
817
955
|
}).optional(),
|
|
818
|
-
seq:
|
|
819
|
-
connections:
|
|
820
|
-
|
|
821
|
-
name:
|
|
822
|
-
url:
|
|
823
|
-
apiToken: secretConfigValue(
|
|
956
|
+
seq: z5.strictObject({
|
|
957
|
+
connections: z5.array(
|
|
958
|
+
z5.strictObject({
|
|
959
|
+
name: z5.string(),
|
|
960
|
+
url: z5.string(),
|
|
961
|
+
apiToken: secretConfigValue(z5.string())
|
|
824
962
|
})
|
|
825
963
|
).default([]),
|
|
826
|
-
defaultConnection:
|
|
964
|
+
defaultConnection: z5.string().optional()
|
|
827
965
|
}).optional(),
|
|
828
|
-
sql:
|
|
829
|
-
connections:
|
|
830
|
-
|
|
831
|
-
name:
|
|
832
|
-
server:
|
|
833
|
-
port:
|
|
834
|
-
user:
|
|
835
|
-
password: secretConfigValue(
|
|
836
|
-
database:
|
|
966
|
+
sql: z5.strictObject({
|
|
967
|
+
connections: z5.array(
|
|
968
|
+
z5.strictObject({
|
|
969
|
+
name: z5.string(),
|
|
970
|
+
server: z5.string(),
|
|
971
|
+
port: z5.number(),
|
|
972
|
+
user: z5.string(),
|
|
973
|
+
password: secretConfigValue(z5.string()),
|
|
974
|
+
database: z5.string()
|
|
837
975
|
})
|
|
838
976
|
).default([]),
|
|
839
|
-
defaultConnection:
|
|
977
|
+
defaultConnection: z5.string().optional()
|
|
840
978
|
}).optional(),
|
|
841
|
-
screenshot:
|
|
842
|
-
outputDir:
|
|
979
|
+
screenshot: z5.strictObject({
|
|
980
|
+
outputDir: z5.string().default("./screenshots")
|
|
843
981
|
}).default({ outputDir: "./screenshots" }),
|
|
844
|
-
sessions:
|
|
845
|
-
nodeName:
|
|
846
|
-
links:
|
|
847
|
-
linkVersionCheck:
|
|
848
|
-
tailscaleServe:
|
|
849
|
-
includeCommittedChanges:
|
|
850
|
-
topBar:
|
|
851
|
-
floatWaiting:
|
|
852
|
-
floatWaitingAfterMs:
|
|
853
|
-
maxLive:
|
|
854
|
-
newSessionMode:
|
|
982
|
+
sessions: z5.strictObject({
|
|
983
|
+
nodeName: z5.string().optional(),
|
|
984
|
+
links: z5.array(sessionLinkSchema).optional(),
|
|
985
|
+
linkVersionCheck: z5.enum(["block", "warn", "off"]).default("block"),
|
|
986
|
+
tailscaleServe: z5.boolean().default(true),
|
|
987
|
+
includeCommittedChanges: z5.boolean().default(true),
|
|
988
|
+
topBar: z5.boolean().default(true),
|
|
989
|
+
floatWaiting: z5.boolean().default(true),
|
|
990
|
+
floatWaitingAfterMs: z5.number().default(5e3),
|
|
991
|
+
maxLive: z5.number().default(24),
|
|
992
|
+
newSessionMode: z5.enum(["draft", "bug", "prompt", "design"]).default("draft"),
|
|
993
|
+
hotkeys: hotkeysSchema.optional()
|
|
855
994
|
}).optional(),
|
|
856
|
-
database:
|
|
857
|
-
url: secretConfigValue(
|
|
995
|
+
database: z5.strictObject({
|
|
996
|
+
url: secretConfigValue(z5.string()).optional()
|
|
858
997
|
}).default({}),
|
|
859
|
-
mermaid:
|
|
860
|
-
krokiUrl:
|
|
998
|
+
mermaid: z5.strictObject({
|
|
999
|
+
krokiUrl: z5.string().default("https://kroki.io")
|
|
861
1000
|
}).default({ krokiUrl: "https://kroki.io" }),
|
|
862
|
-
miro:
|
|
863
|
-
extracts:
|
|
1001
|
+
miro: z5.strictObject({
|
|
1002
|
+
extracts: z5.record(z5.string(), miroExtractSchema).optional()
|
|
864
1003
|
}).optional(),
|
|
865
|
-
news:
|
|
866
|
-
showInNav:
|
|
1004
|
+
news: z5.strictObject({
|
|
1005
|
+
showInNav: z5.boolean().default(false)
|
|
867
1006
|
}).optional(),
|
|
868
|
-
next:
|
|
869
|
-
peers:
|
|
870
|
-
repos:
|
|
871
|
-
projects:
|
|
872
|
-
|
|
1007
|
+
next: z5.strictObject({
|
|
1008
|
+
peers: z5.array(z5.string()).optional(),
|
|
1009
|
+
repos: z5.array(z5.string()).optional(),
|
|
1010
|
+
projects: z5.array(
|
|
1011
|
+
z5.string().regex(
|
|
873
1012
|
/^[^/\s]+\/\d+$/,
|
|
874
1013
|
"Use <owner>/<project number>, e.g. my-org/3"
|
|
875
1014
|
)
|
|
876
1015
|
).optional(),
|
|
877
|
-
pickStatuses:
|
|
878
|
-
excludeLabels:
|
|
879
|
-
excludeTypes:
|
|
1016
|
+
pickStatuses: z5.array(z5.string()).optional(),
|
|
1017
|
+
excludeLabels: z5.array(z5.string()).optional(),
|
|
1018
|
+
excludeTypes: z5.array(z5.string()).optional()
|
|
880
1019
|
}).optional(),
|
|
881
|
-
deny:
|
|
882
|
-
|
|
883
|
-
pattern:
|
|
884
|
-
message:
|
|
1020
|
+
deny: z5.array(
|
|
1021
|
+
z5.strictObject({
|
|
1022
|
+
pattern: z5.string(),
|
|
1023
|
+
message: z5.string()
|
|
885
1024
|
})
|
|
886
1025
|
).optional(),
|
|
887
|
-
forbiddenStrings:
|
|
888
|
-
|
|
889
|
-
file:
|
|
890
|
-
paths:
|
|
891
|
-
disallowed:
|
|
1026
|
+
forbiddenStrings: z5.array(
|
|
1027
|
+
z5.strictObject({
|
|
1028
|
+
file: z5.string(),
|
|
1029
|
+
paths: z5.array(z5.string()),
|
|
1030
|
+
disallowed: z5.string()
|
|
892
1031
|
})
|
|
893
1032
|
).optional(),
|
|
894
|
-
sync:
|
|
895
|
-
autoConfirm:
|
|
1033
|
+
sync: z5.strictObject({
|
|
1034
|
+
autoConfirm: z5.boolean().default(false)
|
|
896
1035
|
}).default({ autoConfirm: false }),
|
|
897
|
-
harness:
|
|
898
|
-
engine:
|
|
899
|
-
exposeCodexActions:
|
|
900
|
-
exposePiActions:
|
|
901
|
-
codexModel:
|
|
1036
|
+
harness: z5.strictObject({
|
|
1037
|
+
engine: z5.enum(["claude", "codex", "pi"]).default("claude"),
|
|
1038
|
+
exposeCodexActions: z5.boolean().optional(),
|
|
1039
|
+
exposePiActions: z5.boolean().optional(),
|
|
1040
|
+
codexModel: z5.string().optional()
|
|
902
1041
|
}).default({ engine: "claude" })
|
|
903
1042
|
};
|
|
904
|
-
var repoConfigSchema =
|
|
905
|
-
var assistConfigSchema =
|
|
1043
|
+
var repoConfigSchema = z5.strictObject(assistConfigShape).partial();
|
|
1044
|
+
var assistConfigSchema = z5.strictObject({
|
|
906
1045
|
...assistConfigShape,
|
|
907
|
-
repos:
|
|
1046
|
+
repos: z5.record(z5.string(), repoConfigSchema).optional()
|
|
908
1047
|
});
|
|
909
1048
|
|
|
910
1049
|
// src/shared/loadConfigFrom.ts
|
|
@@ -5085,52 +5224,52 @@ async function loadAllItems(orm, origin) {
|
|
|
5085
5224
|
import { readFileSync as readFileSync13 } from "fs";
|
|
5086
5225
|
|
|
5087
5226
|
// src/commands/backlog/types.ts
|
|
5088
|
-
import { z as
|
|
5089
|
-
var backlogStatusSchema =
|
|
5090
|
-
var backlogTypeSchema =
|
|
5091
|
-
var planTaskSchema =
|
|
5092
|
-
task:
|
|
5227
|
+
import { z as z6 } from "zod";
|
|
5228
|
+
var backlogStatusSchema = z6.enum(["todo", "in-progress", "done", "wontdo"]);
|
|
5229
|
+
var backlogTypeSchema = z6.enum(["story", "bug"]);
|
|
5230
|
+
var planTaskSchema = z6.object({
|
|
5231
|
+
task: z6.string()
|
|
5093
5232
|
}).strip();
|
|
5094
|
-
var planPhaseSchema =
|
|
5095
|
-
name:
|
|
5096
|
-
tasks:
|
|
5097
|
-
manualChecks:
|
|
5233
|
+
var planPhaseSchema = z6.strictObject({
|
|
5234
|
+
name: z6.string(),
|
|
5235
|
+
tasks: z6.array(planTaskSchema),
|
|
5236
|
+
manualChecks: z6.array(z6.string()).optional()
|
|
5098
5237
|
});
|
|
5099
|
-
var phaseUsageSchema =
|
|
5100
|
-
phaseIdx:
|
|
5101
|
-
tokensUp:
|
|
5102
|
-
tokensDown:
|
|
5103
|
-
activeMs:
|
|
5104
|
-
peakContextPct:
|
|
5238
|
+
var phaseUsageSchema = z6.strictObject({
|
|
5239
|
+
phaseIdx: z6.number(),
|
|
5240
|
+
tokensUp: z6.number(),
|
|
5241
|
+
tokensDown: z6.number(),
|
|
5242
|
+
activeMs: z6.number(),
|
|
5243
|
+
peakContextPct: z6.number()
|
|
5105
5244
|
});
|
|
5106
|
-
var phaseSessionSchema =
|
|
5107
|
-
phaseIdx:
|
|
5108
|
-
claudeSessionId:
|
|
5109
|
-
hostname:
|
|
5110
|
-
osUser:
|
|
5111
|
-
createdAt:
|
|
5245
|
+
var phaseSessionSchema = z6.strictObject({
|
|
5246
|
+
phaseIdx: z6.number(),
|
|
5247
|
+
claudeSessionId: z6.string(),
|
|
5248
|
+
hostname: z6.string(),
|
|
5249
|
+
osUser: z6.string(),
|
|
5250
|
+
createdAt: z6.string().optional()
|
|
5112
5251
|
});
|
|
5113
|
-
var phaseUsageTotalSchema =
|
|
5114
|
-
tokensUp:
|
|
5115
|
-
tokensDown:
|
|
5116
|
-
activeMs:
|
|
5117
|
-
peakContextPct:
|
|
5252
|
+
var phaseUsageTotalSchema = z6.strictObject({
|
|
5253
|
+
tokensUp: z6.number(),
|
|
5254
|
+
tokensDown: z6.number(),
|
|
5255
|
+
activeMs: z6.number(),
|
|
5256
|
+
peakContextPct: z6.number()
|
|
5118
5257
|
});
|
|
5119
|
-
var subtaskStatusSchema =
|
|
5120
|
-
var subtaskSchema =
|
|
5121
|
-
title:
|
|
5122
|
-
description:
|
|
5258
|
+
var subtaskStatusSchema = z6.enum(["todo", "in-progress", "done"]);
|
|
5259
|
+
var subtaskSchema = z6.strictObject({
|
|
5260
|
+
title: z6.string(),
|
|
5261
|
+
description: z6.string().optional(),
|
|
5123
5262
|
status: subtaskStatusSchema.default("todo")
|
|
5124
5263
|
});
|
|
5125
|
-
var backlogCommentTypeSchema =
|
|
5126
|
-
var backlogCommentSchema =
|
|
5127
|
-
id:
|
|
5128
|
-
text:
|
|
5129
|
-
phase:
|
|
5130
|
-
timestamp:
|
|
5264
|
+
var backlogCommentTypeSchema = z6.enum(["comment", "summary"]);
|
|
5265
|
+
var backlogCommentSchema = z6.strictObject({
|
|
5266
|
+
id: z6.number().optional(),
|
|
5267
|
+
text: z6.string(),
|
|
5268
|
+
phase: z6.number().optional(),
|
|
5269
|
+
timestamp: z6.string(),
|
|
5131
5270
|
type: backlogCommentTypeSchema
|
|
5132
5271
|
});
|
|
5133
|
-
var gitRefKindSchema =
|
|
5272
|
+
var gitRefKindSchema = z6.enum([
|
|
5134
5273
|
"branch",
|
|
5135
5274
|
"commit",
|
|
5136
5275
|
"commit-parent",
|
|
@@ -5138,41 +5277,41 @@ var gitRefKindSchema = z5.enum([
|
|
|
5138
5277
|
"slack",
|
|
5139
5278
|
"session"
|
|
5140
5279
|
]);
|
|
5141
|
-
var gitRefSchema =
|
|
5280
|
+
var gitRefSchema = z6.strictObject({
|
|
5142
5281
|
kind: gitRefKindSchema,
|
|
5143
|
-
ref:
|
|
5144
|
-
title:
|
|
5145
|
-
url:
|
|
5146
|
-
state:
|
|
5147
|
-
createdAt:
|
|
5282
|
+
ref: z6.string(),
|
|
5283
|
+
title: z6.string().optional(),
|
|
5284
|
+
url: z6.string().optional(),
|
|
5285
|
+
state: z6.string().optional(),
|
|
5286
|
+
createdAt: z6.string().optional()
|
|
5148
5287
|
});
|
|
5149
|
-
var backlogLinkTypeSchema =
|
|
5150
|
-
var backlogLinkSchema =
|
|
5288
|
+
var backlogLinkTypeSchema = z6.enum(["relates-to", "depends-on"]);
|
|
5289
|
+
var backlogLinkSchema = z6.strictObject({
|
|
5151
5290
|
type: backlogLinkTypeSchema,
|
|
5152
|
-
targetId:
|
|
5291
|
+
targetId: z6.number()
|
|
5153
5292
|
});
|
|
5154
|
-
var backlogItemSchema =
|
|
5155
|
-
id:
|
|
5293
|
+
var backlogItemSchema = z6.strictObject({
|
|
5294
|
+
id: z6.number(),
|
|
5156
5295
|
type: backlogTypeSchema.default("story"),
|
|
5157
|
-
name:
|
|
5158
|
-
description:
|
|
5159
|
-
acceptanceCriteria:
|
|
5160
|
-
plan:
|
|
5161
|
-
currentPhase:
|
|
5162
|
-
starred:
|
|
5296
|
+
name: z6.string(),
|
|
5297
|
+
description: z6.string().optional(),
|
|
5298
|
+
acceptanceCriteria: z6.array(z6.string()),
|
|
5299
|
+
plan: z6.array(planPhaseSchema).optional(),
|
|
5300
|
+
currentPhase: z6.number().optional(),
|
|
5301
|
+
starred: z6.boolean().default(false),
|
|
5163
5302
|
status: backlogStatusSchema,
|
|
5164
|
-
comments:
|
|
5165
|
-
subtasks:
|
|
5166
|
-
links:
|
|
5167
|
-
phaseUsage:
|
|
5168
|
-
phaseSessions:
|
|
5303
|
+
comments: z6.array(backlogCommentSchema).optional(),
|
|
5304
|
+
subtasks: z6.array(subtaskSchema).optional(),
|
|
5305
|
+
links: z6.array(backlogLinkSchema).optional(),
|
|
5306
|
+
phaseUsage: z6.array(phaseUsageSchema).optional(),
|
|
5307
|
+
phaseSessions: z6.array(phaseSessionSchema).optional(),
|
|
5169
5308
|
usageTotal: phaseUsageTotalSchema.optional(),
|
|
5170
|
-
gitRefs:
|
|
5171
|
-
origin:
|
|
5172
|
-
jiraKey:
|
|
5173
|
-
githubIssue:
|
|
5309
|
+
gitRefs: z6.array(gitRefSchema).optional(),
|
|
5310
|
+
origin: z6.string().optional(),
|
|
5311
|
+
jiraKey: z6.string().optional(),
|
|
5312
|
+
githubIssue: z6.string().optional()
|
|
5174
5313
|
});
|
|
5175
|
-
var backlogFileSchema =
|
|
5314
|
+
var backlogFileSchema = z6.array(backlogItemSchema);
|
|
5176
5315
|
|
|
5177
5316
|
// src/commands/backlog/parseBacklogJsonl.ts
|
|
5178
5317
|
function parseBacklogJsonl(path106) {
|
|
@@ -6539,7 +6678,7 @@ ${issues}`);
|
|
|
6539
6678
|
}
|
|
6540
6679
|
|
|
6541
6680
|
// src/commands/backlog/propose/proposedItemSchema.ts
|
|
6542
|
-
import { z as
|
|
6681
|
+
import { z as z7 } from "zod";
|
|
6543
6682
|
|
|
6544
6683
|
// src/commands/backlog/buildCommentLines.ts
|
|
6545
6684
|
function buildCommentLines(comments3) {
|
|
@@ -6691,20 +6830,20 @@ function buildPhasePrompt(item, phaseNumber, phase) {
|
|
|
6691
6830
|
}
|
|
6692
6831
|
|
|
6693
6832
|
// src/commands/backlog/propose/proposedItemSchema.ts
|
|
6694
|
-
var proposedPhaseSchema =
|
|
6695
|
-
name:
|
|
6833
|
+
var proposedPhaseSchema = z7.strictObject({
|
|
6834
|
+
name: z7.string().trim().min(1, "phase name is required").refine(
|
|
6696
6835
|
(name) => name.toLowerCase() !== REVIEW_PHASE_NAME.toLowerCase(),
|
|
6697
6836
|
`"${REVIEW_PHASE_NAME}" is owned by the runner and appended to every plan automatically \u2014 remove this phase`
|
|
6698
6837
|
),
|
|
6699
|
-
tasks:
|
|
6700
|
-
manualChecks:
|
|
6838
|
+
tasks: z7.array(z7.string().trim().min(1)).min(1, "a phase needs at least one task"),
|
|
6839
|
+
manualChecks: z7.array(z7.string().trim().min(1)).default([])
|
|
6701
6840
|
});
|
|
6702
|
-
var proposedItemSchema =
|
|
6703
|
-
name:
|
|
6704
|
-
type:
|
|
6705
|
-
description:
|
|
6706
|
-
acceptanceCriteria:
|
|
6707
|
-
phases:
|
|
6841
|
+
var proposedItemSchema = z7.strictObject({
|
|
6842
|
+
name: z7.string().trim().min(1, "name is required"),
|
|
6843
|
+
type: z7.enum(["story", "bug"]),
|
|
6844
|
+
description: z7.string().optional(),
|
|
6845
|
+
acceptanceCriteria: z7.array(z7.string().trim().min(1)).default([]),
|
|
6846
|
+
phases: z7.array(proposedPhaseSchema).default([])
|
|
6708
6847
|
});
|
|
6709
6848
|
|
|
6710
6849
|
// src/commands/backlog/propose/readProposedItem.ts
|
|
@@ -8229,19 +8368,19 @@ async function persistPhaseSessionId(itemId2, phaseIdx, claudeSessionId) {
|
|
|
8229
8368
|
import { mkdirSync as mkdirSync9, readFileSync as readFileSync19, rmSync as rmSync2, writeFileSync as writeFileSync20 } from "fs";
|
|
8230
8369
|
import { homedir as homedir11 } from "os";
|
|
8231
8370
|
import { dirname as dirname18, join as join30 } from "path";
|
|
8232
|
-
import { z as
|
|
8233
|
-
var activitySchema =
|
|
8234
|
-
kind:
|
|
8235
|
-
harness:
|
|
8236
|
-
name:
|
|
8237
|
-
itemId:
|
|
8238
|
-
itemName:
|
|
8239
|
-
phase:
|
|
8240
|
-
phaseName:
|
|
8241
|
-
totalPhases:
|
|
8242
|
-
claudeSessionId:
|
|
8243
|
-
watchState:
|
|
8244
|
-
startedAt:
|
|
8371
|
+
import { z as z8 } from "zod";
|
|
8372
|
+
var activitySchema = z8.object({
|
|
8373
|
+
kind: z8.enum(["command", "backlog"]),
|
|
8374
|
+
harness: z8.enum(["claude", "codex", "pi"]).optional(),
|
|
8375
|
+
name: z8.string().optional(),
|
|
8376
|
+
itemId: z8.number().optional(),
|
|
8377
|
+
itemName: z8.string().optional(),
|
|
8378
|
+
phase: z8.number().optional(),
|
|
8379
|
+
phaseName: z8.string().optional(),
|
|
8380
|
+
totalPhases: z8.number().optional(),
|
|
8381
|
+
claudeSessionId: z8.string().optional(),
|
|
8382
|
+
watchState: z8.enum(["waiting", "updating"]).optional(),
|
|
8383
|
+
startedAt: z8.number()
|
|
8245
8384
|
});
|
|
8246
8385
|
function activityPath(sessionId) {
|
|
8247
8386
|
return join30(homedir11(), ".assist", "activity", `activity-${sessionId}.json`);
|
|
@@ -10258,9 +10397,9 @@ async function update(id, options2) {
|
|
|
10258
10397
|
import chalk102 from "chalk";
|
|
10259
10398
|
|
|
10260
10399
|
// src/commands/backlog/updatePlan/planUpdateSchema.ts
|
|
10261
|
-
import { z as
|
|
10262
|
-
var planUpdateSchema =
|
|
10263
|
-
phases:
|
|
10400
|
+
import { z as z9 } from "zod";
|
|
10401
|
+
var planUpdateSchema = z9.strictObject({
|
|
10402
|
+
phases: z9.array(proposedPhaseSchema).min(1, "a plan needs at least one phase")
|
|
10264
10403
|
});
|
|
10265
10404
|
|
|
10266
10405
|
// src/commands/backlog/updatePlan/readPlanUpdate.ts
|
|
@@ -13051,6 +13190,53 @@ var nodesConfigHelp = [
|
|
|
13051
13190
|
}
|
|
13052
13191
|
];
|
|
13053
13192
|
|
|
13193
|
+
// src/shared/hotkeys/defaultHotkeys.ts
|
|
13194
|
+
var defaultHotkeys = {
|
|
13195
|
+
navTab: ["Alt"],
|
|
13196
|
+
focusSidebar: ["Alt+A"],
|
|
13197
|
+
focusTerminal: ["Alt+S"],
|
|
13198
|
+
toggleDiff: ["Alt+D"],
|
|
13199
|
+
focusRepoPicker: ["Alt+R"],
|
|
13200
|
+
openConfig: ["Alt+W"],
|
|
13201
|
+
openMenu: ["Alt+E"],
|
|
13202
|
+
focusAddAgent: ["Alt+Z"],
|
|
13203
|
+
focusVsCode: ["Alt+X"],
|
|
13204
|
+
focusDone: ["Alt+C"],
|
|
13205
|
+
nextWaiting: ["Mod+."],
|
|
13206
|
+
newSession: ["Mod+N", "Alt+N"],
|
|
13207
|
+
quickOpen: ["Mod+P"],
|
|
13208
|
+
save: ["Mod+S"],
|
|
13209
|
+
shortcutsSheet: ["Mod+/"]
|
|
13210
|
+
};
|
|
13211
|
+
|
|
13212
|
+
// src/commands/sessions/hotkeysConfigHelp.ts
|
|
13213
|
+
var ACTIONS = {
|
|
13214
|
+
navTab: "modifier for the top-level tab digits 1\u2013N (modifiers only, e.g. Ctrl+Alt)",
|
|
13215
|
+
focusSidebar: "focus the active sidebar card",
|
|
13216
|
+
focusTerminal: "focus the active terminal",
|
|
13217
|
+
toggleDiff: "open / close the diff panel, or focus the preview pane",
|
|
13218
|
+
focusRepoPicker: "focus the toolbar repo picker",
|
|
13219
|
+
openConfig: "open the config page",
|
|
13220
|
+
openMenu: "open the hamburger menu",
|
|
13221
|
+
focusAddAgent: "focus the top bar's add agent button",
|
|
13222
|
+
focusVsCode: "focus the top bar's VS Code button",
|
|
13223
|
+
focusDone: "focus the top bar's done button",
|
|
13224
|
+
nextWaiting: "jump to the next waiting session",
|
|
13225
|
+
newSession: "open the new-session dialog",
|
|
13226
|
+
quickOpen: "quick open a file",
|
|
13227
|
+
save: "save the open file",
|
|
13228
|
+
shortcutsSheet: "show the keyboard shortcuts sheet"
|
|
13229
|
+
};
|
|
13230
|
+
var EXAMPLES = {
|
|
13231
|
+
navTab: "Ctrl+Alt",
|
|
13232
|
+
focusTerminal: "Ctrl+Alt+J"
|
|
13233
|
+
};
|
|
13234
|
+
var hotkeysConfigHelp = Object.keys(ACTIONS).map((name) => ({
|
|
13235
|
+
key: `sessions.hotkeys.${name}`,
|
|
13236
|
+
setter: `assist config set sessions.hotkeys.${name} ${EXAMPLES[name] ?? defaultHotkeys[name][0]} -g`,
|
|
13237
|
+
note: `${ACTIONS[name]}; default ${defaultHotkeys[name].join(" / ")}`
|
|
13238
|
+
}));
|
|
13239
|
+
|
|
13054
13240
|
// src/commands/sessions/sessionsConfigHelp.ts
|
|
13055
13241
|
var sessionsConfigHelp = [
|
|
13056
13242
|
{
|
|
@@ -13232,6 +13418,7 @@ var configHelpEntries = [
|
|
|
13232
13418
|
...sessionsConfigHelp,
|
|
13233
13419
|
...nodesConfigHelp,
|
|
13234
13420
|
...webConfigHelp,
|
|
13421
|
+
...hotkeysConfigHelp,
|
|
13235
13422
|
...slackConfigHelp,
|
|
13236
13423
|
...sqlConfigHelp,
|
|
13237
13424
|
...transcriptConfigHelp,
|
|
@@ -13657,6 +13844,21 @@ async function health(_req, res) {
|
|
|
13657
13844
|
});
|
|
13658
13845
|
}
|
|
13659
13846
|
|
|
13847
|
+
// src/shared/hotkeys/resolveHotkeys.ts
|
|
13848
|
+
function resolveHotkeys(overrides) {
|
|
13849
|
+
const bindings = { ...defaultHotkeys };
|
|
13850
|
+
for (const name of Object.keys(defaultHotkeys)) {
|
|
13851
|
+
const override = overrides?.[name];
|
|
13852
|
+
if (override) bindings[name] = [override];
|
|
13853
|
+
}
|
|
13854
|
+
return bindings;
|
|
13855
|
+
}
|
|
13856
|
+
|
|
13857
|
+
// src/commands/sessions/web/hotkeyBindings.ts
|
|
13858
|
+
function hotkeyBindings(_req, res) {
|
|
13859
|
+
respondJson(res, 200, resolveHotkeys(loadConfig().sessions?.hotkeys));
|
|
13860
|
+
}
|
|
13861
|
+
|
|
13660
13862
|
// src/commands/sessions/web/jiraSite.ts
|
|
13661
13863
|
function jiraSite(_req, res) {
|
|
13662
13864
|
const config = loadJson("jira.json");
|
|
@@ -17205,6 +17407,7 @@ var routes2 = {
|
|
|
17205
17407
|
"GET /api/harness": harnessCapabilities,
|
|
17206
17408
|
"GET /api/session-layout": sessionLayout,
|
|
17207
17409
|
"GET /api/session-view": sessionView,
|
|
17410
|
+
"GET /api/hotkeys": hotkeyBindings,
|
|
17208
17411
|
"GET /api/new-session-defaults": newSessionDefaults,
|
|
17209
17412
|
"GET /api/pr-status": prStatus,
|
|
17210
17413
|
"GET /api/server-runs": handleServerRuns,
|
|
@@ -25731,37 +25934,37 @@ function stringOrUndefined(value) {
|
|
|
25731
25934
|
}
|
|
25732
25935
|
|
|
25733
25936
|
// src/commands/sessions/daemon/persistedSessionSchema.ts
|
|
25734
|
-
import { z as
|
|
25735
|
-
var persistedSessionSchema =
|
|
25736
|
-
id:
|
|
25737
|
-
name:
|
|
25738
|
-
title:
|
|
25739
|
-
generatedTitle:
|
|
25740
|
-
subtitle:
|
|
25741
|
-
commandType:
|
|
25742
|
-
harness:
|
|
25743
|
-
status:
|
|
25744
|
-
cwd:
|
|
25745
|
-
startedAt:
|
|
25746
|
-
runningMs:
|
|
25747
|
-
claudeSessionId:
|
|
25748
|
-
harnessSessionId:
|
|
25749
|
-
initialPrompt:
|
|
25750
|
-
runName:
|
|
25751
|
-
runArgs:
|
|
25752
|
-
assistArgs:
|
|
25937
|
+
import { z as z10 } from "zod";
|
|
25938
|
+
var persistedSessionSchema = z10.object({
|
|
25939
|
+
id: z10.string().optional(),
|
|
25940
|
+
name: z10.string(),
|
|
25941
|
+
title: z10.string().optional(),
|
|
25942
|
+
generatedTitle: z10.string().optional(),
|
|
25943
|
+
subtitle: z10.string().optional(),
|
|
25944
|
+
commandType: z10.enum(["claude", "run", "assist"]),
|
|
25945
|
+
harness: z10.enum(["claude", "codex", "pi"]).optional(),
|
|
25946
|
+
status: z10.enum(["running", "waiting", "done", "error", "stopped"]).optional(),
|
|
25947
|
+
cwd: z10.string(),
|
|
25948
|
+
startedAt: z10.number(),
|
|
25949
|
+
runningMs: z10.number().optional(),
|
|
25950
|
+
claudeSessionId: z10.string().optional(),
|
|
25951
|
+
harnessSessionId: z10.string().optional(),
|
|
25952
|
+
initialPrompt: z10.string().optional(),
|
|
25953
|
+
runName: z10.string().optional(),
|
|
25954
|
+
runArgs: z10.array(z10.string()).optional(),
|
|
25955
|
+
assistArgs: z10.array(z10.string()).optional(),
|
|
25753
25956
|
activity: activitySchema.optional(),
|
|
25754
|
-
starred:
|
|
25755
|
-
watcher:
|
|
25756
|
-
divergenceEscalation:
|
|
25757
|
-
design:
|
|
25758
|
-
auto:
|
|
25759
|
-
autoRun:
|
|
25760
|
-
autoAdvance:
|
|
25761
|
-
reviewStarted:
|
|
25762
|
-
launchedFrom:
|
|
25763
|
-
interrupted:
|
|
25764
|
-
undurable:
|
|
25957
|
+
starred: z10.boolean().optional(),
|
|
25958
|
+
watcher: z10.boolean().optional(),
|
|
25959
|
+
divergenceEscalation: z10.boolean().optional(),
|
|
25960
|
+
design: z10.boolean().optional(),
|
|
25961
|
+
auto: z10.boolean().optional(),
|
|
25962
|
+
autoRun: z10.boolean().optional(),
|
|
25963
|
+
autoAdvance: z10.boolean().optional(),
|
|
25964
|
+
reviewStarted: z10.boolean().optional(),
|
|
25965
|
+
launchedFrom: z10.string().optional(),
|
|
25966
|
+
interrupted: z10.object({ reason: z10.string(), at: z10.number() }).optional(),
|
|
25967
|
+
undurable: z10.object({ reason: z10.string(), removesTree: z10.boolean().optional() }).optional()
|
|
25765
25968
|
});
|
|
25766
25969
|
|
|
25767
25970
|
// src/commands/sessions/daemon/toPersistedSession.ts
|
|
@@ -38652,16 +38855,16 @@ function selectPassages(sources, selection) {
|
|
|
38652
38855
|
}
|
|
38653
38856
|
|
|
38654
38857
|
// src/commands/transcript/selectionSchema.ts
|
|
38655
|
-
import { z as
|
|
38656
|
-
var selectionSchema =
|
|
38657
|
-
keep:
|
|
38658
|
-
|
|
38659
|
-
file:
|
|
38660
|
-
from:
|
|
38661
|
-
to:
|
|
38858
|
+
import { z as z11 } from "zod";
|
|
38859
|
+
var selectionSchema = z11.strictObject({
|
|
38860
|
+
keep: z11.array(
|
|
38861
|
+
z11.strictObject({
|
|
38862
|
+
file: z11.string().trim().min(1, "file is required"),
|
|
38863
|
+
from: z11.string().trim().min(1, "from is required"),
|
|
38864
|
+
to: z11.string().trim().min(1, "to is required")
|
|
38662
38865
|
})
|
|
38663
38866
|
).min(1, "a selection needs at least one keep range"),
|
|
38664
|
-
removed:
|
|
38867
|
+
removed: z11.array(z11.string().trim().min(1)).default([])
|
|
38665
38868
|
});
|
|
38666
38869
|
|
|
38667
38870
|
// src/commands/transcript/widenAudienceInText.ts
|
|
@@ -41076,9 +41279,9 @@ function createAutoExit(exit, graceMs = DEFAULT_GRACE_MS) {
|
|
|
41076
41279
|
}
|
|
41077
41280
|
|
|
41078
41281
|
// src/commands/sessions/daemon/loadActiveSelection.ts
|
|
41079
|
-
import { z as
|
|
41282
|
+
import { z as z12 } from "zod";
|
|
41080
41283
|
var ACTIVE_FILE = "active.json";
|
|
41081
|
-
var activeSelectionSchema =
|
|
41284
|
+
var activeSelectionSchema = z12.record(z12.string(), z12.string());
|
|
41082
41285
|
function loadActiveSelection() {
|
|
41083
41286
|
const parsed = activeSelectionSchema.safeParse(
|
|
41084
41287
|
loadJson(ACTIVE_FILE)
|
|
@@ -48282,7 +48485,11 @@ function registerSessions(program2) {
|
|
|
48282
48485
|
const webCmd = cmd.command("web").description("Start the sessions web dashboard").option("-p, --port <number>", "Port to listen on", "3100").option("--no-open", "Do not open a browser on startup").action(
|
|
48283
48486
|
(options2, command) => web({ ...options2, open: command.optsWithGlobals().open })
|
|
48284
48487
|
);
|
|
48285
|
-
configHelp(webCmd, [
|
|
48488
|
+
configHelp(webCmd, [
|
|
48489
|
+
...nextConfigHelp,
|
|
48490
|
+
...webConfigHelp,
|
|
48491
|
+
...hotkeysConfigHelp
|
|
48492
|
+
]);
|
|
48286
48493
|
cmd.command("summarise").description("Generate one-line summaries for Claude sessions").option("-f, --force", "Re-generate all summaries, even existing ones").option("-n, --limit <count>", "Maximum number of sessions to summarise").action(summarise2);
|
|
48287
48494
|
cmd.command("close").description(
|
|
48288
48495
|
"Dismiss the current daemon-managed session, ending it and reaping its worktree"
|