@sweny-ai/core 0.1.143 → 0.1.144

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/schema.d.ts CHANGED
@@ -822,6 +822,81 @@ export declare const nodeRetryZ: z.ZodObject<{
822
822
  reflect: string;
823
823
  } | undefined;
824
824
  }>;
825
+ /**
826
+ * Node / workflow permissions (#365): `read` | `write`, or an object with
827
+ * `access`, `deny` (portable tool classes) and `strict`. The object form must
828
+ * declare at least one key.
829
+ */
830
+ export declare const nodePermissionsZ: z.ZodUnion<[z.ZodEnum<["read", "write"]>, z.ZodEffects<z.ZodObject<{
831
+ access: z.ZodOptional<z.ZodEnum<["read", "write"]>>;
832
+ deny: z.ZodOptional<z.ZodArray<z.ZodEnum<["shell", "write", "edit", "net", "subagent"]>, "many">>;
833
+ strict: z.ZodOptional<z.ZodBoolean>;
834
+ }, "strict", z.ZodTypeAny, {
835
+ strict?: boolean | undefined;
836
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
837
+ access?: "write" | "read" | undefined;
838
+ }, {
839
+ strict?: boolean | undefined;
840
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
841
+ access?: "write" | "read" | undefined;
842
+ }>, {
843
+ strict?: boolean | undefined;
844
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
845
+ access?: "write" | "read" | undefined;
846
+ }, {
847
+ strict?: boolean | undefined;
848
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
849
+ access?: "write" | "read" | undefined;
850
+ }>]>;
851
+ /** One typed write intent a node may emit (#365). */
852
+ export declare const safeOutputDeclarationZ: z.ZodObject<{
853
+ type: z.ZodEnum<["comment", "issue", "pr", "label"]>;
854
+ via: z.ZodOptional<z.ZodString>;
855
+ max: z.ZodOptional<z.ZodNumber>;
856
+ target: z.ZodOptional<z.ZodString>;
857
+ title_prefix: z.ZodOptional<z.ZodString>;
858
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
859
+ expires: z.ZodOptional<z.ZodString>;
860
+ }, "strict", z.ZodTypeAny, {
861
+ type: "comment" | "issue" | "pr" | "label";
862
+ labels?: string[] | undefined;
863
+ max?: number | undefined;
864
+ via?: string | undefined;
865
+ target?: string | undefined;
866
+ title_prefix?: string | undefined;
867
+ expires?: string | undefined;
868
+ }, {
869
+ type: "comment" | "issue" | "pr" | "label";
870
+ labels?: string[] | undefined;
871
+ max?: number | undefined;
872
+ via?: string | undefined;
873
+ target?: string | undefined;
874
+ title_prefix?: string | undefined;
875
+ expires?: string | undefined;
876
+ }>;
877
+ /** Workflow-level safe-output policy (#365): the ceiling and run-wide limits. */
878
+ export declare const safeOutputsPolicyZ: z.ZodObject<{
879
+ allow: z.ZodOptional<z.ZodArray<z.ZodEnum<["comment", "issue", "pr", "label"]>, "many">>;
880
+ max: z.ZodOptional<z.ZodNumber>;
881
+ staged: z.ZodOptional<z.ZodBoolean>;
882
+ trusted_actors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
883
+ trusted_associations: z.ZodOptional<z.ZodArray<z.ZodEnum<["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIME_CONTRIBUTOR", "FIRST_TIMER", "NONE"]>, "many">>;
884
+ screen: z.ZodOptional<z.ZodBoolean>;
885
+ }, "strict", z.ZodTypeAny, {
886
+ staged?: boolean | undefined;
887
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
888
+ max?: number | undefined;
889
+ trusted_actors?: string[] | undefined;
890
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
891
+ screen?: boolean | undefined;
892
+ }, {
893
+ staged?: boolean | undefined;
894
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
895
+ max?: number | undefined;
896
+ trusted_actors?: string[] | undefined;
897
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
898
+ screen?: boolean | undefined;
899
+ }>;
825
900
  export declare const nodeZ: z.ZodObject<{
826
901
  name: z.ZodString;
827
902
  instruction: z.ZodUnion<[z.ZodString, z.ZodObject<{
@@ -868,6 +943,52 @@ export declare const nodeZ: z.ZodObject<{
868
943
  }>>;
869
944
  fail_soft: z.ZodOptional<z.ZodBoolean>;
870
945
  on_fail: z.ZodOptional<z.ZodEnum<["halt", "continue"]>>;
946
+ permissions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["read", "write"]>, z.ZodEffects<z.ZodObject<{
947
+ access: z.ZodOptional<z.ZodEnum<["read", "write"]>>;
948
+ deny: z.ZodOptional<z.ZodArray<z.ZodEnum<["shell", "write", "edit", "net", "subagent"]>, "many">>;
949
+ strict: z.ZodOptional<z.ZodBoolean>;
950
+ }, "strict", z.ZodTypeAny, {
951
+ strict?: boolean | undefined;
952
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
953
+ access?: "write" | "read" | undefined;
954
+ }, {
955
+ strict?: boolean | undefined;
956
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
957
+ access?: "write" | "read" | undefined;
958
+ }>, {
959
+ strict?: boolean | undefined;
960
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
961
+ access?: "write" | "read" | undefined;
962
+ }, {
963
+ strict?: boolean | undefined;
964
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
965
+ access?: "write" | "read" | undefined;
966
+ }>]>>;
967
+ outputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
968
+ type: z.ZodEnum<["comment", "issue", "pr", "label"]>;
969
+ via: z.ZodOptional<z.ZodString>;
970
+ max: z.ZodOptional<z.ZodNumber>;
971
+ target: z.ZodOptional<z.ZodString>;
972
+ title_prefix: z.ZodOptional<z.ZodString>;
973
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
974
+ expires: z.ZodOptional<z.ZodString>;
975
+ }, "strict", z.ZodTypeAny, {
976
+ type: "comment" | "issue" | "pr" | "label";
977
+ labels?: string[] | undefined;
978
+ max?: number | undefined;
979
+ via?: string | undefined;
980
+ target?: string | undefined;
981
+ title_prefix?: string | undefined;
982
+ expires?: string | undefined;
983
+ }, {
984
+ type: "comment" | "issue" | "pr" | "label";
985
+ labels?: string[] | undefined;
986
+ max?: number | undefined;
987
+ via?: string | undefined;
988
+ target?: string | undefined;
989
+ title_prefix?: string | undefined;
990
+ expires?: string | undefined;
991
+ }>, "many">>;
871
992
  rules: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
872
993
  inline: z.ZodString;
873
994
  }, "strict", z.ZodTypeAny, {
@@ -1275,6 +1396,20 @@ export declare const nodeZ: z.ZodObject<{
1275
1396
  max_turns?: number | undefined;
1276
1397
  disallowed_tools?: string[] | undefined;
1277
1398
  fail_soft?: boolean | undefined;
1399
+ permissions?: "write" | "read" | {
1400
+ strict?: boolean | undefined;
1401
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1402
+ access?: "write" | "read" | undefined;
1403
+ } | undefined;
1404
+ outputs?: {
1405
+ type: "comment" | "issue" | "pr" | "label";
1406
+ labels?: string[] | undefined;
1407
+ max?: number | undefined;
1408
+ via?: string | undefined;
1409
+ target?: string | undefined;
1410
+ title_prefix?: string | undefined;
1411
+ expires?: string | undefined;
1412
+ }[] | undefined;
1278
1413
  rules?: (string | {
1279
1414
  inline: string;
1280
1415
  } | {
@@ -1371,6 +1506,20 @@ export declare const nodeZ: z.ZodObject<{
1371
1506
  max_turns?: number | undefined;
1372
1507
  disallowed_tools?: string[] | undefined;
1373
1508
  fail_soft?: boolean | undefined;
1509
+ permissions?: "write" | "read" | {
1510
+ strict?: boolean | undefined;
1511
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1512
+ access?: "write" | "read" | undefined;
1513
+ } | undefined;
1514
+ outputs?: {
1515
+ type: "comment" | "issue" | "pr" | "label";
1516
+ labels?: string[] | undefined;
1517
+ max?: number | undefined;
1518
+ via?: string | undefined;
1519
+ target?: string | undefined;
1520
+ title_prefix?: string | undefined;
1521
+ expires?: string | undefined;
1522
+ }[] | undefined;
1374
1523
  rules?: (string | {
1375
1524
  inline: string;
1376
1525
  } | {
@@ -1528,6 +1677,52 @@ export declare const workflowZ: z.ZodObject<{
1528
1677
  }>>;
1529
1678
  fail_soft: z.ZodOptional<z.ZodBoolean>;
1530
1679
  on_fail: z.ZodOptional<z.ZodEnum<["halt", "continue"]>>;
1680
+ permissions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["read", "write"]>, z.ZodEffects<z.ZodObject<{
1681
+ access: z.ZodOptional<z.ZodEnum<["read", "write"]>>;
1682
+ deny: z.ZodOptional<z.ZodArray<z.ZodEnum<["shell", "write", "edit", "net", "subagent"]>, "many">>;
1683
+ strict: z.ZodOptional<z.ZodBoolean>;
1684
+ }, "strict", z.ZodTypeAny, {
1685
+ strict?: boolean | undefined;
1686
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1687
+ access?: "write" | "read" | undefined;
1688
+ }, {
1689
+ strict?: boolean | undefined;
1690
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1691
+ access?: "write" | "read" | undefined;
1692
+ }>, {
1693
+ strict?: boolean | undefined;
1694
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1695
+ access?: "write" | "read" | undefined;
1696
+ }, {
1697
+ strict?: boolean | undefined;
1698
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
1699
+ access?: "write" | "read" | undefined;
1700
+ }>]>>;
1701
+ outputs: z.ZodOptional<z.ZodArray<z.ZodObject<{
1702
+ type: z.ZodEnum<["comment", "issue", "pr", "label"]>;
1703
+ via: z.ZodOptional<z.ZodString>;
1704
+ max: z.ZodOptional<z.ZodNumber>;
1705
+ target: z.ZodOptional<z.ZodString>;
1706
+ title_prefix: z.ZodOptional<z.ZodString>;
1707
+ labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1708
+ expires: z.ZodOptional<z.ZodString>;
1709
+ }, "strict", z.ZodTypeAny, {
1710
+ type: "comment" | "issue" | "pr" | "label";
1711
+ labels?: string[] | undefined;
1712
+ max?: number | undefined;
1713
+ via?: string | undefined;
1714
+ target?: string | undefined;
1715
+ title_prefix?: string | undefined;
1716
+ expires?: string | undefined;
1717
+ }, {
1718
+ type: "comment" | "issue" | "pr" | "label";
1719
+ labels?: string[] | undefined;
1720
+ max?: number | undefined;
1721
+ via?: string | undefined;
1722
+ target?: string | undefined;
1723
+ title_prefix?: string | undefined;
1724
+ expires?: string | undefined;
1725
+ }>, "many">>;
1531
1726
  rules: z.ZodOptional<z.ZodUnion<[z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
1532
1727
  inline: z.ZodString;
1533
1728
  }, "strict", z.ZodTypeAny, {
@@ -1935,6 +2130,20 @@ export declare const workflowZ: z.ZodObject<{
1935
2130
  max_turns?: number | undefined;
1936
2131
  disallowed_tools?: string[] | undefined;
1937
2132
  fail_soft?: boolean | undefined;
2133
+ permissions?: "write" | "read" | {
2134
+ strict?: boolean | undefined;
2135
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2136
+ access?: "write" | "read" | undefined;
2137
+ } | undefined;
2138
+ outputs?: {
2139
+ type: "comment" | "issue" | "pr" | "label";
2140
+ labels?: string[] | undefined;
2141
+ max?: number | undefined;
2142
+ via?: string | undefined;
2143
+ target?: string | undefined;
2144
+ title_prefix?: string | undefined;
2145
+ expires?: string | undefined;
2146
+ }[] | undefined;
1938
2147
  rules?: (string | {
1939
2148
  inline: string;
1940
2149
  } | {
@@ -2031,6 +2240,20 @@ export declare const workflowZ: z.ZodObject<{
2031
2240
  max_turns?: number | undefined;
2032
2241
  disallowed_tools?: string[] | undefined;
2033
2242
  fail_soft?: boolean | undefined;
2243
+ permissions?: "write" | "read" | {
2244
+ strict?: boolean | undefined;
2245
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2246
+ access?: "write" | "read" | undefined;
2247
+ } | undefined;
2248
+ outputs?: {
2249
+ type: "comment" | "issue" | "pr" | "label";
2250
+ labels?: string[] | undefined;
2251
+ max?: number | undefined;
2252
+ via?: string | undefined;
2253
+ target?: string | undefined;
2254
+ title_prefix?: string | undefined;
2255
+ expires?: string | undefined;
2256
+ }[] | undefined;
2034
2257
  rules?: (string | {
2035
2258
  inline: string;
2036
2259
  } | {
@@ -2291,6 +2514,49 @@ export declare const workflowZ: z.ZodObject<{
2291
2514
  default?: unknown;
2292
2515
  enum?: unknown[] | undefined;
2293
2516
  }>>>;
2517
+ permissions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["read", "write"]>, z.ZodEffects<z.ZodObject<{
2518
+ access: z.ZodOptional<z.ZodEnum<["read", "write"]>>;
2519
+ deny: z.ZodOptional<z.ZodArray<z.ZodEnum<["shell", "write", "edit", "net", "subagent"]>, "many">>;
2520
+ strict: z.ZodOptional<z.ZodBoolean>;
2521
+ }, "strict", z.ZodTypeAny, {
2522
+ strict?: boolean | undefined;
2523
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2524
+ access?: "write" | "read" | undefined;
2525
+ }, {
2526
+ strict?: boolean | undefined;
2527
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2528
+ access?: "write" | "read" | undefined;
2529
+ }>, {
2530
+ strict?: boolean | undefined;
2531
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2532
+ access?: "write" | "read" | undefined;
2533
+ }, {
2534
+ strict?: boolean | undefined;
2535
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2536
+ access?: "write" | "read" | undefined;
2537
+ }>]>>;
2538
+ safe_outputs: z.ZodOptional<z.ZodObject<{
2539
+ allow: z.ZodOptional<z.ZodArray<z.ZodEnum<["comment", "issue", "pr", "label"]>, "many">>;
2540
+ max: z.ZodOptional<z.ZodNumber>;
2541
+ staged: z.ZodOptional<z.ZodBoolean>;
2542
+ trusted_actors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2543
+ trusted_associations: z.ZodOptional<z.ZodArray<z.ZodEnum<["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIME_CONTRIBUTOR", "FIRST_TIMER", "NONE"]>, "many">>;
2544
+ screen: z.ZodOptional<z.ZodBoolean>;
2545
+ }, "strict", z.ZodTypeAny, {
2546
+ staged?: boolean | undefined;
2547
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
2548
+ max?: number | undefined;
2549
+ trusted_actors?: string[] | undefined;
2550
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
2551
+ screen?: boolean | undefined;
2552
+ }, {
2553
+ staged?: boolean | undefined;
2554
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
2555
+ max?: number | undefined;
2556
+ trusted_actors?: string[] | undefined;
2557
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
2558
+ screen?: boolean | undefined;
2559
+ }>>;
2294
2560
  }, "strip", z.ZodTypeAny, {
2295
2561
  description: string;
2296
2562
  name: string;
@@ -2329,6 +2595,20 @@ export declare const workflowZ: z.ZodObject<{
2329
2595
  max_turns?: number | undefined;
2330
2596
  disallowed_tools?: string[] | undefined;
2331
2597
  fail_soft?: boolean | undefined;
2598
+ permissions?: "write" | "read" | {
2599
+ strict?: boolean | undefined;
2600
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2601
+ access?: "write" | "read" | undefined;
2602
+ } | undefined;
2603
+ outputs?: {
2604
+ type: "comment" | "issue" | "pr" | "label";
2605
+ labels?: string[] | undefined;
2606
+ max?: number | undefined;
2607
+ via?: string | undefined;
2608
+ target?: string | undefined;
2609
+ title_prefix?: string | undefined;
2610
+ expires?: string | undefined;
2611
+ }[] | undefined;
2332
2612
  rules?: (string | {
2333
2613
  inline: string;
2334
2614
  } | {
@@ -2413,6 +2693,11 @@ export declare const workflowZ: z.ZodObject<{
2413
2693
  }[];
2414
2694
  entry: string;
2415
2695
  model?: string | undefined;
2696
+ permissions?: "write" | "read" | {
2697
+ strict?: boolean | undefined;
2698
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2699
+ access?: "write" | "read" | undefined;
2700
+ } | undefined;
2416
2701
  rules?: (string | {
2417
2702
  inline: string;
2418
2703
  } | {
@@ -2439,6 +2724,14 @@ export declare const workflowZ: z.ZodObject<{
2439
2724
  default?: unknown;
2440
2725
  enum?: unknown[] | undefined;
2441
2726
  }> | undefined;
2727
+ safe_outputs?: {
2728
+ staged?: boolean | undefined;
2729
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
2730
+ max?: number | undefined;
2731
+ trusted_actors?: string[] | undefined;
2732
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
2733
+ screen?: boolean | undefined;
2734
+ } | undefined;
2442
2735
  }, {
2443
2736
  name: string;
2444
2737
  id: string;
@@ -2463,6 +2756,20 @@ export declare const workflowZ: z.ZodObject<{
2463
2756
  max_turns?: number | undefined;
2464
2757
  disallowed_tools?: string[] | undefined;
2465
2758
  fail_soft?: boolean | undefined;
2759
+ permissions?: "write" | "read" | {
2760
+ strict?: boolean | undefined;
2761
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2762
+ access?: "write" | "read" | undefined;
2763
+ } | undefined;
2764
+ outputs?: {
2765
+ type: "comment" | "issue" | "pr" | "label";
2766
+ labels?: string[] | undefined;
2767
+ max?: number | undefined;
2768
+ via?: string | undefined;
2769
+ target?: string | undefined;
2770
+ title_prefix?: string | undefined;
2771
+ expires?: string | undefined;
2772
+ }[] | undefined;
2466
2773
  rules?: (string | {
2467
2774
  inline: string;
2468
2775
  } | {
@@ -2561,6 +2868,11 @@ export declare const workflowZ: z.ZodObject<{
2561
2868
  env?: Record<string, string> | undefined;
2562
2869
  } | undefined;
2563
2870
  }> | undefined;
2871
+ permissions?: "write" | "read" | {
2872
+ strict?: boolean | undefined;
2873
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2874
+ access?: "write" | "read" | undefined;
2875
+ } | undefined;
2564
2876
  rules?: (string | {
2565
2877
  inline: string;
2566
2878
  } | {
@@ -2587,6 +2899,14 @@ export declare const workflowZ: z.ZodObject<{
2587
2899
  default?: unknown;
2588
2900
  enum?: unknown[] | undefined;
2589
2901
  }> | undefined;
2902
+ safe_outputs?: {
2903
+ staged?: boolean | undefined;
2904
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
2905
+ max?: number | undefined;
2906
+ trusted_actors?: string[] | undefined;
2907
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
2908
+ screen?: boolean | undefined;
2909
+ } | undefined;
2590
2910
  }>;
2591
2911
  /**
2592
2912
  * Detect legacy `verify:` blocks before parse and throw a clear migration
@@ -2639,6 +2959,20 @@ export declare function parseWorkflow(raw: unknown): {
2639
2959
  max_turns?: number | undefined;
2640
2960
  disallowed_tools?: string[] | undefined;
2641
2961
  fail_soft?: boolean | undefined;
2962
+ permissions?: "write" | "read" | {
2963
+ strict?: boolean | undefined;
2964
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
2965
+ access?: "write" | "read" | undefined;
2966
+ } | undefined;
2967
+ outputs?: {
2968
+ type: "comment" | "issue" | "pr" | "label";
2969
+ labels?: string[] | undefined;
2970
+ max?: number | undefined;
2971
+ via?: string | undefined;
2972
+ target?: string | undefined;
2973
+ title_prefix?: string | undefined;
2974
+ expires?: string | undefined;
2975
+ }[] | undefined;
2642
2976
  rules?: (string | {
2643
2977
  inline: string;
2644
2978
  } | {
@@ -2723,6 +3057,11 @@ export declare function parseWorkflow(raw: unknown): {
2723
3057
  }[];
2724
3058
  entry: string;
2725
3059
  model?: string | undefined;
3060
+ permissions?: "write" | "read" | {
3061
+ strict?: boolean | undefined;
3062
+ deny?: ("shell" | "write" | "edit" | "net" | "subagent")[] | undefined;
3063
+ access?: "write" | "read" | undefined;
3064
+ } | undefined;
2726
3065
  rules?: (string | {
2727
3066
  inline: string;
2728
3067
  } | {
@@ -2749,9 +3088,17 @@ export declare function parseWorkflow(raw: unknown): {
2749
3088
  default?: unknown;
2750
3089
  enum?: unknown[] | undefined;
2751
3090
  }> | undefined;
3091
+ safe_outputs?: {
3092
+ staged?: boolean | undefined;
3093
+ allow?: ("comment" | "issue" | "pr" | "label")[] | undefined;
3094
+ max?: number | undefined;
3095
+ trusted_actors?: string[] | undefined;
3096
+ trusted_associations?: ("OWNER" | "MEMBER" | "COLLABORATOR" | "CONTRIBUTOR" | "FIRST_TIME_CONTRIBUTOR" | "FIRST_TIMER" | "NONE")[] | undefined;
3097
+ screen?: boolean | undefined;
3098
+ } | undefined;
2752
3099
  };
2753
3100
  export interface WorkflowError {
2754
- code: "MISSING_ENTRY" | "UNKNOWN_EDGE_SOURCE" | "UNKNOWN_EDGE_TARGET" | "UNREACHABLE_NODE" | "UNKNOWN_SKILL" | "SELF_LOOP" | "UNBOUNDED_CYCLE" | "AMBIGUOUS_EDGES" | "UNSUPPORTED_EVAL_POLICY" | "INVALID_INLINE_SKILL" | "EDGE_ITERATIONS_EXCEEDED" | "RETRY_MAX_EXCEEDED";
3101
+ code: "MISSING_ENTRY" | "UNKNOWN_EDGE_SOURCE" | "UNKNOWN_EDGE_TARGET" | "UNREACHABLE_NODE" | "UNKNOWN_SKILL" | "SELF_LOOP" | "UNBOUNDED_CYCLE" | "AMBIGUOUS_EDGES" | "UNSUPPORTED_EVAL_POLICY" | "INVALID_INLINE_SKILL" | "EDGE_ITERATIONS_EXCEEDED" | "RETRY_MAX_EXCEEDED" | "PERMISSION_CEILING" | "OUTPUT_NOT_ALLOWED" | "DUPLICATE_OUTPUT" | "UNSUPPORTED_OUTPUT";
2755
3102
  message: string;
2756
3103
  nodeId?: string;
2757
3104
  }
@@ -2981,6 +3328,83 @@ export declare const workflowJsonSchema: {
2981
3328
  };
2982
3329
  }];
2983
3330
  };
3331
+ readonly Permissions: {
3332
+ readonly description: "What a node's agent may do. 'read' runs it read-only: only access: read skill tools, no external skill MCP servers, no shell, file-write, edit, fetch or subagent built-ins. On the workflow it is the default and the ceiling for every node.";
3333
+ readonly oneOf: readonly [{
3334
+ readonly type: "string";
3335
+ readonly enum: readonly ["read", "write"];
3336
+ }, {
3337
+ readonly type: "object";
3338
+ readonly additionalProperties: false;
3339
+ readonly minProperties: 1;
3340
+ readonly properties: {
3341
+ readonly access: {
3342
+ readonly type: "string";
3343
+ readonly enum: readonly ["read", "write"];
3344
+ };
3345
+ readonly deny: {
3346
+ readonly type: "array";
3347
+ readonly items: {
3348
+ readonly type: "string";
3349
+ readonly enum: readonly ["shell", "write", "edit", "net", "subagent"];
3350
+ };
3351
+ readonly minItems: 1;
3352
+ readonly description: "Built-in tool classes the agent must not have, compiled per harness.";
3353
+ };
3354
+ readonly strict: {
3355
+ readonly type: "boolean";
3356
+ readonly description: "Exclusive MCP (only the servers sweny injects), and refuse the node on a harness that cannot enforce the policy.";
3357
+ };
3358
+ };
3359
+ }];
3360
+ };
3361
+ readonly SafeOutput: {
3362
+ readonly type: "object";
3363
+ readonly required: readonly ["type"];
3364
+ readonly additionalProperties: false;
3365
+ readonly properties: {
3366
+ readonly type: {
3367
+ readonly type: "string";
3368
+ readonly enum: readonly ["comment", "issue", "pr", "label"];
3369
+ };
3370
+ readonly via: {
3371
+ readonly type: "string";
3372
+ readonly minLength: 1;
3373
+ readonly description: "Skill that applies the write. Default: the first node skill that supports the type.";
3374
+ };
3375
+ readonly max: {
3376
+ readonly type: "integer";
3377
+ readonly minimum: 1;
3378
+ readonly maximum: 100;
3379
+ readonly description: "Max writes of this type from this node per run. Default 1.";
3380
+ };
3381
+ readonly target: {
3382
+ readonly type: "string";
3383
+ readonly minLength: 1;
3384
+ readonly description: "Pinned target (GitHub owner/repo, Linear team id). GitHub default: GITHUB_REPOSITORY.";
3385
+ };
3386
+ readonly title_prefix: {
3387
+ readonly type: "string";
3388
+ readonly minLength: 1;
3389
+ readonly maxLength: 64;
3390
+ readonly description: "Prepended to issue and PR titles that do not already start with it.";
3391
+ };
3392
+ readonly labels: {
3393
+ readonly type: "array";
3394
+ readonly items: {
3395
+ readonly type: "string";
3396
+ readonly minLength: 1;
3397
+ };
3398
+ readonly minItems: 1;
3399
+ readonly description: "issue / pr: labels always added. label: the only labels the agent may add.";
3400
+ };
3401
+ readonly expires: {
3402
+ readonly type: "string";
3403
+ readonly pattern: string;
3404
+ readonly description: "Drop an intent older than this when the write stage runs (e.g. 30m, 2h, 7d).";
3405
+ };
3406
+ };
3407
+ };
2984
3408
  };
2985
3409
  readonly properties: {
2986
3410
  readonly id: {
@@ -3028,6 +3452,58 @@ export declare const workflowJsonSchema: {
3028
3452
  readonly minLength: 1;
3029
3453
  readonly description: "Default execution model for every node. Overridable per-node. Free-text passthrough (no registry); resolved as node.model ?? workflow.model ?? executor default.";
3030
3454
  };
3455
+ readonly permissions: {
3456
+ readonly $ref: "#/$defs/Permissions";
3457
+ readonly description: "Default and ceiling for every node's permissions. Absent: write.";
3458
+ };
3459
+ readonly safe_outputs: {
3460
+ readonly type: "object";
3461
+ readonly description: "Workflow-level safe-output policy: the ceiling on output types and run-wide limits.";
3462
+ readonly additionalProperties: false;
3463
+ readonly properties: {
3464
+ readonly allow: {
3465
+ readonly type: "array";
3466
+ readonly items: {
3467
+ readonly type: "string";
3468
+ readonly enum: readonly ["comment", "issue", "pr", "label"];
3469
+ };
3470
+ readonly minItems: 1;
3471
+ readonly description: "Output types any node may declare. Absent: all types.";
3472
+ };
3473
+ readonly max: {
3474
+ readonly type: "integer";
3475
+ readonly minimum: 1;
3476
+ readonly maximum: 100;
3477
+ readonly description: "Total writes per run across all nodes.";
3478
+ };
3479
+ readonly staged: {
3480
+ readonly type: "boolean";
3481
+ readonly description: "Preview every write and apply none.";
3482
+ };
3483
+ readonly trusted_actors: {
3484
+ readonly type: "array";
3485
+ readonly items: {
3486
+ readonly type: "string";
3487
+ readonly minLength: 1;
3488
+ };
3489
+ readonly minItems: 1;
3490
+ readonly description: "GitHub logins whose runs may write.";
3491
+ };
3492
+ readonly trusted_associations: {
3493
+ readonly type: "array";
3494
+ readonly items: {
3495
+ readonly type: "string";
3496
+ readonly enum: readonly ["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIME_CONTRIBUTOR", "FIRST_TIMER", "NONE"];
3497
+ };
3498
+ readonly minItems: 1;
3499
+ readonly description: "Author associations (from the GitHub event payload) whose runs may write.";
3500
+ };
3501
+ readonly screen: {
3502
+ readonly type: "boolean";
3503
+ readonly description: "One model call that may veto the writes after every deterministic check. It can never authorize one.";
3504
+ };
3505
+ };
3506
+ };
3031
3507
  readonly judge_budget: {
3032
3508
  readonly type: "integer";
3033
3509
  readonly minimum: 0;
@@ -3239,6 +3715,18 @@ export declare const workflowJsonSchema: {
3239
3715
  readonly enum: readonly ["halt", "continue"];
3240
3716
  readonly description: "What to do when this node finishes 'failed' (agent-level failure, or an eval failure that exhausted retries and was not softened by fail_soft). 'halt' (default) stops the workflow with the failure surfaced so a broken node never advances down a conditional edge; 'continue' preserves the legacy fall-through where routing proceeds from the failed node. Distinct from requires.on_fail (the pre-condition gate).";
3241
3717
  };
3718
+ readonly permissions: {
3719
+ readonly $ref: "#/$defs/Permissions";
3720
+ readonly description: "What this node's agent may do. Absent: read when the node declares outputs, else the workflow's permissions, else write.";
3721
+ };
3722
+ readonly outputs: {
3723
+ readonly type: "array";
3724
+ readonly items: {
3725
+ readonly $ref: "#/$defs/SafeOutput";
3726
+ };
3727
+ readonly minItems: 1;
3728
+ readonly description: "Typed write intents this node may emit with the emit_output tool. sweny applies them after the node, within the declared caps.";
3729
+ };
3242
3730
  readonly rules: {
3243
3731
  readonly $ref: "#/$defs/NodeSources";
3244
3732
  readonly description: "Per-node rules. Additive by default; set { only: true } to block cascade.";