@evref-bl/dev-nexus 0.1.0-alpha.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 (100) hide show
  1. package/README.md +677 -0
  2. package/dist/browserOpener.d.ts +9 -0
  3. package/dist/browserOpener.js +47 -0
  4. package/dist/cli.d.ts +18 -0
  5. package/dist/cli.js +2374 -0
  6. package/dist/gitWorktreeService.d.ts +57 -0
  7. package/dist/gitWorktreeService.js +157 -0
  8. package/dist/index.d.ts +47 -0
  9. package/dist/index.js +47 -0
  10. package/dist/nexusAgentMcpConfig.d.ts +30 -0
  11. package/dist/nexusAgentMcpConfig.js +228 -0
  12. package/dist/nexusAutomation.d.ts +103 -0
  13. package/dist/nexusAutomation.js +390 -0
  14. package/dist/nexusAutomationAgentLaunch.d.ts +148 -0
  15. package/dist/nexusAutomationAgentLaunch.js +855 -0
  16. package/dist/nexusAutomationAgentProfile.d.ts +39 -0
  17. package/dist/nexusAutomationAgentProfile.js +103 -0
  18. package/dist/nexusAutomationAgentSurface.d.ts +62 -0
  19. package/dist/nexusAutomationAgentSurface.js +90 -0
  20. package/dist/nexusAutomationCommandExecutor.d.ts +29 -0
  21. package/dist/nexusAutomationCommandExecutor.js +251 -0
  22. package/dist/nexusAutomationConfig.d.ts +114 -0
  23. package/dist/nexusAutomationConfig.js +547 -0
  24. package/dist/nexusAutomationEnqueue.d.ts +37 -0
  25. package/dist/nexusAutomationEnqueue.js +128 -0
  26. package/dist/nexusAutomationRunOnce.d.ts +91 -0
  27. package/dist/nexusAutomationRunOnce.js +586 -0
  28. package/dist/nexusAutomationScheduler.d.ts +50 -0
  29. package/dist/nexusAutomationScheduler.js +196 -0
  30. package/dist/nexusAutomationStatus.d.ts +55 -0
  31. package/dist/nexusAutomationStatus.js +462 -0
  32. package/dist/nexusAutomationTarget.d.ts +19 -0
  33. package/dist/nexusAutomationTarget.js +33 -0
  34. package/dist/nexusAutomationTargetCycle.d.ts +90 -0
  35. package/dist/nexusAutomationTargetCycle.js +282 -0
  36. package/dist/nexusAutomationTargetReport.d.ts +136 -0
  37. package/dist/nexusAutomationTargetReport.js +504 -0
  38. package/dist/nexusAutomationWorktreeSetup.d.ts +89 -0
  39. package/dist/nexusAutomationWorktreeSetup.js +661 -0
  40. package/dist/nexusCoordination.d.ts +198 -0
  41. package/dist/nexusCoordination.js +1018 -0
  42. package/dist/nexusExtension.d.ts +31 -0
  43. package/dist/nexusExtension.js +1 -0
  44. package/dist/nexusHomeConfig.d.ts +38 -0
  45. package/dist/nexusHomeConfig.js +133 -0
  46. package/dist/nexusMcpServer.d.ts +31 -0
  47. package/dist/nexusMcpServer.js +1036 -0
  48. package/dist/nexusPluginCapabilities.d.ts +197 -0
  49. package/dist/nexusPluginCapabilities.js +201 -0
  50. package/dist/nexusProjectConfig.d.ts +95 -0
  51. package/dist/nexusProjectConfig.js +880 -0
  52. package/dist/nexusProjectHomeService.d.ts +121 -0
  53. package/dist/nexusProjectHomeService.js +171 -0
  54. package/dist/nexusProjectLifecycle.d.ts +62 -0
  55. package/dist/nexusProjectLifecycle.js +205 -0
  56. package/dist/nexusProjectOperations.d.ts +101 -0
  57. package/dist/nexusProjectOperations.js +296 -0
  58. package/dist/nexusProjectRegistry.d.ts +42 -0
  59. package/dist/nexusProjectRegistry.js +91 -0
  60. package/dist/nexusProjectScaffold.d.ts +25 -0
  61. package/dist/nexusProjectScaffold.js +61 -0
  62. package/dist/nexusProjectTemplate.d.ts +34 -0
  63. package/dist/nexusProjectTemplate.js +354 -0
  64. package/dist/nexusSkills.d.ts +134 -0
  65. package/dist/nexusSkills.js +647 -0
  66. package/dist/nexusWorkerContextBundle.d.ts +142 -0
  67. package/dist/nexusWorkerContextBundle.js +375 -0
  68. package/dist/processSupervisor.d.ts +89 -0
  69. package/dist/processSupervisor.js +440 -0
  70. package/dist/vibeKanbanApi.d.ts +11 -0
  71. package/dist/vibeKanbanApi.js +14 -0
  72. package/dist/vibeKanbanAuth.d.ts +25 -0
  73. package/dist/vibeKanbanAuth.js +101 -0
  74. package/dist/vibeKanbanBoardAdapter.d.ts +36 -0
  75. package/dist/vibeKanbanBoardAdapter.js +196 -0
  76. package/dist/vibeKanbanMcpConfig.d.ts +36 -0
  77. package/dist/vibeKanbanMcpConfig.js +191 -0
  78. package/dist/vibeKanbanProjectAdapter.d.ts +39 -0
  79. package/dist/vibeKanbanProjectAdapter.js +113 -0
  80. package/dist/vibeKanbanWorkspaceSetup.d.ts +1 -0
  81. package/dist/vibeKanbanWorkspaceSetup.js +96 -0
  82. package/dist/workItemService.d.ts +60 -0
  83. package/dist/workItemService.js +163 -0
  84. package/dist/workTrackingGitHubProvider.d.ts +71 -0
  85. package/dist/workTrackingGitHubProvider.js +663 -0
  86. package/dist/workTrackingGitLabProvider.d.ts +62 -0
  87. package/dist/workTrackingGitLabProvider.js +523 -0
  88. package/dist/workTrackingJiraProvider.d.ts +67 -0
  89. package/dist/workTrackingJiraProvider.js +652 -0
  90. package/dist/workTrackingLocalProvider.d.ts +49 -0
  91. package/dist/workTrackingLocalProvider.js +463 -0
  92. package/dist/workTrackingProviderService.d.ts +21 -0
  93. package/dist/workTrackingProviderService.js +117 -0
  94. package/dist/workTrackingTypes.d.ts +202 -0
  95. package/dist/workTrackingTypes.js +1 -0
  96. package/dist/workTrackingVibeProvider.d.ts +35 -0
  97. package/dist/workTrackingVibeProvider.js +119 -0
  98. package/dist/worktreeExecutionMetadata.d.ts +76 -0
  99. package/dist/worktreeExecutionMetadata.js +239 -0
  100. package/package.json +37 -0
@@ -0,0 +1,60 @@
1
+ import { type CreateWorkTrackerProviderOptions } from "./workTrackingProviderService.js";
2
+ import type { CreateWorkItemInput, NexusProjectContext, WorkComment, WorkItem, WorkItemPatch, WorkItemQuery, WorkItemRef, WorkStatus, WorkTrackerProvider, WorkTrackingConfig } from "./workTrackingTypes.js";
3
+ export interface WorkItemProjectSelector {
4
+ project?: string;
5
+ projectRoot?: string;
6
+ componentId?: string;
7
+ }
8
+ export interface ResolvedWorkItemProjectContext extends Omit<NexusProjectContext, "workTracking"> {
9
+ workTracking: WorkTrackingConfig;
10
+ }
11
+ export interface ResolvedWorkItemProviderContext {
12
+ projectContext: ResolvedWorkItemProjectContext;
13
+ projectRoot: string;
14
+ workTracking: WorkTrackingConfig;
15
+ provider: WorkTrackerProvider;
16
+ }
17
+ export type WorkItemProjectResolver = (selector: WorkItemProjectSelector) => ResolvedWorkItemProjectContext | Promise<ResolvedWorkItemProjectContext>;
18
+ export type WorkItemProviderFactory = (context: ResolvedWorkItemProjectContext) => WorkTrackerProvider;
19
+ export interface WorkItemServiceOptions {
20
+ resolveProject: WorkItemProjectResolver;
21
+ providerFactory?: WorkItemProviderFactory;
22
+ providerOptions?: Omit<CreateWorkTrackerProviderOptions, "projectRoot" | "now">;
23
+ now?: () => Date | string;
24
+ }
25
+ export type CreateProjectWorkItemInput = WorkItemProjectSelector & Omit<CreateWorkItemInput, "projectRoot">;
26
+ export type ListProjectWorkItemsInput = WorkItemProjectSelector & Omit<WorkItemQuery, "projectRoot">;
27
+ export type GetProjectWorkItemInput = WorkItemProjectSelector & WorkItemRef;
28
+ export interface UpdateProjectWorkItemInput extends WorkItemProjectSelector {
29
+ ref: WorkItemRef;
30
+ patch: WorkItemPatch;
31
+ }
32
+ export interface AddProjectWorkItemCommentInput extends WorkItemProjectSelector {
33
+ ref: WorkItemRef;
34
+ body: string;
35
+ }
36
+ export interface SetProjectWorkItemStatusInput extends WorkItemProjectSelector {
37
+ ref: WorkItemRef;
38
+ status: WorkStatus;
39
+ }
40
+ export declare class WorkItemServiceError extends Error {
41
+ constructor(message: string);
42
+ }
43
+ export declare function createWorkItemService(options: WorkItemServiceOptions): WorkItemService;
44
+ export declare class WorkItemService {
45
+ private readonly resolveProject;
46
+ private readonly providerFactory?;
47
+ private readonly providerOptions?;
48
+ private readonly now?;
49
+ constructor(options: WorkItemServiceOptions);
50
+ resolveProviderContext(selector: WorkItemProjectSelector): Promise<ResolvedWorkItemProviderContext>;
51
+ createWorkItem(input: CreateProjectWorkItemInput): Promise<WorkItem>;
52
+ listWorkItems(input: ListProjectWorkItemsInput): Promise<WorkItem[]>;
53
+ getWorkItem(input: GetProjectWorkItemInput): Promise<WorkItem>;
54
+ updateWorkItem(input: UpdateProjectWorkItemInput): Promise<WorkItem>;
55
+ addComment(input: AddProjectWorkItemCommentInput): Promise<WorkComment>;
56
+ setStatus(input: SetProjectWorkItemStatusInput): Promise<WorkItem>;
57
+ private createProvider;
58
+ }
59
+ export declare function normalizeProjectSelector(selector: WorkItemProjectSelector): string;
60
+ export declare function normalizeWorkItemRef(ref: WorkItemRef, provider: string): WorkItemRef;
@@ -0,0 +1,163 @@
1
+ import { assertWorkTrackerCapability, createWorkTrackerProvider, WorkTrackingProviderServiceError, } from "./workTrackingProviderService.js";
2
+ export class WorkItemServiceError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "WorkItemServiceError";
6
+ }
7
+ }
8
+ export function createWorkItemService(options) {
9
+ return new WorkItemService(options);
10
+ }
11
+ export class WorkItemService {
12
+ resolveProject;
13
+ providerFactory;
14
+ providerOptions;
15
+ now;
16
+ constructor(options) {
17
+ this.resolveProject = options.resolveProject;
18
+ this.providerFactory = options.providerFactory;
19
+ this.providerOptions = options.providerOptions;
20
+ this.now = options.now;
21
+ }
22
+ async resolveProviderContext(selector) {
23
+ const normalizedSelector = normalizeProjectSelectorObject(selector);
24
+ const projectContext = await this.resolveProject(normalizedSelector);
25
+ const workTracking = projectContext.workTracking;
26
+ try {
27
+ return {
28
+ projectContext,
29
+ projectRoot: projectContext.projectRoot,
30
+ workTracking,
31
+ provider: this.createProvider(projectContext),
32
+ };
33
+ }
34
+ catch (error) {
35
+ if (error instanceof WorkTrackingProviderServiceError) {
36
+ throw new WorkItemServiceError(`Project "${projectContext.projectId}" uses work tracking provider ` +
37
+ `"${workTracking.provider}", but it is not available: ${error.message}`);
38
+ }
39
+ throw error;
40
+ }
41
+ }
42
+ async createWorkItem(input) {
43
+ const { project: _project, projectRoot: _projectRoot, componentId: _componentId, ...item } = input;
44
+ const context = await this.resolveProviderContext(input);
45
+ assertWorkTrackerCapability(context.provider, "create", "create work items");
46
+ assertCreateFieldCapabilities(context.provider, item);
47
+ return context.provider.createWorkItem({
48
+ ...item,
49
+ projectRoot: context.projectRoot,
50
+ });
51
+ }
52
+ async listWorkItems(input) {
53
+ const { project: _project, projectRoot: _projectRoot, componentId: _componentId, ...query } = input;
54
+ const context = await this.resolveProviderContext(input);
55
+ assertWorkTrackerCapability(context.provider, "list", "list work items");
56
+ return context.provider.listWorkItems({
57
+ ...query,
58
+ projectRoot: context.projectRoot,
59
+ });
60
+ }
61
+ async getWorkItem(input) {
62
+ const { project: _project, projectRoot: _projectRoot, componentId: _componentId, ...ref } = input;
63
+ const context = await this.resolveProviderContext(input);
64
+ assertWorkTrackerCapability(context.provider, "get", "get work items");
65
+ return context.provider.getWorkItem(normalizeWorkItemRef(ref, context.provider.provider));
66
+ }
67
+ async updateWorkItem(input) {
68
+ const context = await this.resolveProviderContext(input);
69
+ assertWorkTrackerCapability(context.provider, "update", "update work items");
70
+ assertPatchFieldCapabilities(context.provider, input.patch);
71
+ return context.provider.updateWorkItem(normalizeWorkItemRef(input.ref, context.provider.provider), input.patch);
72
+ }
73
+ async addComment(input) {
74
+ const context = await this.resolveProviderContext(input);
75
+ assertWorkTrackerCapability(context.provider, "comment", "add comments");
76
+ return context.provider.addComment(normalizeWorkItemRef(input.ref, context.provider.provider), input.body);
77
+ }
78
+ async setStatus(input) {
79
+ const context = await this.resolveProviderContext(input);
80
+ assertWorkTrackerCapability(context.provider, "update", "set work item status");
81
+ const ref = normalizeWorkItemRef(input.ref, context.provider.provider);
82
+ if (context.provider.setStatus) {
83
+ return context.provider.setStatus(ref, input.status);
84
+ }
85
+ return context.provider.updateWorkItem(ref, { status: input.status });
86
+ }
87
+ createProvider(context) {
88
+ if (this.providerFactory) {
89
+ return this.providerFactory(context);
90
+ }
91
+ return createWorkTrackerProvider(context.workTracking, {
92
+ ...this.providerOptions,
93
+ projectRoot: context.projectRoot,
94
+ now: this.now,
95
+ });
96
+ }
97
+ }
98
+ export function normalizeProjectSelector(selector) {
99
+ const normalizedSelector = normalizeProjectSelectorObject(selector);
100
+ return normalizedSelector.project ?? normalizedSelector.projectRoot;
101
+ }
102
+ export function normalizeWorkItemRef(ref, provider) {
103
+ const refProvider = ref.provider ?? ref.externalRef?.provider;
104
+ if (refProvider && refProvider !== provider) {
105
+ throw new WorkItemServiceError(`work item ref provider "${refProvider}" does not match configured provider "${provider}"`);
106
+ }
107
+ if (!ref.id && !ref.externalRef?.itemId) {
108
+ throw new WorkItemServiceError("work item id or externalRef.itemId is required");
109
+ }
110
+ return {
111
+ ...ref,
112
+ provider: refProvider ?? provider,
113
+ };
114
+ }
115
+ function normalizeProjectSelectorObject(selector) {
116
+ const project = optionalNonEmptyString(selector.project, "project");
117
+ const projectRoot = optionalNonEmptyString(selector.projectRoot, "projectRoot");
118
+ const componentId = optionalNonEmptyString(selector.componentId, "componentId");
119
+ if (project && projectRoot) {
120
+ throw new WorkItemServiceError("Provide either project or projectRoot, not both");
121
+ }
122
+ if (!project && !projectRoot) {
123
+ throw new WorkItemServiceError("project or projectRoot is required");
124
+ }
125
+ return {
126
+ ...(project ? { project } : { projectRoot }),
127
+ ...(componentId ? { componentId } : {}),
128
+ };
129
+ }
130
+ function assertCreateFieldCapabilities(provider, input) {
131
+ if (input.labels && input.labels.length > 0) {
132
+ assertWorkTrackerCapability(provider, "labels", "set labels on created work items");
133
+ }
134
+ if (input.assignees && input.assignees.length > 0) {
135
+ assertWorkTrackerCapability(provider, "assignees", "set assignees on created work items");
136
+ }
137
+ if (input.milestone !== undefined && input.milestone !== null) {
138
+ assertWorkTrackerCapability(provider, "milestones", "set milestones on created work items");
139
+ }
140
+ }
141
+ function assertPatchFieldCapabilities(provider, patch) {
142
+ if (patch.labels !== undefined) {
143
+ assertWorkTrackerCapability(provider, "labels", "set labels on updated work items");
144
+ }
145
+ if (patch.assignees !== undefined) {
146
+ assertWorkTrackerCapability(provider, "assignees", "set assignees on updated work items");
147
+ }
148
+ if (patch.milestone !== undefined) {
149
+ assertWorkTrackerCapability(provider, "milestones", "set milestones on updated work items");
150
+ }
151
+ }
152
+ function optionalNonEmptyString(value, name) {
153
+ if (value === undefined || value === null) {
154
+ return undefined;
155
+ }
156
+ return requiredNonEmptyString(value, name);
157
+ }
158
+ function requiredNonEmptyString(value, name) {
159
+ if (typeof value !== "string" || value.trim().length === 0) {
160
+ throw new WorkItemServiceError(`${name} must be a non-empty string`);
161
+ }
162
+ return value.trim();
163
+ }
@@ -0,0 +1,71 @@
1
+ import type { CreateWorkItemInput, GitHubWorkTrackingConfig, TrackerCapabilities, WorkComment, WorkItem, WorkItemPatch, WorkItemQuery, WorkItemRef, WorkStatus, WorkTrackerProvider } from "./workTrackingTypes.js";
2
+ export declare const defaultGitHubApiBaseUrl = "https://api.github.com";
3
+ export declare const defaultGitHubApiVersion = "2026-03-10";
4
+ export declare const githubStatusLabelPrefix = "status:";
5
+ export interface GitHubWorkTrackerProviderOptions {
6
+ config: GitHubWorkTrackingConfig;
7
+ token?: string | null;
8
+ fetch?: typeof fetch;
9
+ apiBaseUrl?: string | null;
10
+ graphqlApiUrl?: string | null;
11
+ apiVersion?: string | null;
12
+ env?: Record<string, string | undefined>;
13
+ credentialRunner?: GitCredentialRunner | false;
14
+ credentialInteractive?: boolean;
15
+ }
16
+ export interface GitCredentialCommandResult {
17
+ status: number | null;
18
+ stdout: string;
19
+ stderr: string;
20
+ error?: Error;
21
+ }
22
+ export interface GitCredentialRequest {
23
+ protocol: "https";
24
+ host: string;
25
+ path?: string;
26
+ }
27
+ export type GitCredentialRunner = (request: GitCredentialRequest, options: {
28
+ interactive: boolean;
29
+ }) => GitCredentialCommandResult;
30
+ export declare class GitHubWorkTrackerProviderError extends Error {
31
+ constructor(message: string);
32
+ }
33
+ export declare const githubWorkTrackerCapabilities: TrackerCapabilities;
34
+ export declare function githubWorkTrackerCapabilitiesForConfig(config: Pick<GitHubWorkTrackingConfig, "board">): TrackerCapabilities;
35
+ export declare function createGitHubWorkTrackerProvider(options: GitHubWorkTrackerProviderOptions): GitHubWorkTrackerProvider;
36
+ export declare class GitHubWorkTrackerProvider implements WorkTrackerProvider {
37
+ readonly provider = "github";
38
+ readonly capabilities: TrackerCapabilities;
39
+ private readonly config;
40
+ private readonly fetchFn;
41
+ private readonly apiBaseUrl;
42
+ private readonly graphqlApiUrl;
43
+ private readonly apiVersion;
44
+ private readonly staticAuthorizationHeader?;
45
+ private readonly credentialRunner?;
46
+ private readonly credentialInteractive;
47
+ private credentialAuthorizationHeader;
48
+ constructor(options: GitHubWorkTrackerProviderOptions);
49
+ createWorkItem(input: CreateWorkItemInput): Promise<WorkItem>;
50
+ listWorkItems(query?: WorkItemQuery): Promise<WorkItem[]>;
51
+ getWorkItem(ref: WorkItemRef): Promise<WorkItem>;
52
+ updateWorkItem(ref: WorkItemRef, patch: WorkItemPatch): Promise<WorkItem>;
53
+ addComment(ref: WorkItemRef, body: string): Promise<WorkComment>;
54
+ setStatus(ref: WorkItemRef, status: WorkStatus): Promise<WorkItem>;
55
+ private getIssue;
56
+ private addIssueToConfiguredProject;
57
+ private issuePath;
58
+ private requestJson;
59
+ private graphql;
60
+ private issueToWorkItem;
61
+ private commentToWorkComment;
62
+ private issueExternalRef;
63
+ private authorizationHeader;
64
+ }
65
+ export declare function normalizeGitHubApiBaseUrl(hostOrApiBaseUrl?: string | null): string;
66
+ export declare function normalizeGitHubGraphQLApiUrl(hostOrApiBaseUrl?: string | null): string;
67
+ export declare function githubCredentialRequest(config: Pick<GitHubWorkTrackingConfig, "host" | "repository">): GitCredentialRequest;
68
+ export declare function normalizeGitHubCredentialHost(hostOrApiBaseUrl?: string | null): string;
69
+ export declare function defaultGitCredentialRunner(request: GitCredentialRequest, options: {
70
+ interactive: boolean;
71
+ }): GitCredentialCommandResult;