@lannguyensi/harness 0.7.0 → 0.8.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/README.md +56 -17
  3. package/dist/cli/apply/apply.d.ts +13 -0
  4. package/dist/cli/apply/apply.js +59 -3
  5. package/dist/cli/apply/apply.js.map +1 -1
  6. package/dist/cli/apply/generate-codex-config.d.ts +6 -0
  7. package/dist/cli/apply/generate-codex-config.js +149 -0
  8. package/dist/cli/apply/generate-codex-config.js.map +1 -0
  9. package/dist/cli/apply/generate-settings.d.ts +15 -1
  10. package/dist/cli/apply/generate-settings.js +16 -1
  11. package/dist/cli/apply/generate-settings.js.map +1 -1
  12. package/dist/cli/apply/index.d.ts +2 -1
  13. package/dist/cli/apply/index.js +2 -1
  14. package/dist/cli/apply/index.js.map +1 -1
  15. package/dist/cli/approve/understanding.d.ts +39 -0
  16. package/dist/cli/approve/understanding.js +122 -0
  17. package/dist/cli/approve/understanding.js.map +1 -0
  18. package/dist/cli/doctor/codex.d.ts +34 -0
  19. package/dist/cli/doctor/codex.js +331 -0
  20. package/dist/cli/doctor/codex.js.map +1 -0
  21. package/dist/cli/doctor/format.js +11 -0
  22. package/dist/cli/doctor/format.js.map +1 -1
  23. package/dist/cli/doctor/index.d.ts +13 -1
  24. package/dist/cli/doctor/index.js +19 -0
  25. package/dist/cli/doctor/index.js.map +1 -1
  26. package/dist/cli/doctor/types.d.ts +21 -1
  27. package/dist/cli/doctor/types.js +12 -1
  28. package/dist/cli/doctor/types.js.map +1 -1
  29. package/dist/cli/index.js +257 -1
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/pack/add.d.ts +13 -0
  32. package/dist/cli/pack/add.js +71 -0
  33. package/dist/cli/pack/add.js.map +1 -0
  34. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +30 -0
  35. package/dist/cli/pack/hook-codex-pre-tool-use.js +149 -0
  36. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -0
  37. package/dist/cli/pack/hook-codex-stop.d.ts +31 -0
  38. package/dist/cli/pack/hook-codex-stop.js +332 -0
  39. package/dist/cli/pack/hook-codex-stop.js.map +1 -0
  40. package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +18 -0
  41. package/dist/cli/pack/hook-codex-user-prompt-submit.js +92 -0
  42. package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +1 -0
  43. package/dist/cli/pack/hook-pre-tool-use.d.ts +32 -0
  44. package/dist/cli/pack/hook-pre-tool-use.js +181 -0
  45. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -0
  46. package/dist/cli/pack/index.d.ts +4 -0
  47. package/dist/cli/pack/index.js +5 -0
  48. package/dist/cli/pack/index.js.map +1 -0
  49. package/dist/cli/pack/list.d.ts +10 -0
  50. package/dist/cli/pack/list.js +43 -0
  51. package/dist/cli/pack/list.js.map +1 -0
  52. package/dist/cli/pack/mutate.d.ts +14 -0
  53. package/dist/cli/pack/mutate.js +76 -0
  54. package/dist/cli/pack/mutate.js.map +1 -0
  55. package/dist/cli/pack/remove.d.ts +15 -0
  56. package/dist/cli/pack/remove.js +153 -0
  57. package/dist/cli/pack/remove.js.map +1 -0
  58. package/dist/cli/validate/checks.js +32 -0
  59. package/dist/cli/validate/checks.js.map +1 -1
  60. package/dist/policy-packs/builtin/permission-profiles.d.ts +11 -0
  61. package/dist/policy-packs/builtin/permission-profiles.js +74 -0
  62. package/dist/policy-packs/builtin/permission-profiles.js.map +1 -0
  63. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +56 -0
  64. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +186 -0
  65. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +1 -0
  66. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +15 -0
  67. package/dist/policy-packs/builtin/understanding-before-execution.js +254 -0
  68. package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -0
  69. package/dist/policy-packs/expand.d.ts +4 -0
  70. package/dist/policy-packs/expand.js +90 -0
  71. package/dist/policy-packs/expand.js.map +1 -0
  72. package/dist/policy-packs/index.d.ts +5 -0
  73. package/dist/policy-packs/index.js +5 -0
  74. package/dist/policy-packs/index.js.map +1 -0
  75. package/dist/policy-packs/permission-translator.d.ts +9 -0
  76. package/dist/policy-packs/permission-translator.js +76 -0
  77. package/dist/policy-packs/permission-translator.js.map +1 -0
  78. package/dist/policy-packs/registry.d.ts +11 -0
  79. package/dist/policy-packs/registry.js +20 -0
  80. package/dist/policy-packs/registry.js.map +1 -0
  81. package/dist/policy-packs/runtime.d.ts +8 -0
  82. package/dist/policy-packs/runtime.js +30 -0
  83. package/dist/policy-packs/runtime.js.map +1 -0
  84. package/dist/policy-packs/source.d.ts +6 -0
  85. package/dist/policy-packs/source.js +10 -0
  86. package/dist/policy-packs/source.js.map +1 -0
  87. package/dist/policy-packs/types.d.ts +41 -0
  88. package/dist/policy-packs/types.js +11 -0
  89. package/dist/policy-packs/types.js.map +1 -0
  90. package/dist/runtime/index.d.ts +1 -0
  91. package/dist/runtime/index.js +1 -0
  92. package/dist/runtime/index.js.map +1 -1
  93. package/dist/runtime/ledger-add.d.ts +16 -0
  94. package/dist/runtime/ledger-add.js +139 -0
  95. package/dist/runtime/ledger-add.js.map +1 -0
  96. package/dist/schema/index.d.ts +1485 -10
  97. package/dist/schema/index.js +6 -0
  98. package/dist/schema/index.js.map +1 -1
  99. package/dist/schema/permission-profiles.d.ts +2161 -0
  100. package/dist/schema/permission-profiles.js +60 -0
  101. package/dist/schema/permission-profiles.js.map +1 -0
  102. package/dist/schema/policy-packs.d.ts +52 -0
  103. package/dist/schema/policy-packs.js +35 -0
  104. package/dist/schema/policy-packs.js.map +1 -0
  105. package/dist/schema/tools.d.ts +8 -8
  106. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ // Phase 6 #5 — permission-profile schema.
2
+ //
3
+ // A permission profile is a named bundle of action-keyed permission rules
4
+ // that policy packs can declare. Action keys are abstract (read / edit /
5
+ // bash / commit / push / pr / deploy) so a single profile can target
6
+ // multiple agent runtimes; the runtime adapter translates them to the
7
+ // actual tool patterns at apply time.
8
+ //
9
+ // `requires:` on a profile action is reserved for future runtime-aware
10
+ // gating (Phase 6 #5 follow-up): when present, it composes with the
11
+ // existing `policies:` evaluator. v1 parses it through the schema
12
+ // without firing it at runtime; that wiring lands in a sister sub-task.
13
+ import { z } from "zod";
14
+ import { RequiresSchema } from "./requires.js";
15
+ export const PERMISSION_ACTION_KEYS = [
16
+ "read",
17
+ "edit",
18
+ "bash",
19
+ "commit",
20
+ "push",
21
+ "pr",
22
+ "deploy",
23
+ ];
24
+ export const PermissionAllowSchema = z.enum([
25
+ "true",
26
+ "false",
27
+ "ask",
28
+ "limited",
29
+ "ask_or_deny",
30
+ ]);
31
+ export const PermissionRuleSchema = z
32
+ .object({
33
+ allow: z.union([z.boolean(), PermissionAllowSchema]).transform((v) => {
34
+ if (v === true)
35
+ return "true";
36
+ if (v === false)
37
+ return "false";
38
+ return v;
39
+ }),
40
+ mode: z.string().min(1).optional(),
41
+ requires: RequiresSchema.optional(),
42
+ })
43
+ .strict();
44
+ const ActionMap = z.object({
45
+ read: PermissionRuleSchema.optional(),
46
+ edit: PermissionRuleSchema.optional(),
47
+ bash: PermissionRuleSchema.optional(),
48
+ commit: PermissionRuleSchema.optional(),
49
+ push: PermissionRuleSchema.optional(),
50
+ pr: PermissionRuleSchema.optional(),
51
+ deploy: PermissionRuleSchema.optional(),
52
+ }).strict();
53
+ export const PermissionProfileSchema = z
54
+ .object({
55
+ description: z.string().min(1).optional(),
56
+ actions: ActionMap.default({}),
57
+ })
58
+ .strict();
59
+ export const PermissionProfilesSchema = z.record(z.string().min(1), PermissionProfileSchema);
60
+ //# sourceMappingURL=permission-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-profiles.js","sourceRoot":"","sources":["../../src/schema/permission-profiles.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,qEAAqE;AACrE,sEAAsE;AACtE,sCAAsC;AACtC,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,kEAAkE;AAClE,wEAAwE;AAExE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,QAAQ;CACA,CAAC;AAGX,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1C,MAAM;IACN,OAAO;IACP,KAAK;IACL,SAAS;IACT,aAAa;CACd,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;QACnE,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,MAAyB,CAAC;QACjD,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,OAA0B,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACvC,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACrC,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAC9C,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EACjB,uBAAuB,CACxB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ export declare const PolicyPackSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ source: z.ZodDefault<z.ZodString>;
5
+ enabled: z.ZodDefault<z.ZodBoolean>;
6
+ description: z.ZodOptional<z.ZodString>;
7
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ name: string;
10
+ enabled: boolean;
11
+ source: string;
12
+ config: Record<string, unknown>;
13
+ description?: string | undefined;
14
+ }, {
15
+ name: string;
16
+ description?: string | undefined;
17
+ enabled?: boolean | undefined;
18
+ source?: string | undefined;
19
+ config?: Record<string, unknown> | undefined;
20
+ }>;
21
+ export declare const PolicyPacksSchema: z.ZodEffects<z.ZodArray<z.ZodObject<{
22
+ name: z.ZodString;
23
+ source: z.ZodDefault<z.ZodString>;
24
+ enabled: z.ZodDefault<z.ZodBoolean>;
25
+ description: z.ZodOptional<z.ZodString>;
26
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
27
+ }, "strict", z.ZodTypeAny, {
28
+ name: string;
29
+ enabled: boolean;
30
+ source: string;
31
+ config: Record<string, unknown>;
32
+ description?: string | undefined;
33
+ }, {
34
+ name: string;
35
+ description?: string | undefined;
36
+ enabled?: boolean | undefined;
37
+ source?: string | undefined;
38
+ config?: Record<string, unknown> | undefined;
39
+ }>, "many">, {
40
+ name: string;
41
+ enabled: boolean;
42
+ source: string;
43
+ config: Record<string, unknown>;
44
+ description?: string | undefined;
45
+ }[], {
46
+ name: string;
47
+ description?: string | undefined;
48
+ enabled?: boolean | undefined;
49
+ source?: string | undefined;
50
+ config?: Record<string, unknown> | undefined;
51
+ }[]>;
52
+ export type PolicyPack = z.infer<typeof PolicyPackSchema>;
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ // Pack `name` is consumed as a path component when `harness pack remove
3
+ // --force` cleans up `harness.generated/policy-packs/<name>/`, so it must
4
+ // not contain `/`, `..`, or anything else that would escape the policy-
5
+ // packs subtree. Constrain to alphanumeric + dash + underscore + dot,
6
+ // must start with an alphanumeric. This matches the canonical builtin
7
+ // (`understanding-before-execution`) and is friendly to future names like
8
+ // `safe-shell.v2`.
9
+ const PACK_NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
10
+ export const PolicyPackSchema = z
11
+ .object({
12
+ name: z
13
+ .string()
14
+ .min(1)
15
+ .regex(PACK_NAME_RE, "policy_pack name must start with an alphanumeric and contain only [A-Za-z0-9._-]; path separators are rejected"),
16
+ source: z.string().min(1).default("builtin"),
17
+ enabled: z.boolean().default(true),
18
+ description: z.string().min(1).optional(),
19
+ config: z.record(z.string().min(1), z.unknown()).default({}),
20
+ })
21
+ .strict();
22
+ export const PolicyPacksSchema = z.array(PolicyPackSchema).superRefine((packs, ctx) => {
23
+ const seen = new Set();
24
+ packs.forEach((pack, i) => {
25
+ if (seen.has(pack.name)) {
26
+ ctx.addIssue({
27
+ code: z.ZodIssueCode.custom,
28
+ path: [i, "name"],
29
+ message: `duplicate policy_pack name: ${pack.name}`,
30
+ });
31
+ }
32
+ seen.add(pack.name);
33
+ });
34
+ });
35
+ //# sourceMappingURL=policy-packs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-packs.js","sourceRoot":"","sources":["../../src/schema/policy-packs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE,0EAA0E;AAC1E,mBAAmB;AACnB,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,KAAK,CACJ,YAAY,EACZ,gHAAgH,CACjH;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACpF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,+BAA+B,IAAI,CAAC,IAAI,EAAE;aACpD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -51,16 +51,16 @@ export declare const CliToolSchema: z.ZodObject<{
51
51
  required: z.ZodDefault<z.ZodBoolean>;
52
52
  }, "strict", z.ZodTypeAny, {
53
53
  name: string;
54
- binary: string;
55
54
  required: boolean;
55
+ binary: string;
56
56
  min_version?: string | undefined;
57
57
  version_command?: string[] | undefined;
58
58
  }, {
59
59
  name: string;
60
60
  binary: string;
61
+ required?: boolean | undefined;
61
62
  min_version?: string | undefined;
62
63
  version_command?: string[] | undefined;
63
- required?: boolean | undefined;
64
64
  }>;
65
65
  export declare const SkillsSchema: z.ZodEffects<z.ZodObject<{
66
66
  enabled: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -133,16 +133,16 @@ export declare const ToolsSchema: z.ZodEffects<z.ZodObject<{
133
133
  required: z.ZodDefault<z.ZodBoolean>;
134
134
  }, "strict", z.ZodTypeAny, {
135
135
  name: string;
136
- binary: string;
137
136
  required: boolean;
137
+ binary: string;
138
138
  min_version?: string | undefined;
139
139
  version_command?: string[] | undefined;
140
140
  }, {
141
141
  name: string;
142
142
  binary: string;
143
+ required?: boolean | undefined;
143
144
  min_version?: string | undefined;
144
145
  version_command?: string[] | undefined;
145
- required?: boolean | undefined;
146
146
  }>, "many">>;
147
147
  skills: z.ZodDefault<z.ZodEffects<z.ZodObject<{
148
148
  enabled: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -188,8 +188,8 @@ export declare const ToolsSchema: z.ZodEffects<z.ZodObject<{
188
188
  }[];
189
189
  cli: {
190
190
  name: string;
191
- binary: string;
192
191
  required: boolean;
192
+ binary: string;
193
193
  min_version?: string | undefined;
194
194
  version_command?: string[] | undefined;
195
195
  }[];
@@ -215,9 +215,9 @@ export declare const ToolsSchema: z.ZodEffects<z.ZodObject<{
215
215
  cli?: {
216
216
  name: string;
217
217
  binary: string;
218
+ required?: boolean | undefined;
218
219
  min_version?: string | undefined;
219
220
  version_command?: string[] | undefined;
220
- required?: boolean | undefined;
221
221
  }[] | undefined;
222
222
  skills?: {
223
223
  enabled?: string[] | undefined;
@@ -240,8 +240,8 @@ export declare const ToolsSchema: z.ZodEffects<z.ZodObject<{
240
240
  }[];
241
241
  cli: {
242
242
  name: string;
243
- binary: string;
244
243
  required: boolean;
244
+ binary: string;
245
245
  min_version?: string | undefined;
246
246
  version_command?: string[] | undefined;
247
247
  }[];
@@ -267,9 +267,9 @@ export declare const ToolsSchema: z.ZodEffects<z.ZodObject<{
267
267
  cli?: {
268
268
  name: string;
269
269
  binary: string;
270
+ required?: boolean | undefined;
270
271
  min_version?: string | undefined;
271
272
  version_command?: string[] | undefined;
272
- required?: boolean | undefined;
273
273
  }[] | undefined;
274
274
  skills?: {
275
275
  enabled?: string[] | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lannguyensi/harness",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Declarative control plane for agent harnesses — one YAML for grounding, tools, memory, and hooks.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/LanNguyenSi/harness",