wholestack 0.5.5 → 0.5.7

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.d.ts CHANGED
@@ -3,6 +3,159 @@ import { ToolSet, LanguageModel, ModelMessage } from 'ai';
3
3
 
4
4
  type TaskStatus = "running" | "exited" | "failed";
5
5
 
6
+ /**
7
+ * Launch-layer client — the CLI side of everything the web studio's Launch HQ
8
+ * does AFTER a build exists: ship it (deploy / promote / rollback), draw the
9
+ * go-to-market plan, and run the launch pillars (legal, payments, domain,
10
+ * campaigns, metrics, waitlist…).
11
+ *
12
+ * Every call reuses platform.ts's `apiJson` (the one place Bearer auth + error
13
+ * shaping live), so the terminal hits /api/zeta/* with the SAME contract and the
14
+ * SAME `vbfl_…` membership token as the dashboard and the web IDE. Functions
15
+ * return discriminated results the caller (subcommand / slash command / agent
16
+ * tool) renders — never a thrown error or a silent success.
17
+ *
18
+ * Phased: ship lifecycle lands first; GTM + pillars are added alongside.
19
+ */
20
+ interface DeployResult {
21
+ ok: boolean;
22
+ error?: string;
23
+ /** Where to upgrade/connect when the platform returned an actionable error. */
24
+ upgradeUrl?: string;
25
+ connectUrl?: string;
26
+ hint?: string;
27
+ deploymentId?: string;
28
+ url?: string;
29
+ /** Normalized lifecycle status: queued | building | ready | error. */
30
+ status?: string;
31
+ durable?: boolean;
32
+ dbProvisioned?: boolean;
33
+ dbNote?: string;
34
+ }
35
+ interface GtmItem {
36
+ label: string;
37
+ detail?: string;
38
+ }
39
+ interface GtmLane {
40
+ id: string;
41
+ title: string;
42
+ order: number;
43
+ }
44
+ interface GtmSection {
45
+ id: string;
46
+ title: string;
47
+ lane: string;
48
+ render: string;
49
+ summary: string;
50
+ items: GtmItem[];
51
+ }
52
+ interface GtmPlan {
53
+ intent: string;
54
+ lanes: GtmLane[];
55
+ sections: GtmSection[];
56
+ links?: unknown;
57
+ }
58
+ interface LaunchKitColor {
59
+ name: string;
60
+ hex: string;
61
+ }
62
+ interface LaunchKit {
63
+ brand: {
64
+ name: string;
65
+ tagline: string;
66
+ voice: string;
67
+ palette: LaunchKitColor[];
68
+ };
69
+ pricing: {
70
+ tiers: {
71
+ name: string;
72
+ price: string;
73
+ period: string;
74
+ features: string[];
75
+ }[];
76
+ };
77
+ marketingCopy: {
78
+ headline: string;
79
+ subhead: string;
80
+ bullets: string[];
81
+ cta: string;
82
+ };
83
+ social: {
84
+ posts: {
85
+ platform: string;
86
+ body: string;
87
+ hashtags: string[];
88
+ }[];
89
+ };
90
+ emails: {
91
+ campaigns: {
92
+ subject: string;
93
+ body: string;
94
+ when?: string;
95
+ }[];
96
+ };
97
+ pitch: {
98
+ slides: {
99
+ title: string;
100
+ bullets: string[];
101
+ }[];
102
+ };
103
+ analytics: {
104
+ provider: string;
105
+ events: {
106
+ name: string;
107
+ description: string;
108
+ properties: string[];
109
+ }[];
110
+ kpis: string[];
111
+ };
112
+ checklist: {
113
+ items: {
114
+ task: string;
115
+ detail?: string;
116
+ }[];
117
+ };
118
+ }
119
+ interface LaunchMetrics {
120
+ connected: {
121
+ posthog: boolean;
122
+ stripe: boolean;
123
+ };
124
+ traffic?: {
125
+ visitors7d: number;
126
+ signups7d: number;
127
+ topEvents: {
128
+ name: string;
129
+ count: number;
130
+ }[];
131
+ trend: number[];
132
+ };
133
+ errors?: {
134
+ title: string;
135
+ count: number;
136
+ lastSeen?: string;
137
+ }[];
138
+ revenue?: {
139
+ mrr: number;
140
+ activeSubscriptions: number;
141
+ customers: number;
142
+ customersExact: boolean;
143
+ recent: {
144
+ amount: number;
145
+ when: string;
146
+ }[];
147
+ };
148
+ hints?: {
149
+ posthog?: string;
150
+ stripe?: string;
151
+ };
152
+ }
153
+ interface OperatorAdvice {
154
+ nextMove: string;
155
+ why: string;
156
+ draftHint?: string;
157
+ }
158
+
6
159
  /**
7
160
  * Two ways to drive the ZETA build pipeline:
8
161
  *
@@ -174,6 +327,128 @@ interface ToolContext {
174
327
  checkpoints?: CheckpointStore;
175
328
  }
176
329
  declare function buildTools(ctx: ToolContext): {
330
+ open_dashboard: ai.Tool<{
331
+ dashboard: string;
332
+ }, {
333
+ ok: boolean;
334
+ error: string;
335
+ action?: undefined;
336
+ dashboard?: undefined;
337
+ label?: undefined;
338
+ url?: undefined;
339
+ } | {
340
+ ok: boolean;
341
+ action: string;
342
+ dashboard: string;
343
+ label: string;
344
+ url: string;
345
+ error?: undefined;
346
+ }>;
347
+ list_dashboards: ai.Tool<{}, {
348
+ ok: boolean;
349
+ dashboards: {
350
+ id: string;
351
+ label: string;
352
+ path: string;
353
+ }[];
354
+ }>;
355
+ audit_contract: ai.Tool<{
356
+ githubRepo?: string | undefined;
357
+ gitUrl?: string | undefined;
358
+ installationId?: number | undefined;
359
+ source?: string | undefined;
360
+ sources?: {
361
+ name: string;
362
+ source: string;
363
+ }[] | undefined;
364
+ maxContracts?: number | undefined;
365
+ }, {
366
+ ok: false;
367
+ error: string;
368
+ } | {
369
+ ok: boolean;
370
+ error?: undefined;
371
+ }>;
372
+ compare_bytecode: ai.Tool<{
373
+ address?: string | undefined;
374
+ bytecodeA?: string | undefined;
375
+ bytecodeB?: string | undefined;
376
+ }, any>;
377
+ generate_report: ai.Tool<{
378
+ target: string;
379
+ source?: string | undefined;
380
+ subject?: string | undefined;
381
+ findings?: {
382
+ title: string;
383
+ severity: "critical" | "high" | "medium" | "low" | "info";
384
+ description?: string | undefined;
385
+ category?: string | undefined;
386
+ location?: string | undefined;
387
+ recommendation?: string | undefined;
388
+ tool?: string | undefined;
389
+ }[] | undefined;
390
+ auditBundle?: any;
391
+ walletGuard?: any;
392
+ bytecodeResult?: any;
393
+ baseline?: {
394
+ target: string;
395
+ findings: any[];
396
+ } | undefined;
397
+ }, any>;
398
+ simulate_attack: ai.Tool<{
399
+ contractAddress: string;
400
+ exploitKind: "reentrancy" | "flash-loan" | "price-manipulation";
401
+ chainId?: number | undefined;
402
+ blockNumber?: number | undefined;
403
+ }, any>;
404
+ time_machine_replay: ai.Tool<{
405
+ chainId?: number | undefined;
406
+ blockNumber?: number | undefined;
407
+ txHash?: string | undefined;
408
+ patches?: ({
409
+ value: string;
410
+ type: "balance";
411
+ address: string;
412
+ } | {
413
+ value: string;
414
+ type: "storage";
415
+ address: string;
416
+ slot: string;
417
+ } | {
418
+ code: string;
419
+ type: "code";
420
+ address: string;
421
+ } | {
422
+ value: string;
423
+ type: "nonce";
424
+ address: string;
425
+ })[] | undefined;
426
+ watchAddresses?: string[] | undefined;
427
+ watchSlots?: Record<string, string[]> | undefined;
428
+ }, any>;
429
+ mempool_watch: ai.Tool<{
430
+ chainId?: number | undefined;
431
+ }, any>;
432
+ mev_check: ai.Tool<{
433
+ blockNumber: number;
434
+ chainId?: number | undefined;
435
+ }, any>;
436
+ mev_bundle_status: ai.Tool<{
437
+ blockNumber: number;
438
+ bundleHash: string;
439
+ chainId?: number | undefined;
440
+ }, any>;
441
+ scan_token: ai.Tool<{
442
+ address: string;
443
+ chainId?: number | undefined;
444
+ }, any>;
445
+ check_transaction: ai.Tool<{
446
+ to: string;
447
+ value?: string | undefined;
448
+ data?: string | undefined;
449
+ chainId?: number | undefined;
450
+ }, any>;
451
+ wallet_guard_history: ai.Tool<{}, any>;
177
452
  todo_write: ai.Tool<{
178
453
  todos: {
179
454
  status: "pending" | "in_progress" | "completed";
@@ -245,12 +520,330 @@ declare function buildTools(ctx: ToolContext): {
245
520
  trust?: undefined;
246
521
  note?: undefined;
247
522
  }>;
523
+ deploy_app: ai.Tool<{
524
+ buildId?: string | undefined;
525
+ }, DeployResult>;
526
+ promote_app: ai.Tool<{
527
+ domain?: string | undefined;
528
+ buildId?: string | undefined;
529
+ }, DeployResult>;
530
+ rollback_app: ai.Tool<{
531
+ deploymentId: string;
532
+ buildId?: string | undefined;
533
+ }, DeployResult>;
534
+ launch_canvas: ai.Tool<{
535
+ prompt?: string | undefined;
536
+ buildId?: string | undefined;
537
+ brief?: string | undefined;
538
+ }, {
539
+ ok: boolean;
540
+ error: string | undefined;
541
+ plan?: undefined;
542
+ } | {
543
+ ok: boolean;
544
+ plan: GtmPlan | undefined;
545
+ error?: undefined;
546
+ }>;
547
+ refine_launch_canvas: ai.Tool<{
548
+ plan: {
549
+ intent: string;
550
+ lanes: {
551
+ id: string;
552
+ title: string;
553
+ order: number;
554
+ }[];
555
+ sections: {
556
+ id: string;
557
+ title: string;
558
+ lane: string;
559
+ render: string;
560
+ summary: string;
561
+ items: {
562
+ label: string;
563
+ detail?: string | undefined;
564
+ }[];
565
+ }[];
566
+ };
567
+ answers: {
568
+ edge?: string | undefined;
569
+ icp?: string | undefined;
570
+ channel?: string | undefined;
571
+ pricing?: string | undefined;
572
+ };
573
+ brief?: string | undefined;
574
+ }, {
575
+ ok: boolean;
576
+ error: string | undefined;
577
+ plan?: undefined;
578
+ } | {
579
+ ok: boolean;
580
+ plan: GtmPlan | undefined;
581
+ error?: undefined;
582
+ }>;
583
+ launch_kit: ai.Tool<{
584
+ buildId?: string | undefined;
585
+ }, {
586
+ ok: boolean;
587
+ error: string | undefined;
588
+ kit?: undefined;
589
+ } | {
590
+ ok: boolean;
591
+ kit: LaunchKit | undefined;
592
+ error?: undefined;
593
+ }>;
594
+ generate_legal: ai.Tool<{
595
+ kind: "terms" | "privacy" | "cookie" | "refund";
596
+ brief?: string | undefined;
597
+ businessName?: string | undefined;
598
+ }, {
599
+ ok: boolean;
600
+ error: string | undefined;
601
+ kind?: undefined;
602
+ markdown?: undefined;
603
+ } | {
604
+ ok: boolean;
605
+ kind: "terms" | "privacy" | "cookie" | "refund";
606
+ markdown: string | undefined;
607
+ error?: undefined;
608
+ }>;
609
+ launch_metrics: ai.Tool<{}, {
610
+ ok: boolean;
611
+ error: string | undefined;
612
+ metrics?: undefined;
613
+ } | {
614
+ ok: boolean;
615
+ metrics: LaunchMetrics | undefined;
616
+ error?: undefined;
617
+ }>;
618
+ waitlist_count: ai.Tool<{
619
+ buildId?: string | undefined;
620
+ }, {
621
+ ok: boolean;
622
+ error: string | undefined;
623
+ count?: undefined;
624
+ } | {
625
+ ok: boolean;
626
+ count: number | undefined;
627
+ error?: undefined;
628
+ }>;
629
+ list_businesses: ai.Tool<{}, {
630
+ ok: boolean;
631
+ error: string | undefined;
632
+ businesses?: undefined;
633
+ } | {
634
+ ok: boolean;
635
+ businesses: Record<string, unknown>[] | undefined;
636
+ error?: undefined;
637
+ }>;
638
+ setup_payments: ai.Tool<{
639
+ action: "status" | "setup";
640
+ tiers: {
641
+ name: string;
642
+ price: string;
643
+ period?: string | undefined;
644
+ features?: string[] | undefined;
645
+ }[];
646
+ buildId?: string | undefined;
647
+ }, {
648
+ ok: boolean;
649
+ error: string | undefined;
650
+ } | {
651
+ ok: boolean;
652
+ error?: undefined;
653
+ }>;
654
+ attach_domain: ai.Tool<{
655
+ domain: string;
656
+ status?: "available" | "connected" | undefined;
657
+ buildId?: string | undefined;
658
+ }, {
659
+ ok: boolean;
660
+ error: string | undefined;
661
+ } | {
662
+ ok: boolean;
663
+ error?: undefined;
664
+ }>;
665
+ generate_campaign: ai.Tool<{
666
+ network: "meta" | "google" | "linkedin" | "tiktok" | "reddit";
667
+ prompt?: string | undefined;
668
+ buildId?: string | undefined;
669
+ objective?: string | undefined;
670
+ budgetDaily?: number | undefined;
671
+ destinationUrl?: string | undefined;
672
+ withImages?: boolean | undefined;
673
+ }, {
674
+ ok: boolean;
675
+ error: string | undefined;
676
+ } | {
677
+ ok: boolean;
678
+ error?: undefined;
679
+ }>;
680
+ campaign_metrics: ai.Tool<{
681
+ network: "meta" | "google" | "linkedin" | "tiktok" | "reddit";
682
+ buildId?: string | undefined;
683
+ }, {
684
+ ok: boolean;
685
+ error: string | undefined;
686
+ } | {
687
+ ok: boolean;
688
+ error?: undefined;
689
+ }>;
690
+ send_launch_email: ai.Tool<{
691
+ subject: string;
692
+ body: string;
693
+ brandName?: string | undefined;
694
+ to?: string | undefined;
695
+ when?: string | undefined;
696
+ }, {
697
+ ok: boolean;
698
+ error: string | undefined;
699
+ } | {
700
+ ok: boolean;
701
+ error?: undefined;
702
+ }>;
703
+ push_campaign: ai.Tool<{
704
+ campaign: {
705
+ network: "meta" | "google" | "linkedin" | "tiktok" | "reddit";
706
+ objective: string;
707
+ adSet: {
708
+ budgetDaily: number;
709
+ audience: {
710
+ locations?: string[] | undefined;
711
+ ageMin?: number | undefined;
712
+ ageMax?: number | undefined;
713
+ interests?: string[] | undefined;
714
+ keywords?: string[] | undefined;
715
+ jobTitles?: string[] | undefined;
716
+ } & {
717
+ [k: string]: unknown;
718
+ };
719
+ optimizationGoal?: string | undefined;
720
+ };
721
+ name?: string | undefined;
722
+ utm?: string | undefined;
723
+ creatives?: Record<string, unknown>[] | undefined;
724
+ } & {
725
+ [k: string]: unknown;
726
+ };
727
+ buildId?: string | undefined;
728
+ destinationUrl?: string | undefined;
729
+ }, {
730
+ ok: boolean;
731
+ error: string | undefined;
732
+ } | {
733
+ ok: boolean;
734
+ error?: undefined;
735
+ }>;
736
+ operator_next_move: ai.Tool<{
737
+ steps: {
738
+ status: "done" | "partial" | "todo";
739
+ id: string;
740
+ label: string;
741
+ detail?: string | undefined;
742
+ isGate?: boolean | undefined;
743
+ }[];
744
+ buildId?: string | undefined;
745
+ brief?: string | undefined;
746
+ nextStepId?: string | undefined;
747
+ }, {
748
+ ok: boolean;
749
+ error: string | undefined;
750
+ advice?: undefined;
751
+ } | {
752
+ ok: boolean;
753
+ advice: OperatorAdvice | undefined;
754
+ error?: undefined;
755
+ }>;
756
+ regenerate_canvas_section: ai.Tool<{
757
+ section: {
758
+ id: string;
759
+ title: string;
760
+ lane: string;
761
+ render: string;
762
+ summary: string;
763
+ items: {
764
+ label: string;
765
+ detail?: string | undefined;
766
+ }[];
767
+ };
768
+ instruction: string;
769
+ brief?: string | undefined;
770
+ planIntent?: string | undefined;
771
+ }, {
772
+ ok: boolean;
773
+ error: string | undefined;
774
+ section?: undefined;
775
+ } | {
776
+ ok: boolean;
777
+ section: GtmSection | undefined;
778
+ error?: undefined;
779
+ }>;
780
+ integrate_artifacts: ai.Tool<{
781
+ files: {
782
+ path: string;
783
+ content: string;
784
+ }[];
785
+ buildId?: string | undefined;
786
+ }, {
787
+ ok: boolean;
788
+ error: string | undefined;
789
+ } | {
790
+ ok: boolean;
791
+ error?: undefined;
792
+ }>;
793
+ update_business: ai.Tool<{
794
+ patch: Record<string, Record<string, unknown>>;
795
+ buildId?: string | undefined;
796
+ }, {
797
+ ok: boolean;
798
+ error: string | undefined;
799
+ business?: undefined;
800
+ readiness?: undefined;
801
+ } | {
802
+ ok: boolean;
803
+ business: Record<string, unknown> | undefined;
804
+ readiness: unknown;
805
+ error?: undefined;
806
+ }>;
807
+ build_random_apps: ai.Tool<{
808
+ count: number;
809
+ install: boolean;
810
+ keep: boolean;
811
+ boot: boolean;
812
+ idea?: string | undefined;
813
+ }, {
814
+ ok: boolean;
815
+ error: string;
816
+ requested?: undefined;
817
+ built?: undefined;
818
+ apps?: undefined;
819
+ note?: undefined;
820
+ } | {
821
+ ok: boolean;
822
+ requested: number;
823
+ built: number;
824
+ apps: {
825
+ n: number;
826
+ name: string;
827
+ theme: string;
828
+ idea: string;
829
+ ok: boolean;
830
+ verdict?: unknown;
831
+ trust?: unknown;
832
+ buildId?: unknown;
833
+ dir?: string;
834
+ liveUrl?: string;
835
+ paywalled?: boolean;
836
+ error?: string;
837
+ }[];
838
+ note: string;
839
+ error?: undefined;
840
+ }>;
248
841
  verify_contract: ai.Tool<{
249
842
  projectDir: string;
250
843
  contract: string;
844
+ address?: string | undefined;
251
845
  property?: "conservation" | "no-value-extraction" | "reentrancy-safety" | "asset-conservation" | "monotonic-supply" | "access-control" | "initialization-safety" | "pausability" | "supply-cap" | "allowance-correctness" | undefined;
252
846
  certPath?: string | undefined;
253
- address?: string | undefined;
254
847
  rpc?: string | undefined;
255
848
  }, {
256
849
  ok: boolean;
package/dist/index.js CHANGED
@@ -49,7 +49,7 @@ import {
49
49
  resolveModelKey,
50
50
  severityRank,
51
51
  supportsThinking
52
- } from "./chunk-7NZ77Q7Q.js";
52
+ } from "./chunk-TLYCOIEA.js";
53
53
 
54
54
  // src/prompts/template.ts
55
55
  var PLACEHOLDER = /\{\{([A-Za-z0-9_.]+)\}\}/g;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wholestack",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "Wholestack — a pro-grade conversational terminal agent for the Wholestack codegen engine. Talk to it in plain language: it writes ISL, generates full-stack or Solidity apps, and proves them with ShipGate. Browser login, membership-gated builds, slash commands, sessions, plan mode, diffs, MCP, plugins.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -42,11 +42,18 @@
42
42
  },
43
43
  "files": [
44
44
  "dist",
45
+ "skills",
45
46
  "README.md"
46
47
  ],
47
48
  "engines": {
48
49
  "node": ">=20.0.0"
49
50
  },
51
+ "scripts": {
52
+ "build": "tsup src/index.ts src/cli.ts --format esm --dts --clean --external playwright && node -e \"require('fs').chmodSync('dist/cli.js','755')\"",
53
+ "dev": "tsx src/cli.ts",
54
+ "typecheck": "tsc --noEmit",
55
+ "clean": "rimraf dist"
56
+ },
50
57
  "dependencies": {
51
58
  "@ai-sdk/openai": "^3.0.64",
52
59
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -55,22 +62,19 @@
55
62
  "fast-glob": "^3.3.3",
56
63
  "zod": "^3.25.76"
57
64
  },
65
+ "optionalDependencies": {
66
+ "playwright": "^1.60.0"
67
+ },
58
68
  "devDependencies": {
69
+ "@isl-lang/zeta-models": "workspace:*",
59
70
  "@types/diff": "^5.2.0",
60
71
  "@types/node": "^20.10.0",
61
72
  "tsup": "^8.0.1",
62
73
  "tsx": "^4.7.0",
63
74
  "typescript": "^5.3.3",
64
- "rimraf": "^5.0.5",
65
- "@isl-lang/zeta-models": "1.0.0"
75
+ "rimraf": "^5.0.5"
66
76
  },
67
77
  "author": "Wholestack",
68
78
  "license": "MIT",
69
- "sideEffects": false,
70
- "scripts": {
71
- "build": "tsup src/index.ts src/cli.ts --format esm --dts --clean && node -e \"require('fs').chmodSync('dist/cli.js','755')\"",
72
- "dev": "tsx src/cli.ts",
73
- "typecheck": "tsc --noEmit",
74
- "clean": "rimraf dist"
75
- }
76
- }
79
+ "sideEffects": false
80
+ }