planpong 0.1.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 (83) hide show
  1. package/README.md +110 -0
  2. package/dist/bin/planpong-mcp.d.ts +2 -0
  3. package/dist/bin/planpong-mcp.js +7 -0
  4. package/dist/bin/planpong-mcp.js.map +1 -0
  5. package/dist/bin/planpong.d.ts +2 -0
  6. package/dist/bin/planpong.js +13 -0
  7. package/dist/bin/planpong.js.map +1 -0
  8. package/dist/src/cli/commands/plan.d.ts +2 -0
  9. package/dist/src/cli/commands/plan.js +128 -0
  10. package/dist/src/cli/commands/plan.js.map +1 -0
  11. package/dist/src/cli/commands/review.d.ts +2 -0
  12. package/dist/src/cli/commands/review.js +156 -0
  13. package/dist/src/cli/commands/review.js.map +1 -0
  14. package/dist/src/cli/ui.d.ts +11 -0
  15. package/dist/src/cli/ui.js +65 -0
  16. package/dist/src/cli/ui.js.map +1 -0
  17. package/dist/src/config/defaults.d.ts +2 -0
  18. package/dist/src/config/defaults.js +12 -0
  19. package/dist/src/config/defaults.js.map +1 -0
  20. package/dist/src/config/loader.d.ts +17 -0
  21. package/dist/src/config/loader.js +74 -0
  22. package/dist/src/config/loader.js.map +1 -0
  23. package/dist/src/core/convergence.d.ts +10 -0
  24. package/dist/src/core/convergence.js +56 -0
  25. package/dist/src/core/convergence.js.map +1 -0
  26. package/dist/src/core/loop.d.ts +53 -0
  27. package/dist/src/core/loop.js +256 -0
  28. package/dist/src/core/loop.js.map +1 -0
  29. package/dist/src/core/operations.d.ts +68 -0
  30. package/dist/src/core/operations.js +323 -0
  31. package/dist/src/core/operations.js.map +1 -0
  32. package/dist/src/core/session.d.ts +14 -0
  33. package/dist/src/core/session.js +77 -0
  34. package/dist/src/core/session.js.map +1 -0
  35. package/dist/src/mcp/server.d.ts +2 -0
  36. package/dist/src/mcp/server.js +109 -0
  37. package/dist/src/mcp/server.js.map +1 -0
  38. package/dist/src/mcp/tools/get-feedback.d.ts +2 -0
  39. package/dist/src/mcp/tools/get-feedback.js +109 -0
  40. package/dist/src/mcp/tools/get-feedback.js.map +1 -0
  41. package/dist/src/mcp/tools/list-sessions.d.ts +2 -0
  42. package/dist/src/mcp/tools/list-sessions.js +61 -0
  43. package/dist/src/mcp/tools/list-sessions.js.map +1 -0
  44. package/dist/src/mcp/tools/revise.d.ts +2 -0
  45. package/dist/src/mcp/tools/revise.js +84 -0
  46. package/dist/src/mcp/tools/revise.js.map +1 -0
  47. package/dist/src/mcp/tools/start-review.d.ts +2 -0
  48. package/dist/src/mcp/tools/start-review.js +105 -0
  49. package/dist/src/mcp/tools/start-review.js.map +1 -0
  50. package/dist/src/mcp/tools/status.d.ts +2 -0
  51. package/dist/src/mcp/tools/status.js +83 -0
  52. package/dist/src/mcp/tools/status.js.map +1 -0
  53. package/dist/src/prompts/planner.d.ts +3 -0
  54. package/dist/src/prompts/planner.js +96 -0
  55. package/dist/src/prompts/planner.js.map +1 -0
  56. package/dist/src/prompts/reviewer.d.ts +11 -0
  57. package/dist/src/prompts/reviewer.js +70 -0
  58. package/dist/src/prompts/reviewer.js.map +1 -0
  59. package/dist/src/providers/claude.d.ts +8 -0
  60. package/dist/src/providers/claude.js +77 -0
  61. package/dist/src/providers/claude.js.map +1 -0
  62. package/dist/src/providers/codex.d.ts +8 -0
  63. package/dist/src/providers/codex.js +83 -0
  64. package/dist/src/providers/codex.js.map +1 -0
  65. package/dist/src/providers/registry.d.ts +4 -0
  66. package/dist/src/providers/registry.js +17 -0
  67. package/dist/src/providers/registry.js.map +1 -0
  68. package/dist/src/providers/types.d.ts +18 -0
  69. package/dist/src/providers/types.js +2 -0
  70. package/dist/src/providers/types.js.map +1 -0
  71. package/dist/src/schemas/config.d.ts +75 -0
  72. package/dist/src/schemas/config.js +14 -0
  73. package/dist/src/schemas/config.js.map +1 -0
  74. package/dist/src/schemas/feedback.d.ts +95 -0
  75. package/dist/src/schemas/feedback.js +24 -0
  76. package/dist/src/schemas/feedback.js.map +1 -0
  77. package/dist/src/schemas/revision.d.ts +116 -0
  78. package/dist/src/schemas/revision.js +17 -0
  79. package/dist/src/schemas/revision.js.map +1 -0
  80. package/dist/src/schemas/session.d.ts +79 -0
  81. package/dist/src/schemas/session.js +16 -0
  82. package/dist/src/schemas/session.js.map +1 -0
  83. package/package.json +52 -0
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ export const SeverityDisputeSchema = z.object({
3
+ original: z.enum(["P1", "P2", "P3"]),
4
+ revised: z.enum(["P1", "P2", "P3"]),
5
+ justification: z.string(),
6
+ });
7
+ export const IssueResponseSchema = z.object({
8
+ issue_id: z.string(),
9
+ action: z.enum(["accepted", "rejected", "deferred"]),
10
+ severity_dispute: SeverityDisputeSchema.optional(),
11
+ rationale: z.string(),
12
+ });
13
+ export const PlannerRevisionSchema = z.object({
14
+ responses: z.array(IssueResponseSchema),
15
+ updated_plan: z.string(),
16
+ });
17
+ //# sourceMappingURL=revision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.js","sourceRoot":"","sources":["../../../src/schemas/revision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACpD,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ export declare const SessionSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ repoRoot: z.ZodString;
5
+ planPath: z.ZodString;
6
+ planPathAbsolute: z.ZodString;
7
+ planner: z.ZodObject<{
8
+ provider: z.ZodString;
9
+ model: z.ZodOptional<z.ZodString>;
10
+ effort: z.ZodOptional<z.ZodString>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ provider: string;
13
+ model?: string | undefined;
14
+ effort?: string | undefined;
15
+ }, {
16
+ provider: string;
17
+ model?: string | undefined;
18
+ effort?: string | undefined;
19
+ }>;
20
+ reviewer: z.ZodObject<{
21
+ provider: z.ZodString;
22
+ model: z.ZodOptional<z.ZodString>;
23
+ effort: z.ZodOptional<z.ZodString>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ provider: string;
26
+ model?: string | undefined;
27
+ effort?: string | undefined;
28
+ }, {
29
+ provider: string;
30
+ model?: string | undefined;
31
+ effort?: string | undefined;
32
+ }>;
33
+ status: z.ZodEnum<["planning", "in_review", "approved", "aborted"]>;
34
+ currentRound: z.ZodNumber;
35
+ startedAt: z.ZodString;
36
+ planHash: z.ZodString;
37
+ initialLineCount: z.ZodOptional<z.ZodNumber>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ id: string;
40
+ status: "aborted" | "approved" | "planning" | "in_review";
41
+ planner: {
42
+ provider: string;
43
+ model?: string | undefined;
44
+ effort?: string | undefined;
45
+ };
46
+ reviewer: {
47
+ provider: string;
48
+ model?: string | undefined;
49
+ effort?: string | undefined;
50
+ };
51
+ repoRoot: string;
52
+ planPath: string;
53
+ planPathAbsolute: string;
54
+ currentRound: number;
55
+ startedAt: string;
56
+ planHash: string;
57
+ initialLineCount?: number | undefined;
58
+ }, {
59
+ id: string;
60
+ status: "aborted" | "approved" | "planning" | "in_review";
61
+ planner: {
62
+ provider: string;
63
+ model?: string | undefined;
64
+ effort?: string | undefined;
65
+ };
66
+ reviewer: {
67
+ provider: string;
68
+ model?: string | undefined;
69
+ effort?: string | undefined;
70
+ };
71
+ repoRoot: string;
72
+ planPath: string;
73
+ planPathAbsolute: string;
74
+ currentRound: number;
75
+ startedAt: string;
76
+ planHash: string;
77
+ initialLineCount?: number | undefined;
78
+ }>;
79
+ export type Session = z.infer<typeof SessionSchema>;
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ import { ProviderConfigSchema } from "./config.js";
3
+ export const SessionSchema = z.object({
4
+ id: z.string(),
5
+ repoRoot: z.string(),
6
+ planPath: z.string(),
7
+ planPathAbsolute: z.string(),
8
+ planner: ProviderConfigSchema,
9
+ reviewer: ProviderConfigSchema,
10
+ status: z.enum(["planning", "in_review", "approved", "aborted"]),
11
+ currentRound: z.number().int().min(0),
12
+ startedAt: z.string(),
13
+ planHash: z.string(),
14
+ initialLineCount: z.number().int().optional(),
15
+ });
16
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/schemas/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC5B,OAAO,EAAE,oBAAoB;IAC7B,QAAQ,EAAE,oBAAoB;IAC9B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAChE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "planpong",
3
+ "version": "0.1.0",
4
+ "description": "Multi-model adversarial plan review — orchestrates AI agents to critique and refine implementation plans",
5
+ "type": "module",
6
+ "bin": {
7
+ "planpong": "dist/bin/planpong.js",
8
+ "planpong-mcp": "dist/bin/planpong-mcp.js"
9
+ },
10
+ "files": [
11
+ "dist/"
12
+ ],
13
+ "scripts": {
14
+ "dev": "tsx bin/planpong.ts",
15
+ "build": "tsc",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepare": "git config core.hooksPath .githooks 2>/dev/null || true",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "engines": {
21
+ "node": ">=18.0.0"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "plan-review",
27
+ "adversarial",
28
+ "ai-agents",
29
+ "claude",
30
+ "codex"
31
+ ],
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/andrewhml/planpong.git"
35
+ },
36
+ "license": "MIT",
37
+ "dependencies": {
38
+ "@inquirer/prompts": "^7.3.2",
39
+ "@modelcontextprotocol/sdk": "^1.27.1",
40
+ "chalk": "^5.4.1",
41
+ "commander": "^13.1.0",
42
+ "execa": "^9.5.2",
43
+ "ora": "^8.2.0",
44
+ "yaml": "^2.7.0",
45
+ "zod": "^3.24.2"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^22.13.10",
49
+ "tsx": "^4.19.3",
50
+ "typescript": "^5.8.2"
51
+ }
52
+ }