edsger 0.72.0 → 0.72.2

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.
@@ -21,8 +21,15 @@ export async function callMcpEndpoint(method, params) {
21
21
  if (!mcpToken) {
22
22
  throw new Error('Not authenticated. Run `edsger login` or set EDSGER_MCP_TOKEN environment variable.');
23
23
  }
24
+ // The platform splits its JSON-RPC surface across two edge functions that
25
+ // share the same base URL and MCP-token auth:
26
+ // - `/mcp` — slash-notation methods (issues/list, github/org_repos, ...)
27
+ // - `/agents` — dot-notation methods (agents.*, services.*, skills.*, ...)
28
+ // Route by the method's separator so callers don't have to care which
29
+ // function owns a given method.
30
+ const endpoint = method.includes('.') ? 'agents' : 'mcp';
24
31
  try {
25
- const response = await fetch(`${mcpServerUrl}/mcp`, {
32
+ const response = await fetch(`${mcpServerUrl}/${endpoint}`, {
26
33
  method: 'POST',
27
34
  headers: {
28
35
  'Content-Type': 'application/json',
@@ -215,5 +215,5 @@ async function resolveRepositoryFullName(repositoryId) {
215
215
  .select('full_name')
216
216
  .eq('id', repositoryId)
217
217
  .maybeSingle();
218
- return (data)?.full_name ?? null;
218
+ return data?.full_name ?? null;
219
219
  }
@@ -29,9 +29,16 @@ export async function runSyncTerraform(teamId, options = {}) {
29
29
  repoFullName = result?.team?.terraform_repo_full_name ?? null;
30
30
  }
31
31
  catch {
32
- // Fallback: read directly from supabase if MCP doesn't have the endpoint
32
+ // Fallback: the caller (e.g. the desktop app) may have already resolved
33
+ // the team's repo and injected it as EDSGER_TERRAFORM_REPO, so MCP isn't
34
+ // strictly required.
33
35
  logWarning('Could not fetch team via MCP, attempting to read terraform_repo_full_name from env');
34
36
  }
37
+ // Env fallback works whether or not MCP returned a repo — it lets the
38
+ // desktop app drive the sync without depending on the MCP team endpoint.
39
+ if (!repoFullName) {
40
+ repoFullName = process.env.EDSGER_TERRAFORM_REPO ?? null;
41
+ }
35
42
  if (!repoFullName) {
36
43
  logError('No Terraform repo configured for this team. ' +
37
44
  'Go to Team Settings and set a Terraform repo, or use --dir to point at a local directory.');
@@ -58,6 +58,9 @@ export async function registerSession(options) {
58
58
  const sessionId = generateSessionId();
59
59
  currentSessionId = sessionId;
60
60
  const command = resolvedCommand(options);
61
+ // Full invocation (subcommand + args) for readable run history. `command`
62
+ // stays the stable, entity-scoped lookup key; this carries the variable args.
63
+ const invocation = process.argv.slice(2).join(' ') || undefined;
61
64
  try {
62
65
  const userId = getUserId();
63
66
  if (hasSupabaseSession() && userId) {
@@ -73,6 +76,9 @@ export async function registerSession(options) {
73
76
  if (command) {
74
77
  row.command = command;
75
78
  }
79
+ if (invocation) {
80
+ row.invocation = invocation;
81
+ }
76
82
  if (options?.productId) {
77
83
  row.product_id = options.productId;
78
84
  }
@@ -93,6 +99,9 @@ export async function registerSession(options) {
93
99
  if (command) {
94
100
  payload.command = command;
95
101
  }
102
+ if (invocation) {
103
+ payload.invocation = invocation;
104
+ }
96
105
  if (options?.productId) {
97
106
  payload.product_id = options.productId;
98
107
  }
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "edsger",
3
- "version": "0.72.0",
3
+ "version": "0.72.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "edsger": "dist/index.js"
7
7
  },
8
+ "files": [
9
+ "dist",
10
+ "README.md"
11
+ ],
8
12
  "scripts": {
9
13
  "build": "tsc -p tsconfig.build.json && cp -r src/phases/app-store-generation/assets dist/phases/app-store-generation/ && cp src/phases/quality-benchmark/rubric.md dist/phases/quality-benchmark/rubric.md && rm -rf dist/skills && mkdir -p dist/skills && cp -r ../edsger-skills/skills/phase dist/skills/phase",
10
14
  "dev": "tsc -p tsconfig.build.json --watch",
@@ -50,8 +54,8 @@
50
54
  "commander": "^12.0.0",
51
55
  "cosmiconfig": "^9.0.0",
52
56
  "dotenv": "^16.4.5",
53
- "edsger-contract": "0.7.0",
54
- "edsger-tools": "0.9.0",
57
+ "edsger-contract": "0.9.1",
58
+ "edsger-tools": "0.9.1",
55
59
  "gray-matter": "^4.0.3",
56
60
  "zod": "^4.0.0"
57
61
  },
@@ -1,28 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Read(//Users/steven/development/edsger/**)",
5
- "Bash(npm run build)",
6
- "Bash(node:*)",
7
- "Bash(git add:*)",
8
- "Bash(git commit:*)",
9
- "Bash(ls:*)",
10
- "Bash(cat:*)",
11
- "Bash(npm run typecheck:*)",
12
- "Bash(git diff:*)",
13
- "WebSearch",
14
- "WebFetch(domain:supabase.com)",
15
- "Bash(npm install:*)",
16
- "Bash(grep:*)",
17
- "Bash(npx supabase gen types typescript --help:*)",
18
- "Bash(git -C /Users/steven/development/edsger status)",
19
- "Bash(git -C /Users/steven/development/edsger diff)",
20
- "Bash(git -C /Users/steven/development/edsger log --oneline -5)",
21
- "Bash(git -C /Users/steven/development/edsger add supabase/migrations/20251231000000_drop_unused_views.sql)",
22
- "Bash(git -C /Users/steven/development/edsger commit -m \"$\\(cat <<''EOF''\nchore: drop unused database views\n\nRemove test_report_summary and user_stories_with_context views that are defined but never used in the application.\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
23
- "Bash(git -C /Users/steven/development/edsger commit -m \"$\\(cat <<''EOF''\nchore: drop unused database views\n\nRemove test_report_summary and user_stories_with_context views\nthat are defined but never used in the application.\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")"
24
- ],
25
- "deny": [],
26
- "ask": []
27
- }
28
- }
package/eslint.config.mjs DELETED
@@ -1,26 +0,0 @@
1
- import {
2
- baseConfig,
3
- node,
4
- typeCheckedRules,
5
- } from '../edsger-lint/eslint/index.mjs'
6
-
7
- export default [
8
- // Test-only infra (the node:test→vitest shim) lives outside the src TS
9
- // project, so skip it for the type-checked lint.
10
- { ignores: ['test/**'] },
11
-
12
- ...baseConfig,
13
-
14
- // Type-checked rules
15
- ...typeCheckedRules(import.meta.dirname),
16
-
17
- // Node.js CLI
18
- ...node,
19
- {
20
- rules: {
21
- 'no-console': 'off',
22
- // Legacy CLI code has extensive any usage — fix incrementally
23
- '@typescript-eslint/no-explicit-any': 'warn',
24
- },
25
- },
26
- ]
@@ -1,4 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "exclude": ["node_modules", "dist", "src/**/*.test.ts", "src/**/__tests__/**"]
4
- }
package/tsconfig.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "node",
6
- "esModuleInterop": true,
7
- "allowSyntheticDefaultImports": true,
8
- "strict": true,
9
- "skipLibCheck": true,
10
- "forceConsistentCasingInFileNames": true,
11
- "declaration": true,
12
- "outDir": "./dist",
13
- "rootDir": "./src",
14
- "resolveJsonModule": true,
15
- "types": ["node"]
16
- },
17
- "include": ["src/**/*"],
18
- "exclude": ["node_modules", "dist"]
19
- }
package/vitest.config.ts DELETED
@@ -1,19 +0,0 @@
1
- import { fileURLToPath } from 'node:url'
2
-
3
- import { defineConfig } from 'vitest/config'
4
-
5
- export default defineConfig({
6
- test: {
7
- // Run every test under src, including the many files written against the
8
- // node:test API — those used to be silently skipped. The `node:test` alias
9
- // below lets them run under vitest unchanged.
10
- include: ['src/**/__tests__/**/*.test.ts'],
11
- exclude: ['dist/**', 'node_modules/**'],
12
- environment: 'node',
13
- alias: {
14
- 'node:test': fileURLToPath(
15
- new URL('./test/node-test-shim.ts', import.meta.url)
16
- ),
17
- },
18
- },
19
- })