agy-worker-mcp 0.3.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.
Files changed (227) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/LICENSE +21 -0
  3. package/README.md +309 -0
  4. package/commands/agy-ceiling.md +31 -0
  5. package/dist/broker/blockers.d.ts +86 -0
  6. package/dist/broker/blockers.d.ts.map +1 -0
  7. package/dist/broker/blockers.js +390 -0
  8. package/dist/broker/blockers.js.map +1 -0
  9. package/dist/broker/outcome.d.ts +85 -0
  10. package/dist/broker/outcome.d.ts.map +1 -0
  11. package/dist/broker/outcome.js +147 -0
  12. package/dist/broker/outcome.js.map +1 -0
  13. package/dist/broker/reconcile.d.ts +74 -0
  14. package/dist/broker/reconcile.d.ts.map +1 -0
  15. package/dist/broker/reconcile.js +415 -0
  16. package/dist/broker/reconcile.js.map +1 -0
  17. package/dist/broker/result.d.ts +88 -0
  18. package/dist/broker/result.d.ts.map +1 -0
  19. package/dist/broker/result.js +234 -0
  20. package/dist/broker/result.js.map +1 -0
  21. package/dist/broker/verify.d.ts +52 -0
  22. package/dist/broker/verify.d.ts.map +1 -0
  23. package/dist/broker/verify.js +174 -0
  24. package/dist/broker/verify.js.map +1 -0
  25. package/dist/contract/errors.d.ts +119 -0
  26. package/dist/contract/errors.d.ts.map +1 -0
  27. package/dist/contract/errors.js +99 -0
  28. package/dist/contract/errors.js.map +1 -0
  29. package/dist/contract/index.d.ts +10 -0
  30. package/dist/contract/index.d.ts.map +1 -0
  31. package/dist/contract/index.js +10 -0
  32. package/dist/contract/index.js.map +1 -0
  33. package/dist/contract/paths.d.ts +139 -0
  34. package/dist/contract/paths.d.ts.map +1 -0
  35. package/dist/contract/paths.js +359 -0
  36. package/dist/contract/paths.js.map +1 -0
  37. package/dist/contract/schema.sql +64 -0
  38. package/dist/contract/types.d.ts +1113 -0
  39. package/dist/contract/types.d.ts.map +1 -0
  40. package/dist/contract/types.js +114 -0
  41. package/dist/contract/types.js.map +1 -0
  42. package/dist/events/cursor.d.ts +65 -0
  43. package/dist/events/cursor.d.ts.map +1 -0
  44. package/dist/events/cursor.js +286 -0
  45. package/dist/events/cursor.js.map +1 -0
  46. package/dist/events/detect.d.ts +58 -0
  47. package/dist/events/detect.d.ts.map +1 -0
  48. package/dist/events/detect.js +183 -0
  49. package/dist/events/detect.js.map +1 -0
  50. package/dist/events/normalize.d.ts +30 -0
  51. package/dist/events/normalize.d.ts.map +1 -0
  52. package/dist/events/normalize.js +158 -0
  53. package/dist/events/normalize.js.map +1 -0
  54. package/dist/events/parse.d.ts +41 -0
  55. package/dist/events/parse.d.ts.map +1 -0
  56. package/dist/events/parse.js +89 -0
  57. package/dist/events/parse.js.map +1 -0
  58. package/dist/gate/bind.d.ts +28 -0
  59. package/dist/gate/bind.d.ts.map +1 -0
  60. package/dist/gate/bind.js +154 -0
  61. package/dist/gate/bind.js.map +1 -0
  62. package/dist/gate/gate.d.ts +139 -0
  63. package/dist/gate/gate.d.ts.map +1 -0
  64. package/dist/gate/gate.js +488 -0
  65. package/dist/gate/gate.js.map +1 -0
  66. package/dist/gate/hooks-file.d.ts +55 -0
  67. package/dist/gate/hooks-file.d.ts.map +1 -0
  68. package/dist/gate/hooks-file.js +104 -0
  69. package/dist/gate/hooks-file.js.map +1 -0
  70. package/dist/gate.d.ts +3 -0
  71. package/dist/gate.d.ts.map +1 -0
  72. package/dist/gate.js +20 -0
  73. package/dist/gate.js.map +1 -0
  74. package/dist/policy/ceiling-review.d.ts +22 -0
  75. package/dist/policy/ceiling-review.d.ts.map +1 -0
  76. package/dist/policy/ceiling-review.js +170 -0
  77. package/dist/policy/ceiling-review.js.map +1 -0
  78. package/dist/policy/ceiling.d.ts +128 -0
  79. package/dist/policy/ceiling.d.ts.map +1 -0
  80. package/dist/policy/ceiling.js +273 -0
  81. package/dist/policy/ceiling.js.map +1 -0
  82. package/dist/policy/containment.d.ts +100 -0
  83. package/dist/policy/containment.d.ts.map +1 -0
  84. package/dist/policy/containment.js +1071 -0
  85. package/dist/policy/containment.js.map +1 -0
  86. package/dist/policy/hard-deny.d.ts +28 -0
  87. package/dist/policy/hard-deny.d.ts.map +1 -0
  88. package/dist/policy/hard-deny.js +78 -0
  89. package/dist/policy/hard-deny.js.map +1 -0
  90. package/dist/policy/profiles.d.ts +82 -0
  91. package/dist/policy/profiles.d.ts.map +1 -0
  92. package/dist/policy/profiles.js +317 -0
  93. package/dist/policy/profiles.js.map +1 -0
  94. package/dist/policy/rules.d.ts +138 -0
  95. package/dist/policy/rules.d.ts.map +1 -0
  96. package/dist/policy/rules.js +1180 -0
  97. package/dist/policy/rules.js.map +1 -0
  98. package/dist/policy/seatbelt.d.ts +32 -0
  99. package/dist/policy/seatbelt.d.ts.map +1 -0
  100. package/dist/policy/seatbelt.js +59 -0
  101. package/dist/policy/seatbelt.js.map +1 -0
  102. package/dist/policy/tools.d.ts +36 -0
  103. package/dist/policy/tools.d.ts.map +1 -0
  104. package/dist/policy/tools.js +94 -0
  105. package/dist/policy/tools.js.map +1 -0
  106. package/dist/runner/gate-watchdog.d.ts +93 -0
  107. package/dist/runner/gate-watchdog.d.ts.map +1 -0
  108. package/dist/runner/gate-watchdog.js +153 -0
  109. package/dist/runner/gate-watchdog.js.map +1 -0
  110. package/dist/runner/idle.d.ts +51 -0
  111. package/dist/runner/idle.d.ts.map +1 -0
  112. package/dist/runner/idle.js +81 -0
  113. package/dist/runner/idle.js.map +1 -0
  114. package/dist/runner/inbox.d.ts +56 -0
  115. package/dist/runner/inbox.d.ts.map +1 -0
  116. package/dist/runner/inbox.js +134 -0
  117. package/dist/runner/inbox.js.map +1 -0
  118. package/dist/runner/reap.d.ts +65 -0
  119. package/dist/runner/reap.d.ts.map +1 -0
  120. package/dist/runner/reap.js +168 -0
  121. package/dist/runner/reap.js.map +1 -0
  122. package/dist/runner/runner.d.ts +51 -0
  123. package/dist/runner/runner.d.ts.map +1 -0
  124. package/dist/runner/runner.js +289 -0
  125. package/dist/runner/runner.js.map +1 -0
  126. package/dist/runner/spawn.d.ts +98 -0
  127. package/dist/runner/spawn.d.ts.map +1 -0
  128. package/dist/runner/spawn.js +230 -0
  129. package/dist/runner/spawn.js.map +1 -0
  130. package/dist/runner/verify.d.ts +24 -0
  131. package/dist/runner/verify.d.ts.map +1 -0
  132. package/dist/runner/verify.js +108 -0
  133. package/dist/runner/verify.js.map +1 -0
  134. package/dist/runner.d.ts +3 -0
  135. package/dist/runner.d.ts.map +1 -0
  136. package/dist/runner.js +15 -0
  137. package/dist/runner.js.map +1 -0
  138. package/dist/server/context.d.ts +41 -0
  139. package/dist/server/context.d.ts.map +1 -0
  140. package/dist/server/context.js +59 -0
  141. package/dist/server/context.js.map +1 -0
  142. package/dist/server/instructions.d.ts +13 -0
  143. package/dist/server/instructions.d.ts.map +1 -0
  144. package/dist/server/instructions.js +121 -0
  145. package/dist/server/instructions.js.map +1 -0
  146. package/dist/server/server.d.ts +20 -0
  147. package/dist/server/server.d.ts.map +1 -0
  148. package/dist/server/server.js +55 -0
  149. package/dist/server/server.js.map +1 -0
  150. package/dist/server/tools/cancel.d.ts +24 -0
  151. package/dist/server/tools/cancel.d.ts.map +1 -0
  152. package/dist/server/tools/cancel.js +59 -0
  153. package/dist/server/tools/cancel.js.map +1 -0
  154. package/dist/server/tools/capabilities.d.ts +36 -0
  155. package/dist/server/tools/capabilities.d.ts.map +1 -0
  156. package/dist/server/tools/capabilities.js +116 -0
  157. package/dist/server/tools/capabilities.js.map +1 -0
  158. package/dist/server/tools/ceiling.d.ts +31 -0
  159. package/dist/server/tools/ceiling.d.ts.map +1 -0
  160. package/dist/server/tools/ceiling.js +121 -0
  161. package/dist/server/tools/ceiling.js.map +1 -0
  162. package/dist/server/tools/index.d.ts +38 -0
  163. package/dist/server/tools/index.d.ts.map +1 -0
  164. package/dist/server/tools/index.js +115 -0
  165. package/dist/server/tools/index.js.map +1 -0
  166. package/dist/server/tools/listJobs.d.ts +30 -0
  167. package/dist/server/tools/listJobs.d.ts.map +1 -0
  168. package/dist/server/tools/listJobs.js +37 -0
  169. package/dist/server/tools/listJobs.js.map +1 -0
  170. package/dist/server/tools/logs.d.ts +31 -0
  171. package/dist/server/tools/logs.d.ts.map +1 -0
  172. package/dist/server/tools/logs.js +96 -0
  173. package/dist/server/tools/logs.js.map +1 -0
  174. package/dist/server/tools/result.d.ts +32 -0
  175. package/dist/server/tools/result.d.ts.map +1 -0
  176. package/dist/server/tools/result.js +95 -0
  177. package/dist/server/tools/result.js.map +1 -0
  178. package/dist/server/tools/send.d.ts +37 -0
  179. package/dist/server/tools/send.d.ts.map +1 -0
  180. package/dist/server/tools/send.js +71 -0
  181. package/dist/server/tools/send.js.map +1 -0
  182. package/dist/server/tools/sessions.d.ts +28 -0
  183. package/dist/server/tools/sessions.d.ts.map +1 -0
  184. package/dist/server/tools/sessions.js +54 -0
  185. package/dist/server/tools/sessions.js.map +1 -0
  186. package/dist/server/tools/start.d.ts +107 -0
  187. package/dist/server/tools/start.d.ts.map +1 -0
  188. package/dist/server/tools/start.js +482 -0
  189. package/dist/server/tools/start.js.map +1 -0
  190. package/dist/server/tools/wait.d.ts +29 -0
  191. package/dist/server/tools/wait.d.ts.map +1 -0
  192. package/dist/server/tools/wait.js +120 -0
  193. package/dist/server/tools/wait.js.map +1 -0
  194. package/dist/server.d.ts +3 -0
  195. package/dist/server.d.ts.map +1 -0
  196. package/dist/server.js +17 -0
  197. package/dist/server.js.map +1 -0
  198. package/dist/setup/install.d.ts +52 -0
  199. package/dist/setup/install.d.ts.map +1 -0
  200. package/dist/setup/install.js +108 -0
  201. package/dist/setup/install.js.map +1 -0
  202. package/dist/setup.d.ts +3 -0
  203. package/dist/setup.d.ts.map +1 -0
  204. package/dist/setup.js +24 -0
  205. package/dist/setup.js.map +1 -0
  206. package/dist/store/db.d.ts +49 -0
  207. package/dist/store/db.d.ts.map +1 -0
  208. package/dist/store/db.js +101 -0
  209. package/dist/store/db.js.map +1 -0
  210. package/dist/store/jobs.d.ts +45 -0
  211. package/dist/store/jobs.d.ts.map +1 -0
  212. package/dist/store/jobs.js +150 -0
  213. package/dist/store/jobs.js.map +1 -0
  214. package/dist/store/locks.d.ts +60 -0
  215. package/dist/store/locks.d.ts.map +1 -0
  216. package/dist/store/locks.js +172 -0
  217. package/dist/store/locks.js.map +1 -0
  218. package/dist/store/sessions.d.ts +37 -0
  219. package/dist/store/sessions.d.ts.map +1 -0
  220. package/dist/store/sessions.js +117 -0
  221. package/dist/store/sessions.js.map +1 -0
  222. package/dist/trace/digest.d.ts +77 -0
  223. package/dist/trace/digest.d.ts.map +1 -0
  224. package/dist/trace/digest.js +481 -0
  225. package/dist/trace/digest.js.map +1 -0
  226. package/package.json +68 -0
  227. package/skills/agy-ceiling/SKILL.md +72 -0
@@ -0,0 +1,138 @@
1
+ import type { ParsedRule, RuleVerb } from '../contract/types.js';
2
+ /**
3
+ * Permission rule strings, in agy's own vocabulary (§12):
4
+ * `command(...)`, `read_file(...)`, `write_file(...)`, `fetch(...)`, `url(...)`,
5
+ * `mcp(...)`, `browser(...)`. Matching is strict and non-regex by default;
6
+ * `regex:` opts in. Wildcards `command(*)` and `read_file(/)` are recognized.
7
+ */
8
+ export declare const RULE_VERBS: readonly RuleVerb[];
9
+ /** @throws {import('../contract/errors.js').ValidationError} carrying `allowed_verbs`. */
10
+ export declare function parseRule(raw: string): ParsedRule;
11
+ /** Parses every rule; the first bad one throws, so a caller never gets a half set. */
12
+ export declare function parseRules(raws: string[]): ParsedRule[];
13
+ /** Same as {@link parseRules}, but a malformed entry is dropped instead of thrown. */
14
+ export declare function parseRulesLenient(raws: string[]): ParsedRule[];
15
+ /** What a rule is being matched against. */
16
+ export interface RuleSubject {
17
+ verb: RuleVerb;
18
+ /** Command line, absolute path, or URL depending on the verb. */
19
+ value: string;
20
+ }
21
+ /** `**` -> any depth, `*` -> one path segment / token, everything else literal. */
22
+ export declare function globToRegex(pattern: string): RegExp;
23
+ /**
24
+ * Environment variables that must never be assigned inline or via env/export.
25
+ * Rationale:
26
+ * - PATH: Binary resolution hijacking by prepending untrusted directories.
27
+ * - LD_*, DYLD_*: Dynamic linker hijacking (preloading arbitrary shared libraries on Linux / macOS).
28
+ * - NODE_OPTIONS: Node.js runtime flag / hook injection (e.g. --require, --inspect).
29
+ * - BASH_ENV, ENV: Startup script execution on shell invocation.
30
+ * - GIT_DIR, GIT_WORK_TREE: Redirects git repository / working tree outside the workspace.
31
+ * - GIT_SSH, GIT_SSH_COMMAND: Arbitrary binary execution during git network operations.
32
+ * - GIT_CONFIG*, GIT_EXEC_PATH: Git config override or custom hook/binary injection.
33
+ * - PYTHONSTARTUP, PYTHONPATH: Arbitrary code execution or library hijacking at Python startup.
34
+ * - PERL5OPT, RUBYOPT: Option/code injection at Perl/Ruby interpreter startup.
35
+ * - JAVA_TOOL_OPTIONS, _JAVA_OPTIONS: JVM argument injection (e.g. -javaagent).
36
+ */
37
+ export declare const DENIED_ENV_PATTERNS: readonly (string | RegExp)[];
38
+ export declare function isDeniedEnvVar(name: string): boolean;
39
+ /** Recognize -c inside short flag clusters, e.g. -c, -lc, -ec, -xc, -lec */
40
+ export declare function isShellCFlag(token: string): boolean;
41
+ /** Check if head token contains backslash, $, quote, or non-ASCII */
42
+ export declare function headTokenIsObfuscated(token: string): boolean;
43
+ /** Tokenizer that preserves quote characters in tokens for obfuscation detection */
44
+ export declare function tokenizeCommandRaw(cmd: string): string[];
45
+ /** Check if rm invocation has both recursive and force flags */
46
+ export declare function isRmRfTokens(tokens: string[]): boolean;
47
+ /** Keys that must not be written to in git config */
48
+ export declare function isDeniedGitConfigKey(key: string): boolean;
49
+ /** Check if git command uses forbidden global options or writes to sensitive config keys */
50
+ export declare function checkGitSegment(tokens: string[]): {
51
+ denied: boolean;
52
+ reason?: string;
53
+ };
54
+ export declare function isDeniedFindSegment(tokens: string[]): boolean;
55
+ export declare function extractXargsTarget(tokens: string[]): string[] | null;
56
+ /** A minimal shell-aware tokenizer: `'...'`/`"..."` groups survive as one token, quotes stripped. */
57
+ export declare function tokenizeCommand(cmd: string): string[];
58
+ export interface EnvPrefixResult {
59
+ assignments: {
60
+ name: string;
61
+ value: string;
62
+ }[];
63
+ deniedVar: string | null;
64
+ isExport: boolean;
65
+ isAssignmentOnly: boolean;
66
+ remainingTokens: string[];
67
+ }
68
+ export declare function stripEnvPrefixTokens(tokens: string[]): EnvPrefixResult;
69
+ /**
70
+ * Split command line by delimiters `&&`, `||`, `;`, `|` outside quotes.
71
+ * Returns `null` on syntax error (unbalanced quotes, heredoc `<<`).
72
+ */
73
+ export declare function splitChainSegments(cmd: string): string[] | null;
74
+ /**
75
+ * Extract command substitutions `$(...)` and ``` `...` ``` outside single quotes.
76
+ * Returns `null` on unbalanced substitution or quote syntax error.
77
+ */
78
+ export declare function extractCommandSubstitutions(segment: string): {
79
+ sanitized: string;
80
+ substitutions: string[];
81
+ } | null;
82
+ /**
83
+ * Deny-only matcher. Unlike {@link matchRule} (used for allow-list matching,
84
+ * where anchoring the pattern at the command's first token is intentional
85
+ * precision — an allow rule must never widen because it happens to appear
86
+ * mid-command), this scans every token window of the (tokenized, quote-aware)
87
+ * command line and unwraps one layer of a shell/exec wrapper before giving up,
88
+ * so `sh -c 'git push origin main'`, `/usr/bin/curl ...` and `env curl ...`
89
+ * cannot slip past a `command(git push)` / `command(curl)` HARD_DENY entry
90
+ * (finding 15).
91
+ */
92
+ export declare function matchRuleForDenial(rule: ParsedRule, subject: RuleSubject): boolean;
93
+ /** Deny-list form of {@link firstMatch}, using {@link matchRuleForDenial}. */
94
+ export declare function firstMatchForDenial(rules: ParsedRule[], subject: RuleSubject): ParsedRule | null;
95
+ /**
96
+ * Bare glob matching against a filesystem path — no `verb(pattern)` rule
97
+ * envelope. Used for `Ceiling.read_roots`, which is a list of glob patterns,
98
+ * not permission rules, so it
99
+ * has no verb to check. Same `**`/`*` semantics `matchRule` already uses for
100
+ * `read_file`/`write_file` patterns (`globToRegex`) — exported here instead of
101
+ * a second implementation living in `policy/ceiling.ts`.
102
+ */
103
+ export declare function matchesPathGlob(pattern: string, value: string): boolean;
104
+ export declare function matchRule(rule: ParsedRule, subject: RuleSubject): boolean;
105
+ export interface CommandPolicyResult {
106
+ allowed: boolean;
107
+ stage: 'profile_allowlist' | 'deny_list' | 'default';
108
+ matchedRule: string | null;
109
+ requiredRule: string | null;
110
+ reason?: string;
111
+ }
112
+ export declare function evaluateCommandPolicy(commandLine: string, allowRules: ParsedRule[], denyRules: ParsedRule[], depth?: number): CommandPolicyResult;
113
+ /** First matching rule in order, or null. Deny lists are scanned before allow lists. */
114
+ export declare function firstMatch(rules: ParsedRule[], subject: RuleSubject): ParsedRule | null;
115
+ export interface IntersectResult {
116
+ /** Requested entries the ceiling covers. */
117
+ allowed: string[];
118
+ /** Requested entries the ceiling refuses, reported back to the caller. */
119
+ rejected: string[];
120
+ }
121
+ /**
122
+ * Intersect a client's requested allow list with a profile ceiling.
123
+ *
124
+ * A request is kept only when some ceiling rule of the same verb covers it — an
125
+ * unrelated rule can never let something new through. This is the single place
126
+ * that stops a client widening the server's hard limit (see docs/permissions.md).
127
+ *
128
+ * "Covers" is checked by matching the *ceiling* rule against the *requested*
129
+ * rule's own pattern treated as a subject value — the requested rule must be at
130
+ * least as narrow as something the ceiling already allows.
131
+ */
132
+ export declare function intersectAllow(requested: string[], ceiling: string[]): IntersectResult;
133
+ /**
134
+ * The narrowest rule string that would have permitted `subject`.
135
+ * Surfaced as `required_rule` so the calling agent can retry without a round trip.
136
+ */
137
+ export declare function requiredRuleFor(subject: RuleSubject): string;
138
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/policy/rules.ts"],"names":[],"mappings":"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"}