()
| 96 | } |
| 97 | |
| 98 | function makeWorkspace() { |
| 99 | const root = mkdtempSync(path.join(tmpdir(), 'a3s-doc-contract-')); |
| 100 | mkdirSync(path.join(root, 'src')); |
| 101 | mkdirSync(path.join(root, 'tools')); |
| 102 | mkdirSync(path.join(root, 'skills')); |
| 103 | mkdirSync(path.join(root, 'agents')); |
| 104 | writeFileSync(path.join(root, 'README.md'), '# Docs Smoke\n\nplanningMode appears here.\n'); |
| 105 | writeFileSync( |
| 106 | path.join(root, 'AGENTS.md'), |
| 107 | '# Project Instructions\n\nAlways mention docs-contract-agents-md-token when asked for project instructions.\n', |
| 108 | ); |
| 109 | writeFileSync(path.join(root, 'src', 'main.rs'), 'fn main() { println!("PermissionPolicy"); }\n'); |
| 110 | writeFileSync( |
| 111 | path.join(root, 'agents', 'docs-dynamic.yaml'), |
| 112 | `name: docs-dynamic |
| 113 | description: Dynamically registered docs smoke agent |
| 114 | max_steps: 3 |
| 115 | permissions: |
| 116 | allow: |
| 117 | - read |
| 118 | - grep |
| 119 | deny: |
| 120 | - write |
| 121 | `, |
| 122 | ); |
| 123 | writeFileSync( |
| 124 | path.join(root, 'skills', 'release-review.md'), |
| 125 | `--- |
| 126 | name: release-review |
| 127 | description: Review release blockers and verification evidence |
| 128 | allowed-tools: "read(*), grep(*)" |
| 129 | tags: ["release", "docs"] |
| 130 | --- |
| 131 | |
| 132 | Check package metadata, changelog, release scripts, and CI status. |
| 133 | Return blockers first. |
| 134 | `, |
| 135 | ); |
| 136 | writeFileSync( |
| 137 | path.join(root, 'tools', 'mcp_echo_server.mjs'), |
| 138 | `#!/usr/bin/env node |
| 139 | import readline from 'node:readline'; |
| 140 | |
| 141 | const secret = process.argv[2] || 'docs-secret'; |
| 142 | const tools = [ |
| 143 | { |
| 144 | name: 'echo', |
| 145 | description: 'Echo the input message', |
| 146 | inputSchema: { |
| 147 | type: 'object', |
| 148 | properties: { message: { type: 'string' } }, |
| 149 | required: ['message'], |
| 150 | }, |
| 151 | }, |
| 152 | { |
| 153 | name: 'get_secret', |
| 154 | description: 'Return the server-side secret', |
| 155 | inputSchema: { type: 'object', properties: {} }, |
no outgoing calls
no test coverage detected