openplanr 0.9.0 → 1.0.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.
- package/README.md +142 -58
- package/dist/agents/index.d.ts +1 -5
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/task-parser.d.ts +4 -1
- package/dist/agents/task-parser.d.ts.map +1 -1
- package/dist/agents/task-parser.js +6 -3
- package/dist/agents/task-parser.js.map +1 -1
- package/dist/agents/utils.d.ts +0 -4
- package/dist/agents/utils.d.ts.map +1 -1
- package/dist/agents/utils.js +3 -24
- package/dist/agents/utils.js.map +1 -1
- package/dist/ai/codebase/context-builder.d.ts +22 -3
- package/dist/ai/codebase/context-builder.d.ts.map +1 -1
- package/dist/ai/codebase/context-builder.js +202 -14
- package/dist/ai/codebase/context-builder.js.map +1 -1
- package/dist/ai/codebase/file-reader.d.ts.map +1 -1
- package/dist/ai/codebase/file-reader.js +7 -3
- package/dist/ai/codebase/file-reader.js.map +1 -1
- package/dist/ai/codebase/index.d.ts +3 -1
- package/dist/ai/codebase/index.d.ts.map +1 -1
- package/dist/ai/codebase/index.js +3 -1
- package/dist/ai/codebase/index.js.map +1 -1
- package/dist/ai/codebase/pattern-rules.d.ts +28 -0
- package/dist/ai/codebase/pattern-rules.d.ts.map +1 -0
- package/dist/ai/codebase/pattern-rules.js +186 -0
- package/dist/ai/codebase/pattern-rules.js.map +1 -0
- package/dist/ai/codebase/rules-reader.d.ts +14 -0
- package/dist/ai/codebase/rules-reader.d.ts.map +1 -0
- package/dist/ai/codebase/rules-reader.js +25 -0
- package/dist/ai/codebase/rules-reader.js.map +1 -0
- package/dist/ai/codebase/stack-detector.d.ts.map +1 -1
- package/dist/ai/codebase/stack-detector.js +4 -1
- package/dist/ai/codebase/stack-detector.js.map +1 -1
- package/dist/ai/codebase/tree-generator.d.ts.map +1 -1
- package/dist/ai/codebase/tree-generator.js +5 -2
- package/dist/ai/codebase/tree-generator.js.map +1 -1
- package/dist/ai/errors.js +1 -1
- package/dist/ai/errors.js.map +1 -1
- package/dist/ai/prompts/prompt-builder.d.ts +12 -0
- package/dist/ai/prompts/prompt-builder.d.ts.map +1 -1
- package/dist/ai/prompts/prompt-builder.js +38 -3
- package/dist/ai/prompts/prompt-builder.js.map +1 -1
- package/dist/ai/prompts/system-prompts.d.ts +4 -2
- package/dist/ai/prompts/system-prompts.d.ts.map +1 -1
- package/dist/ai/prompts/system-prompts.js +72 -12
- package/dist/ai/prompts/system-prompts.js.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.d.ts +48 -2
- package/dist/ai/schemas/ai-response-schemas.d.ts.map +1 -1
- package/dist/ai/schemas/ai-response-schemas.js +19 -0
- package/dist/ai/schemas/ai-response-schemas.js.map +1 -1
- package/dist/ai/types.d.ts +3 -1
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -1
- package/dist/ai/validation/dependency-chains.d.ts +21 -0
- package/dist/ai/validation/dependency-chains.d.ts.map +1 -0
- package/dist/ai/validation/dependency-chains.js +114 -0
- package/dist/ai/validation/dependency-chains.js.map +1 -0
- package/dist/ai/validation/index.d.ts +3 -0
- package/dist/ai/validation/index.d.ts.map +1 -0
- package/dist/ai/validation/index.js +3 -0
- package/dist/ai/validation/index.js.map +1 -0
- package/dist/ai/validation/task-validator.d.ts +37 -0
- package/dist/ai/validation/task-validator.d.ts.map +1 -0
- package/dist/ai/validation/task-validator.js +89 -0
- package/dist/ai/validation/task-validator.js.map +1 -0
- package/dist/cli/commands/backlog.d.ts +10 -0
- package/dist/cli/commands/backlog.d.ts.map +1 -0
- package/dist/cli/commands/backlog.js +292 -0
- package/dist/cli/commands/backlog.js.map +1 -0
- package/dist/cli/commands/checklist.js +4 -4
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/config.js +13 -13
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +29 -23
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/estimate.d.ts.map +1 -1
- package/dist/cli/commands/estimate.js +40 -39
- package/dist/cli/commands/estimate.js.map +1 -1
- package/dist/cli/commands/export.js +6 -4
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/feature.js +9 -9
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/github.d.ts.map +1 -1
- package/dist/cli/commands/github.js +30 -27
- package/dist/cli/commands/github.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +27 -42
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/quick.d.ts.map +1 -1
- package/dist/cli/commands/quick.js +37 -107
- package/dist/cli/commands/quick.js.map +1 -1
- package/dist/cli/commands/refine.js +21 -21
- package/dist/cli/commands/refine.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +18 -7
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts +9 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -0
- package/dist/cli/commands/sprint.js +519 -0
- package/dist/cli/commands/sprint.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +77 -32
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/story.js +15 -15
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/sync.js +11 -7
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/task.d.ts +0 -2
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +14 -169
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/template.d.ts +10 -0
- package/dist/cli/commands/template.d.ts.map +1 -0
- package/dist/cli/commands/template.js +269 -0
- package/dist/cli/commands/template.js.map +1 -0
- package/dist/cli/helpers/task-creation.d.ts +89 -0
- package/dist/cli/helpers/task-creation.d.ts.map +1 -0
- package/dist/cli/helpers/task-creation.js +140 -0
- package/dist/cli/helpers/task-creation.js.map +1 -0
- package/dist/cli/index.js +25 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/models/schema.d.ts +2 -0
- package/dist/models/schema.d.ts.map +1 -1
- package/dist/models/schema.js +2 -0
- package/dist/models/schema.js.map +1 -1
- package/dist/models/types.d.ts +32 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/services/artifact-gathering.d.ts +2 -0
- package/dist/services/artifact-gathering.d.ts.map +1 -1
- package/dist/services/artifact-gathering.js +26 -7
- package/dist/services/artifact-gathering.js.map +1 -1
- package/dist/services/artifact-service.d.ts +5 -5
- package/dist/services/artifact-service.d.ts.map +1 -1
- package/dist/services/artifact-service.js +4 -0
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +2 -0
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/credential-backends.d.ts.map +1 -1
- package/dist/services/credential-backends.js +15 -7
- package/dist/services/credential-backends.js.map +1 -1
- package/dist/services/credentials-service.d.ts.map +1 -1
- package/dist/services/credentials-service.js +6 -3
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/github-service.d.ts +2 -2
- package/dist/services/github-service.d.ts.map +1 -1
- package/dist/services/github-service.js +9 -4
- package/dist/services/github-service.js.map +1 -1
- package/dist/services/template-service.d.ts +2 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +2 -1
- package/dist/services/template-service.js.map +1 -1
- package/dist/templates/backlog/backlog-item.md.hbs +40 -0
- package/dist/templates/checklists/agile-checklist.md.hbs +1 -1
- package/dist/templates/quick/quick-task.md.hbs +1 -1
- package/dist/templates/rules/claude/CLAUDE.md.hbs +78 -35
- package/dist/templates/rules/codex/AGENTS.md.hbs +73 -17
- package/dist/templates/rules/cursor/2101-implement-task-list.mdc.hbs +66 -14
- package/dist/templates/sprints/sprint.md.hbs +42 -0
- package/dist/templates/task-templates/api-integration.json +45 -0
- package/dist/templates/task-templates/auth-flow.json +48 -0
- package/dist/templates/task-templates/database-migration.json +44 -0
- package/dist/templates/task-templates/react-component.json +45 -0
- package/dist/templates/task-templates/rest-endpoint.json +53 -0
- package/dist/templates/tasks/task-list.md.hbs +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +4 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/logger.d.ts +31 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -9
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown.d.ts +3 -2
- package/dist/utils/markdown.d.ts.map +1 -1
- package/dist/utils/markdown.js +3 -1
- package/dist/utils/markdown.js.map +1 -1
- package/dist/utils/slugify.d.ts +8 -1
- package/dist/utils/slugify.d.ts.map +1 -1
- package/dist/utils/slugify.js +18 -2
- package/dist/utils/slugify.js.map +1 -1
- package/package.json +14 -3
- package/dist/agents/agent-factory.d.ts +0 -7
- package/dist/agents/agent-factory.d.ts.map +0 -1
- package/dist/agents/agent-factory.js +0 -22
- package/dist/agents/agent-factory.js.map +0 -1
- package/dist/agents/claude-agent.d.ts +0 -18
- package/dist/agents/claude-agent.d.ts.map +0 -1
- package/dist/agents/claude-agent.js +0 -183
- package/dist/agents/claude-agent.js.map +0 -1
- package/dist/agents/codex-agent.d.ts +0 -17
- package/dist/agents/codex-agent.d.ts.map +0 -1
- package/dist/agents/codex-agent.js +0 -124
- package/dist/agents/codex-agent.js.map +0 -1
- package/dist/agents/cursor-agent.d.ts +0 -14
- package/dist/agents/cursor-agent.d.ts.map +0 -1
- package/dist/agents/cursor-agent.js +0 -49
- package/dist/agents/cursor-agent.js.map +0 -1
- package/dist/agents/implementation-bridge.d.ts +0 -30
- package/dist/agents/implementation-bridge.d.ts.map +0 -1
- package/dist/agents/implementation-bridge.js +0 -256
- package/dist/agents/implementation-bridge.js.map +0 -1
- package/dist/agents/progress.d.ts +0 -62
- package/dist/agents/progress.d.ts.map +0 -1
- package/dist/agents/progress.js +0 -155
- package/dist/agents/progress.js.map +0 -1
- package/dist/agents/prompt-composer.d.ts +0 -30
- package/dist/agents/prompt-composer.d.ts.map +0 -1
- package/dist/agents/prompt-composer.js +0 -81
- package/dist/agents/prompt-composer.js.map +0 -1
- package/dist/agents/types.d.ts +0 -25
- package/dist/agents/types.d.ts.map +0 -1
- package/dist/agents/types.js +0 -8
- package/dist/agents/types.js.map +0 -1
- package/dist/utils/error-context.d.ts +0 -23
- package/dist/utils/error-context.d.ts.map +0 -1
- package/dist/utils/error-context.js +0 -94
- package/dist/utils/error-context.js.map +0 -1
package/dist/utils/constants.js
CHANGED
|
@@ -11,6 +11,8 @@ export const ARTIFACT_DIRS = {
|
|
|
11
11
|
stories: 'stories',
|
|
12
12
|
tasks: 'tasks',
|
|
13
13
|
quick: 'quick',
|
|
14
|
+
backlog: 'backlog',
|
|
15
|
+
sprints: 'sprints',
|
|
14
16
|
adrs: 'adrs',
|
|
15
17
|
checklists: 'checklists',
|
|
16
18
|
};
|
|
@@ -20,6 +22,8 @@ export const ID_PREFIXES = {
|
|
|
20
22
|
story: 'US',
|
|
21
23
|
task: 'TASK',
|
|
22
24
|
quick: 'QT',
|
|
25
|
+
backlog: 'BL',
|
|
26
|
+
sprint: 'SPRINT',
|
|
23
27
|
adr: 'ADR',
|
|
24
28
|
};
|
|
25
29
|
export function getTemplatesDir() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -16,6 +16,36 @@ export declare const logger: {
|
|
|
16
16
|
error(msg: string): void;
|
|
17
17
|
heading(msg: string): void;
|
|
18
18
|
dim(msg: string): void;
|
|
19
|
-
debug(msg: string): void;
|
|
19
|
+
debug(msg: string, ...args: unknown[]): void;
|
|
20
|
+
};
|
|
21
|
+
export declare const display: {
|
|
22
|
+
/** Print a single formatted line. */
|
|
23
|
+
line(text: string): void;
|
|
24
|
+
/** Print an empty line for spacing. */
|
|
25
|
+
blank(): void;
|
|
26
|
+
/** Print a dim horizontal separator. */
|
|
27
|
+
separator(width?: number, char?: string): void;
|
|
28
|
+
/** Print a bold section heading. */
|
|
29
|
+
heading(text: string): void;
|
|
30
|
+
/** Print a key-value pair with aligned label. */
|
|
31
|
+
keyValue(label: string, value: string, indent?: number): void;
|
|
32
|
+
/** Print a bulleted list item. */
|
|
33
|
+
bullet(text: string, indent?: number): void;
|
|
34
|
+
/** Print a numbered list item. */
|
|
35
|
+
numbered(index: number, text: string, indent?: number): void;
|
|
36
|
+
/** Print a table header row with dim column names. */
|
|
37
|
+
tableHeader(columns: {
|
|
38
|
+
label: string;
|
|
39
|
+
width: number;
|
|
40
|
+
}[], indent?: number): void;
|
|
41
|
+
/** Print a table row with padded columns. */
|
|
42
|
+
tableRow(values: string[], widths: number[], indent?: number): void;
|
|
43
|
+
/** Print a table separator matching column widths. */
|
|
44
|
+
tableSeparator(totalWidth: number, indent?: number, char?: string): void;
|
|
45
|
+
/** Print a progress bar. */
|
|
46
|
+
progressBar(percent: number, width?: number, opts?: {
|
|
47
|
+
label?: string;
|
|
48
|
+
indent?: number;
|
|
49
|
+
}): void;
|
|
20
50
|
};
|
|
21
51
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAe9C,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAG1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA2BtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,eAAO,MAAM,MAAM;cACP,MAAM;iBAGH,MAAM;cAGT,MAAM;eAGL,MAAM;iBAGJ,MAAM;aAGV,MAAM;eAGJ,MAAM,WAAW,OAAO,EAAE;CAStC,CAAC;AAQF,eAAO,MAAM,OAAO;IAClB,qCAAqC;eAC1B,MAAM;IAGjB,uCAAuC;;IAIvC,wCAAwC;;IAIxC,oCAAoC;kBACtB,MAAM;IAGpB,iDAAiD;oBACjC,MAAM,SAAS,MAAM;IAIrC,kCAAkC;iBACrB,MAAM;IAInB,kCAAkC;oBAClB,MAAM,QAAQ,MAAM;IAIpC,sDAAsD;yBACjC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;IAKvD,6CAA6C;qBAC5B,MAAM,EAAE,UAAU,MAAM,EAAE;IAK3C,sDAAsD;+BAC3B,MAAM;IAIjC,4BAA4B;yBACP,MAAM,yBAAoB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAgBnF,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Internal output primitives — the only place console.* is allowed.
|
|
4
|
+
// All public APIs (logger.*, display.*) delegate here.
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// biome-ignore lint/suspicious/noConsole: logger is the intentional console abstraction
|
|
7
|
+
const out = (...args) => console.log(...args);
|
|
8
|
+
// biome-ignore lint/suspicious/noConsole: logger is the intentional console abstraction
|
|
9
|
+
const outErr = (...args) => console.error(...args);
|
|
2
10
|
let verboseEnabled = false;
|
|
3
11
|
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
4
12
|
/** Format token usage for display. Returns empty string if no usage data. */
|
|
@@ -28,7 +36,7 @@ export function createSpinner(message) {
|
|
|
28
36
|
succeed(msg) {
|
|
29
37
|
clearInterval(interval);
|
|
30
38
|
process.stdout.write(`\r${' '.repeat(currentMsg.length + 4)}\r`);
|
|
31
|
-
|
|
39
|
+
out(chalk.green('✓'), msg);
|
|
32
40
|
},
|
|
33
41
|
};
|
|
34
42
|
}
|
|
@@ -40,27 +48,102 @@ export function isVerbose() {
|
|
|
40
48
|
}
|
|
41
49
|
export const logger = {
|
|
42
50
|
info(msg) {
|
|
43
|
-
|
|
51
|
+
out(chalk.blue('ℹ'), msg);
|
|
44
52
|
},
|
|
45
53
|
success(msg) {
|
|
46
|
-
|
|
54
|
+
out(chalk.green('✓'), msg);
|
|
47
55
|
},
|
|
48
56
|
warn(msg) {
|
|
49
|
-
|
|
57
|
+
out(chalk.yellow('⚠'), msg);
|
|
50
58
|
},
|
|
51
59
|
error(msg) {
|
|
52
|
-
|
|
60
|
+
outErr(chalk.red('✗'), msg);
|
|
53
61
|
},
|
|
54
62
|
heading(msg) {
|
|
55
|
-
|
|
63
|
+
out(chalk.bold.cyan(`\n${msg}`));
|
|
56
64
|
},
|
|
57
65
|
dim(msg) {
|
|
58
|
-
|
|
66
|
+
out(chalk.dim(msg));
|
|
59
67
|
},
|
|
60
|
-
debug(msg) {
|
|
68
|
+
debug(msg, ...args) {
|
|
61
69
|
if (verboseEnabled) {
|
|
62
|
-
|
|
70
|
+
const extra = args.length > 0
|
|
71
|
+
? ` ${args.map((a) => (a instanceof Error ? (a.stack ?? a.message) : String(a))).join(' ')}`
|
|
72
|
+
: '';
|
|
73
|
+
out(chalk.gray(`[DEBUG] ${msg}${extra}`));
|
|
63
74
|
}
|
|
64
75
|
},
|
|
65
76
|
};
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// display — intentional user-facing output
|
|
79
|
+
//
|
|
80
|
+
// Use `display.*` for formatted output the user sees (tables, lists, previews).
|
|
81
|
+
// Use `logger.*` for operational messages (info, warn, error, debug).
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
export const display = {
|
|
84
|
+
/** Print a single formatted line. */
|
|
85
|
+
line(text) {
|
|
86
|
+
out(text);
|
|
87
|
+
},
|
|
88
|
+
/** Print an empty line for spacing. */
|
|
89
|
+
blank() {
|
|
90
|
+
out('');
|
|
91
|
+
},
|
|
92
|
+
/** Print a dim horizontal separator. */
|
|
93
|
+
separator(width = 50, char = '━') {
|
|
94
|
+
out(chalk.dim(char.repeat(width)));
|
|
95
|
+
},
|
|
96
|
+
/** Print a bold section heading. */
|
|
97
|
+
heading(text) {
|
|
98
|
+
out(chalk.bold(text));
|
|
99
|
+
},
|
|
100
|
+
/** Print a key-value pair with aligned label. */
|
|
101
|
+
keyValue(label, value, indent = 2) {
|
|
102
|
+
const pad = ' '.repeat(indent);
|
|
103
|
+
out(`${pad}${chalk.dim(`${label}:`)} ${value}`);
|
|
104
|
+
},
|
|
105
|
+
/** Print a bulleted list item. */
|
|
106
|
+
bullet(text, indent = 4) {
|
|
107
|
+
const pad = ' '.repeat(indent);
|
|
108
|
+
out(`${pad}• ${text}`);
|
|
109
|
+
},
|
|
110
|
+
/** Print a numbered list item. */
|
|
111
|
+
numbered(index, text, indent = 4) {
|
|
112
|
+
const pad = ' '.repeat(indent);
|
|
113
|
+
out(`${pad}${chalk.dim(`${index}.`)} ${text}`);
|
|
114
|
+
},
|
|
115
|
+
/** Print a table header row with dim column names. */
|
|
116
|
+
tableHeader(columns, indent = 2) {
|
|
117
|
+
const pad = ' '.repeat(indent);
|
|
118
|
+
const header = columns.map((c) => chalk.dim(c.label.padEnd(c.width))).join(' ');
|
|
119
|
+
out(`${pad}${header}`);
|
|
120
|
+
},
|
|
121
|
+
/** Print a table row with padded columns. */
|
|
122
|
+
tableRow(values, widths, indent = 2) {
|
|
123
|
+
const pad = ' '.repeat(indent);
|
|
124
|
+
const row = values.map((v, i) => v.padEnd(widths[i] ?? 0)).join(' ');
|
|
125
|
+
out(`${pad}${row}`);
|
|
126
|
+
},
|
|
127
|
+
/** Print a table separator matching column widths. */
|
|
128
|
+
tableSeparator(totalWidth, indent = 2, char = '─') {
|
|
129
|
+
const pad = ' '.repeat(indent);
|
|
130
|
+
out(`${pad}${char.repeat(totalWidth)}`);
|
|
131
|
+
},
|
|
132
|
+
/** Print a progress bar. */
|
|
133
|
+
progressBar(percent, width = 20, opts = {}) {
|
|
134
|
+
const { label = '', indent = 2 } = opts;
|
|
135
|
+
const pad = ' '.repeat(indent);
|
|
136
|
+
const clamped = Math.max(0, Math.min(100, percent));
|
|
137
|
+
const safeWidth = Math.max(1, width);
|
|
138
|
+
const filled = Math.round((clamped / 100) * safeWidth);
|
|
139
|
+
const empty = safeWidth - filled;
|
|
140
|
+
const bar = `${chalk.green('█'.repeat(filled))}${chalk.dim('░'.repeat(empty))}`;
|
|
141
|
+
const pctStr = clamped >= 75
|
|
142
|
+
? chalk.green(`${clamped}%`)
|
|
143
|
+
: clamped >= 25
|
|
144
|
+
? chalk.yellow(`${clamped}%`)
|
|
145
|
+
: chalk.red(`${clamped}%`);
|
|
146
|
+
out(`${pad}${bar} ${pctStr}${label ? ` ${label}` : ''}`);
|
|
147
|
+
},
|
|
148
|
+
};
|
|
66
149
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAQ1E,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,KAAsB;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,OAAO,CAAC;IAEzB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACjD,UAAU,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,EAAE,CAAC;IACR,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAExC,OAAO;QACL,MAAM,CAAC,GAAW;YAChB,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;QACD,IAAI;YACF,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,GAAW;YACjB,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACjE,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/markdown.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { ArtifactFrontmatter } from '../models/types.js';
|
|
1
2
|
export interface ParsedMarkdown {
|
|
2
|
-
data:
|
|
3
|
+
data: ArtifactFrontmatter;
|
|
3
4
|
content: string;
|
|
4
5
|
}
|
|
5
6
|
export declare function parseMarkdown(raw: string): ParsedMarkdown;
|
|
6
|
-
export declare function toMarkdownWithFrontmatter(data:
|
|
7
|
+
export declare function toMarkdownWithFrontmatter(data: ArtifactFrontmatter, content: string): string;
|
|
7
8
|
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAKzD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5F"}
|
package/dist/utils/markdown.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import matter from 'gray-matter';
|
|
2
2
|
export function parseMarkdown(raw) {
|
|
3
|
+
// gray-matter returns Record<string, unknown>; we cast to ArtifactFrontmatter
|
|
4
|
+
// which is safe because the index signature accepts extra fields.
|
|
3
5
|
const { data, content } = matter(raw);
|
|
4
|
-
return { data, content };
|
|
6
|
+
return { data: data, content };
|
|
5
7
|
}
|
|
6
8
|
export function toMarkdownWithFrontmatter(data, content) {
|
|
7
9
|
return matter.stringify(content, data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAQjC,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,8EAA8E;IAC9E,kEAAkE;IAClE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,EAAE,IAAI,EAAE,IAA2B,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAyB,EAAE,OAAe;IAClF,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/utils/slugify.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Convert text to a URL/filename-safe slug.
|
|
3
|
+
*
|
|
4
|
+
* `maxLength` caps the slug (default 80) so filenames stay well under
|
|
5
|
+
* the OS limit (255 chars) even after the ID prefix and `.md` extension.
|
|
6
|
+
* The slug is trimmed at the last whole word boundary to avoid cut-off words.
|
|
7
|
+
*/
|
|
8
|
+
export declare function slugify(text: string, maxLength?: number): string;
|
|
2
9
|
//# sourceMappingURL=slugify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utils/slugify.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utils/slugify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAmB5D"}
|
package/dist/utils/slugify.js
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Convert text to a URL/filename-safe slug.
|
|
3
|
+
*
|
|
4
|
+
* `maxLength` caps the slug (default 80) so filenames stay well under
|
|
5
|
+
* the OS limit (255 chars) even after the ID prefix and `.md` extension.
|
|
6
|
+
* The slug is trimmed at the last whole word boundary to avoid cut-off words.
|
|
7
|
+
*/
|
|
8
|
+
export function slugify(text, maxLength = 80) {
|
|
9
|
+
let slug = text
|
|
3
10
|
.toLowerCase()
|
|
4
11
|
.trim()
|
|
5
12
|
.replace(/[^\w\s-]/g, '')
|
|
6
13
|
.replace(/[\s_]+/g, '-')
|
|
7
14
|
.replace(/-+/g, '-')
|
|
8
15
|
.replace(/^-+|-+$/g, '');
|
|
16
|
+
if (slug.length > maxLength) {
|
|
17
|
+
slug = slug.slice(0, maxLength);
|
|
18
|
+
// Trim at last whole-word boundary to avoid cut-off words
|
|
19
|
+
const lastDash = slug.lastIndexOf('-');
|
|
20
|
+
if (lastDash > 0) {
|
|
21
|
+
slug = slug.slice(0, lastDash);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return slug;
|
|
9
25
|
}
|
|
10
26
|
//# sourceMappingURL=slugify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slugify.js","sourceRoot":"","sources":["../../src/utils/slugify.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,IAAY;
|
|
1
|
+
{"version":3,"file":"slugify.js","sourceRoot":"","sources":["../../src/utils/slugify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,SAAS,GAAG,EAAE;IAClD,IAAI,IAAI,GAAG,IAAI;SACZ,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChC,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openplanr",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AI-powered planning CLI — backlog, sprints, task templates, estimation, GitHub sync, and AI agent rules for Cursor, Claude Code, and Codex",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli/index.js",
|
|
7
7
|
"types": "./dist/cli/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/cli/index.js",
|
|
11
|
+
"types": "./dist/cli/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
8
14
|
"bin": {
|
|
9
15
|
"planr": "./bin/planr.js",
|
|
10
16
|
"opr": "./bin/planr.js"
|
|
@@ -39,6 +45,11 @@
|
|
|
39
45
|
"claude",
|
|
40
46
|
"codex",
|
|
41
47
|
"ai",
|
|
48
|
+
"backlog",
|
|
49
|
+
"sprint",
|
|
50
|
+
"templates",
|
|
51
|
+
"estimation",
|
|
52
|
+
"github",
|
|
42
53
|
"epic",
|
|
43
54
|
"user-story",
|
|
44
55
|
"scrum"
|
|
@@ -54,7 +65,7 @@
|
|
|
54
65
|
"url": "https://github.com/TechArc-io/OpenPlanr/issues"
|
|
55
66
|
},
|
|
56
67
|
"dependencies": {
|
|
57
|
-
"@anthropic-ai/sdk": "^0.
|
|
68
|
+
"@anthropic-ai/sdk": "^0.81.0",
|
|
58
69
|
"@inquirer/prompts": "^8.3.2",
|
|
59
70
|
"@napi-rs/keyring": "^1.2.0",
|
|
60
71
|
"chalk": "^5.3.0",
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory for creating coding agent instances.
|
|
3
|
-
*/
|
|
4
|
-
import type { CodingAgentName } from '../models/types.js';
|
|
5
|
-
import type { CodingAgent } from './types.js';
|
|
6
|
-
export declare function createAgent(name: CodingAgentName): Promise<CodingAgent>;
|
|
7
|
-
//# sourceMappingURL=agent-factory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-factory.d.ts","sourceRoot":"","sources":["../../src/agents/agent-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAiB7E"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Factory for creating coding agent instances.
|
|
3
|
-
*/
|
|
4
|
-
export async function createAgent(name) {
|
|
5
|
-
switch (name) {
|
|
6
|
-
case 'claude': {
|
|
7
|
-
const { ClaudeAgent } = await import('./claude-agent.js');
|
|
8
|
-
return new ClaudeAgent();
|
|
9
|
-
}
|
|
10
|
-
case 'cursor': {
|
|
11
|
-
const { CursorAgent } = await import('./cursor-agent.js');
|
|
12
|
-
return new CursorAgent();
|
|
13
|
-
}
|
|
14
|
-
case 'codex': {
|
|
15
|
-
const { CodexAgent } = await import('./codex-agent.js');
|
|
16
|
-
return new CodexAgent();
|
|
17
|
-
}
|
|
18
|
-
default:
|
|
19
|
-
throw new Error(`Unknown coding agent: ${name}. Supported: claude, cursor, codex.`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=agent-factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-factory.js","sourceRoot":"","sources":["../../src/agents/agent-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC1D,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxD,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,qCAAqC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code CLI agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Spawns `claude --print` with stream-json output, showing real-time
|
|
5
|
-
* progress via the shared progress spinner. Includes automatic retry
|
|
6
|
-
* for transient API errors.
|
|
7
|
-
*/
|
|
8
|
-
import type { AgentOptions, AgentResult, CodingAgent } from './types.js';
|
|
9
|
-
export declare class ClaudeAgent implements CodingAgent {
|
|
10
|
-
readonly name = "claude";
|
|
11
|
-
isAvailable(): Promise<boolean>;
|
|
12
|
-
execute(prompt: string, options: AgentOptions): Promise<AgentResult>;
|
|
13
|
-
private spawnClaude;
|
|
14
|
-
private buildArgs;
|
|
15
|
-
private attachListeners;
|
|
16
|
-
private printSummary;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=claude-agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent.d.ts","sourceRoot":"","sources":["../../src/agents/claude-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsCzE,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,YAAY;IAEnB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAiC1E,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,eAAe;IA2CvB,OAAO,CAAC,YAAY;CA0BrB"}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code CLI agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Spawns `claude --print` with stream-json output, showing real-time
|
|
5
|
-
* progress via the shared progress spinner. Includes automatic retry
|
|
6
|
-
* for transient API errors.
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from 'node:child_process';
|
|
9
|
-
import { createReadStream } from 'node:fs';
|
|
10
|
-
import { unlink, writeFile } from 'node:fs/promises';
|
|
11
|
-
import { tmpdir } from 'node:os';
|
|
12
|
-
import path from 'node:path';
|
|
13
|
-
import chalk from 'chalk';
|
|
14
|
-
import { createProgressSpinner, describeActivity } from './progress.js';
|
|
15
|
-
import { isRetryableError, MAX_RETRIES, RETRY_DELAY_MS, sleep, which } from './utils.js';
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
// Constants
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
/**
|
|
20
|
-
* Default tool set — we use all standard tools. Claude Code already
|
|
21
|
-
* enforces CWD sandboxing and default permission checks. The safety
|
|
22
|
-
* prompt below handles project-scoped constraints.
|
|
23
|
-
*/
|
|
24
|
-
const ALLOWED_TOOLS = ['Bash', 'Edit', 'Write', 'Read', 'Glob', 'Grep'];
|
|
25
|
-
const SAFETY_PROMPT = [
|
|
26
|
-
'IMPORTANT SAFETY RULES:',
|
|
27
|
-
'1. NEVER run system-wide destructive commands: docker system prune, docker volume prune, docker image prune -a, or similar commands that affect resources beyond this project.',
|
|
28
|
-
'2. For docker cleanup, ONLY use project-scoped commands: docker compose down, docker compose rm.',
|
|
29
|
-
'3. NEVER run sudo or any privilege escalation.',
|
|
30
|
-
'4. NEVER run rm -rf on directories you did not create in this session.',
|
|
31
|
-
'5. When unsure if a command is destructive, explain what you would run and ask the user to execute it manually.',
|
|
32
|
-
].join('\n');
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
// Helpers
|
|
35
|
-
// ---------------------------------------------------------------------------
|
|
36
|
-
/** Write prompt to a temp file to avoid ARG_MAX / backpressure issues */
|
|
37
|
-
async function writeTempPrompt(prompt) {
|
|
38
|
-
const tmpFile = path.join(tmpdir(), `planr-prompt-${Date.now()}.txt`);
|
|
39
|
-
await writeFile(tmpFile, prompt, 'utf-8');
|
|
40
|
-
return tmpFile;
|
|
41
|
-
}
|
|
42
|
-
// ---------------------------------------------------------------------------
|
|
43
|
-
// Agent
|
|
44
|
-
// ---------------------------------------------------------------------------
|
|
45
|
-
export class ClaudeAgent {
|
|
46
|
-
name = 'claude';
|
|
47
|
-
async isAvailable() {
|
|
48
|
-
return (await which('claude')) !== null;
|
|
49
|
-
}
|
|
50
|
-
async execute(prompt, options) {
|
|
51
|
-
const tmpFile = await writeTempPrompt(prompt);
|
|
52
|
-
try {
|
|
53
|
-
let lastExitCode = 1;
|
|
54
|
-
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
55
|
-
if (attempt > 0) {
|
|
56
|
-
const delaySec = (RETRY_DELAY_MS * attempt) / 1000;
|
|
57
|
-
process.stderr.write(`\n⟳ Retrying (attempt ${attempt + 1}/${MAX_RETRIES + 1}) in ${delaySec}s...\n`);
|
|
58
|
-
await sleep(RETRY_DELAY_MS * attempt);
|
|
59
|
-
}
|
|
60
|
-
const result = await this.spawnClaude(tmpFile, options);
|
|
61
|
-
lastExitCode = result.exitCode;
|
|
62
|
-
if (result.exitCode === 0)
|
|
63
|
-
return result;
|
|
64
|
-
if (result.stderr && isRetryableError(result.stderr))
|
|
65
|
-
continue;
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
return { output: '', exitCode: lastExitCode };
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
await unlink(tmpFile).catch(() => { });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// -------------------------------------------------------------------------
|
|
75
|
-
// Private
|
|
76
|
-
// -------------------------------------------------------------------------
|
|
77
|
-
spawnClaude(tmpFile, options) {
|
|
78
|
-
return new Promise((resolve, reject) => {
|
|
79
|
-
const args = this.buildArgs(options);
|
|
80
|
-
const child = spawn('claude', args, {
|
|
81
|
-
cwd: options.cwd,
|
|
82
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
83
|
-
env: { ...process.env },
|
|
84
|
-
});
|
|
85
|
-
const fileStream = createReadStream(tmpFile, 'utf-8');
|
|
86
|
-
fileStream.pipe(child.stdin);
|
|
87
|
-
const { spinner, stderrChunks, resultRef, statsRef } = this.attachListeners(child);
|
|
88
|
-
child.on('error', (err) => {
|
|
89
|
-
spinner.stop();
|
|
90
|
-
reject(new Error(`Failed to launch claude CLI: ${err.message}`));
|
|
91
|
-
});
|
|
92
|
-
child.on('close', (code) => {
|
|
93
|
-
spinner.stop();
|
|
94
|
-
this.printSummary(resultRef.text, statsRef, stderrChunks, code);
|
|
95
|
-
// Combine stderr and stdout for retry detection — Claude sometimes
|
|
96
|
-
// emits API errors (e.g. "tool use concurrency") via stdout stream
|
|
97
|
-
const stderr = stderrChunks.join('');
|
|
98
|
-
const combinedOutput = `${stderr}\n${resultRef.text}`;
|
|
99
|
-
resolve({
|
|
100
|
-
output: resultRef.text,
|
|
101
|
-
exitCode: code ?? 1,
|
|
102
|
-
stderr: combinedOutput,
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
buildArgs(options) {
|
|
108
|
-
const args = [
|
|
109
|
-
'--print',
|
|
110
|
-
'--verbose',
|
|
111
|
-
'--output-format',
|
|
112
|
-
'stream-json',
|
|
113
|
-
'--allowedTools',
|
|
114
|
-
...ALLOWED_TOOLS,
|
|
115
|
-
'--append-system-prompt',
|
|
116
|
-
SAFETY_PROMPT,
|
|
117
|
-
];
|
|
118
|
-
if (options.continueSession) {
|
|
119
|
-
args.push('--continue');
|
|
120
|
-
}
|
|
121
|
-
return args;
|
|
122
|
-
}
|
|
123
|
-
attachListeners(child) {
|
|
124
|
-
const spinner = createProgressSpinner();
|
|
125
|
-
const stderrChunks = [];
|
|
126
|
-
const resultRef = { text: '' };
|
|
127
|
-
const statsRef = { filesCreated: 0, filesEdited: 0 };
|
|
128
|
-
let jsonBuffer = '';
|
|
129
|
-
child.stdout?.on('data', (data) => {
|
|
130
|
-
jsonBuffer += data.toString();
|
|
131
|
-
const lines = jsonBuffer.split('\n');
|
|
132
|
-
jsonBuffer = lines.pop() || '';
|
|
133
|
-
for (const line of lines) {
|
|
134
|
-
const trimmed = line.trim();
|
|
135
|
-
if (!trimmed)
|
|
136
|
-
continue;
|
|
137
|
-
try {
|
|
138
|
-
const event = JSON.parse(trimmed);
|
|
139
|
-
const activity = describeActivity(event);
|
|
140
|
-
if (activity) {
|
|
141
|
-
spinner.setActivity(activity);
|
|
142
|
-
if (activity.startsWith('Creating '))
|
|
143
|
-
statsRef.filesCreated++;
|
|
144
|
-
if (activity.startsWith('Editing '))
|
|
145
|
-
statsRef.filesEdited++;
|
|
146
|
-
process.stderr.write(`\r\x1b[K${chalk.green('✓')} ${chalk.dim(activity)}\n`);
|
|
147
|
-
}
|
|
148
|
-
if (event.type === 'result') {
|
|
149
|
-
resultRef.text = event.result || '';
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
// Incomplete JSON line — skip
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
child.stderr?.on('data', (data) => {
|
|
158
|
-
stderrChunks.push(data.toString());
|
|
159
|
-
});
|
|
160
|
-
return { spinner, stderrChunks, resultRef, statsRef };
|
|
161
|
-
}
|
|
162
|
-
printSummary(resultText, stats, stderrChunks, exitCode) {
|
|
163
|
-
if (resultText) {
|
|
164
|
-
console.log(resultText);
|
|
165
|
-
}
|
|
166
|
-
const parts = [];
|
|
167
|
-
if (stats.filesCreated > 0) {
|
|
168
|
-
parts.push(`${stats.filesCreated} file${stats.filesCreated > 1 ? 's' : ''} created`);
|
|
169
|
-
}
|
|
170
|
-
if (stats.filesEdited > 0) {
|
|
171
|
-
parts.push(`${stats.filesEdited} file${stats.filesEdited > 1 ? 's' : ''} edited`);
|
|
172
|
-
}
|
|
173
|
-
if (parts.length > 0) {
|
|
174
|
-
console.log(chalk.dim(`\n📊 ${parts.join(', ')}`));
|
|
175
|
-
}
|
|
176
|
-
if (exitCode !== 0) {
|
|
177
|
-
const stderr = stderrChunks.join('');
|
|
178
|
-
if (stderr)
|
|
179
|
-
process.stderr.write(stderr);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=claude-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent.js","sourceRoot":"","sources":["../../src/agents/claude-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAI Codex CLI agent adapter.
|
|
3
|
-
*
|
|
4
|
-
* Invokes `codex exec --full-auto --json` for non-interactive mode with
|
|
5
|
-
* write access. Parses JSONL events for real-time progress display.
|
|
6
|
-
* Includes retry logic for transient errors.
|
|
7
|
-
*/
|
|
8
|
-
import type { AgentOptions, AgentResult, CodingAgent } from './types.js';
|
|
9
|
-
export declare class CodexAgent implements CodingAgent {
|
|
10
|
-
readonly name = "codex";
|
|
11
|
-
isAvailable(): Promise<boolean>;
|
|
12
|
-
execute(prompt: string, options: AgentOptions): Promise<AgentResult>;
|
|
13
|
-
private spawnCodex;
|
|
14
|
-
private buildArgs;
|
|
15
|
-
private attachListeners;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=codex-agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-agent.d.ts","sourceRoot":"","sources":["../../src/agents/codex-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzE,qBAAa,UAAW,YAAW,WAAW;IAC5C,QAAQ,CAAC,IAAI,WAAW;IAElB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B1E,OAAO,CAAC,UAAU;IA6ClB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,eAAe;CA4CxB"}
|