@agentteams/cli 0.1.91 → 0.1.93

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 (68) hide show
  1. package/.eslintcache +1 -1
  2. package/README.md +36 -0
  3. package/dist/api/codeReview.d.ts.map +1 -1
  4. package/dist/api/codeReview.js +4 -2
  5. package/dist/api/codeReview.js.map +1 -1
  6. package/dist/api/convention.d.ts.map +1 -1
  7. package/dist/api/convention.js +3 -1
  8. package/dist/api/convention.js.map +1 -1
  9. package/dist/api/linear.d.ts.map +1 -1
  10. package/dist/api/linear.js +3 -1
  11. package/dist/api/linear.js.map +1 -1
  12. package/dist/api/task.js +1 -1
  13. package/dist/api/task.js.map +1 -1
  14. package/dist/commands/convention.d.ts +3 -0
  15. package/dist/commands/convention.d.ts.map +1 -1
  16. package/dist/commands/convention.js +35 -5
  17. package/dist/commands/convention.js.map +1 -1
  18. package/dist/commands/doctor.d.ts +5 -0
  19. package/dist/commands/doctor.d.ts.map +1 -1
  20. package/dist/commands/doctor.js +93 -45
  21. package/dist/commands/doctor.js.map +1 -1
  22. package/dist/commands/document.d.ts +11 -0
  23. package/dist/commands/document.d.ts.map +1 -1
  24. package/dist/commands/document.js +37 -12
  25. package/dist/commands/document.js.map +1 -1
  26. package/dist/commands/index.d.ts.map +1 -1
  27. package/dist/commands/index.js +19 -0
  28. package/dist/commands/index.js.map +1 -1
  29. package/dist/commands/init.d.ts +110 -27
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +659 -462
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/initWorktree.d.ts +32 -0
  34. package/dist/commands/initWorktree.d.ts.map +1 -0
  35. package/dist/commands/initWorktree.js +348 -0
  36. package/dist/commands/initWorktree.js.map +1 -0
  37. package/dist/commands/resolve.d.ts +30 -0
  38. package/dist/commands/resolve.d.ts.map +1 -0
  39. package/dist/commands/resolve.js +166 -0
  40. package/dist/commands/resolve.js.map +1 -0
  41. package/dist/index.js +59 -5
  42. package/dist/index.js.map +1 -1
  43. package/dist/utils/agentEntryPoints.d.ts +68 -0
  44. package/dist/utils/agentEntryPoints.d.ts.map +1 -0
  45. package/dist/utils/agentEntryPoints.js +112 -0
  46. package/dist/utils/agentEntryPoints.js.map +1 -0
  47. package/dist/utils/authServer.d.ts +51 -1
  48. package/dist/utils/authServer.d.ts.map +1 -1
  49. package/dist/utils/authServer.js +77 -0
  50. package/dist/utils/authServer.js.map +1 -1
  51. package/dist/utils/doctorOutput.d.ts.map +1 -1
  52. package/dist/utils/doctorOutput.js +7 -3
  53. package/dist/utils/doctorOutput.js.map +1 -1
  54. package/dist/utils/entityId.d.ts.map +1 -1
  55. package/dist/utils/entityId.js +18 -5
  56. package/dist/utils/entityId.js.map +1 -1
  57. package/dist/utils/entityRef.d.ts +52 -0
  58. package/dist/utils/entityRef.d.ts.map +1 -0
  59. package/dist/utils/entityRef.js +259 -0
  60. package/dist/utils/entityRef.js.map +1 -0
  61. package/dist/utils/git.d.ts +28 -0
  62. package/dist/utils/git.d.ts.map +1 -1
  63. package/dist/utils/git.js +43 -0
  64. package/dist/utils/git.js.map +1 -1
  65. package/dist/utils/initOutput.d.ts.map +1 -1
  66. package/dist/utils/initOutput.js +97 -15
  67. package/dist/utils/initOutput.js.map +1 -1
  68. package/package.json +1 -1
@@ -1,13 +1,63 @@
1
- import type { AuthMode } from '../types/index.js';
2
- import { type ConventionEntryPointState, type ConventionIssue, type EnsurePostCheckoutHookResult } from '../utils/conventionLink.js';
1
+ import { type ConventionStatusResult } from './convention.js';
2
+ import { type DoctorResult } from './doctor.js';
3
+ import type { AuthMode, Config } from '../types/index.js';
4
+ import { type WorktreeInitResult } from './initWorktree.js';
5
+ import { type EnsurePostCheckoutHookResult } from '../utils/conventionLink.js';
6
+ export { bootstrapLinkedWorktree } from './initWorktree.js';
7
+ export type { WorktreeEntryPointEntry, WorktreeEntryPointState, WorktreeInitResult } from './initWorktree.js';
3
8
  type InitOptions = {
4
9
  cwd?: string;
5
10
  /** Personal login is the default; `api-key` is the explicit compatibility path. */
6
11
  authMode?: AuthMode;
12
+ /**
13
+ * Raw `--agent-files` value. Absent means "decide from detection or the
14
+ * interactive prompt"; `none` means "create nothing" — the two are different
15
+ * answers, so this stays a string rather than a pre-parsed list.
16
+ */
17
+ agentFiles?: unknown;
18
+ /** Restore the legacy `<name>-example` write when an entry point already exists. */
19
+ agentFilesExample?: boolean;
20
+ /** Install the managed post-checkout hook even without a linked worktree. */
21
+ installWorktreeHook?: boolean;
22
+ };
23
+ export type InitReadinessStatus = 'READY' | 'DEGRADED' | 'SKIPPED';
24
+ export type InitReadinessStage = 'project-binding' | 'credential' | 'convention-sync' | 'local-adapters';
25
+ export type InitReadinessIssue = {
26
+ code: string;
27
+ message: string;
28
+ };
29
+ export type InitReadinessStep = {
30
+ stage: InitReadinessStage;
31
+ status: InitReadinessStatus;
32
+ issues: InitReadinessIssue[];
33
+ retryCommand?: string;
34
+ };
35
+ /**
36
+ * The local adapters init runs *after* the project binding and the credential
37
+ * are already on disk. They are reported one by one because they fail
38
+ * independently and each has its own repair command — collapsing them into a
39
+ * single verdict is what used to turn one unwritable file into
40
+ * "Initialization failed".
41
+ */
42
+ export type InitAdapterName = 'gitignore' | 'agent-entry-points' | 'gemini-ignore' | 'post-checkout-hook';
43
+ export type InitAdapterOutcome = {
44
+ adapter: InitAdapterName;
45
+ status: InitReadinessStatus;
46
+ issues: InitReadinessIssue[];
47
+ retryCommand?: string;
7
48
  };
8
49
  export type AgentFileEntry = {
9
50
  relativePath: string;
10
- type: 'created' | 'example';
51
+ type: 'created' | 'example' | 'skipped';
52
+ };
53
+ /** One entry point path that could not be written, and why. */
54
+ export type AgentEntryPointWriteFailure = {
55
+ relativePath: string;
56
+ message: string;
57
+ };
58
+ export type AgentEntryPointWriteResult = {
59
+ entries: AgentFileEntry[];
60
+ failures: AgentEntryPointWriteFailure[];
11
61
  };
12
62
  type OAuthInitResult = {
13
63
  success: true;
@@ -28,34 +78,67 @@ type OAuthInitResult = {
28
78
  nickname: string;
29
79
  persisted: boolean;
30
80
  };
31
- /**
32
- * Personal-token path only. The browser round trip still mints an agent key —
33
- * it is what fetches the convention template — and this records whether that
34
- * key was handed back before init exited.
35
- */
36
- agentKeyRevoked?: boolean;
37
81
  warning?: string;
82
+ readiness: InitReadinessStep[];
83
+ /** Per-adapter detail behind the `local-adapters` readiness step. Additive. */
84
+ localAdapters: InitAdapterOutcome[];
38
85
  };
39
- export type WorktreeEntryPointState = ConventionEntryPointState;
40
- export type WorktreeEntryPointEntry = {
41
- relativePath: string;
42
- state: WorktreeEntryPointState;
43
- };
44
- export type WorktreeInitResult = {
86
+ export type ConfiguredProjectInitResult = {
45
87
  success: true;
46
- mode: 'worktree';
47
- worktreePath: string;
48
- sourcePath: string;
49
- targetPath: string;
50
- materialization: 'symlink' | 'copy' | 'relinked' | 'existing' | 'blocked';
51
- entryPoints: WorktreeEntryPointEntry[];
52
- issues: ConventionIssue[];
53
- warning?: string;
88
+ mode: 'configured-project';
89
+ configPath: string;
90
+ conventionPath: string;
91
+ teamId: string;
92
+ projectId: string;
93
+ authMode: AuthMode;
94
+ credentialSource: 'explicit-api-key' | 'personal-token' | 'config-api-key';
95
+ conventionsUpdated: boolean;
96
+ conventionStatus?: ConventionStatusResult;
97
+ conventionError?: string;
98
+ doctor: DoctorResult;
99
+ readiness: InitReadinessStep[];
100
+ /** Entry points this run wrote or left alone. Additive; the fast path repairs them too. */
101
+ agentFiles: AgentFileEntry[];
102
+ /** Per-adapter detail behind the `local-adapters` readiness step. Additive. */
103
+ localAdapters: InitAdapterOutcome[];
104
+ postCheckoutHook?: EnsurePostCheckoutHookResult;
105
+ };
106
+ type InitResult = OAuthInitResult | WorktreeInitResult | ConfiguredProjectInitResult;
107
+ export type InitExecutionKind = 'linked-worktree' | 'configured-project' | 'new-project';
108
+ export type InitExecutionContext = {
109
+ kind: InitExecutionKind;
110
+ configPath: string | null;
111
+ config: Partial<Config> | null;
54
112
  };
55
- type InitResult = OAuthInitResult | WorktreeInitResult;
56
113
  export declare function detectOsType(): 'MACOS' | 'LINUX' | 'WINDOWS' | undefined;
57
- export declare function buildAuthorizeUrl(port: number, projectName: string, authPathEnc?: string, osType?: string, state?: string, machineId?: string): string;
58
- export declare function bootstrapLinkedWorktree(cwd: string): WorktreeInitResult | null;
114
+ export type AuthorizeUrlInput = {
115
+ port: number;
116
+ projectName: string;
117
+ authPathEnc?: string;
118
+ osType?: string;
119
+ state?: string;
120
+ machineId?: string;
121
+ /**
122
+ * Present only on the unified setup path. It is what asks the web page to
123
+ * finish selection *and* the personal-token consent on one screen; a web build
124
+ * that does not know `flow=setup` simply ignores both parameters, which is why
125
+ * the `--auth api-key` path must keep omitting them.
126
+ */
127
+ codeChallenge?: string;
128
+ };
129
+ export declare function buildAuthorizeUrl(input: AuthorizeUrlInput): string;
130
+ /**
131
+ * Classify init before it opens a browser or materializes any local adapters.
132
+ *
133
+ * This resolver is intentionally read-only: the linked-worktree branch calls
134
+ * `bootstrapLinkedWorktree` and the configured-project branch resolves its
135
+ * credential only after classification, so a classification never touches a
136
+ * keychain, a token, or the filesystem.
137
+ *
138
+ * `userHomeDir` is injectable for the same reason as in
139
+ * `getConfigurationNotFoundMessage`: `os.homedir()` does not follow a test's
140
+ * `process.env.HOME`, so the global-config rule would be untestable otherwise.
141
+ */
142
+ export declare function detectInitExecutionContext(cwd: string, explicitAuthMode?: AuthMode, userHomeDir?: string): InitExecutionContext;
59
143
  export declare function executeInitCommand(options?: InitOptions): Promise<InitResult>;
60
- export {};
61
144
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,mBAAmB,CAAC;AAK1D,OAAO,EAQL,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,4BAA4B,EAClC,MAAM,4BAA4B,CAAC;AAyBpC,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,QAAQ,EAAE,QAAQ,CAAC;IACnB,8FAA8F;IAC9F,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1E,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACvC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,UAAU,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAoCvD,wBAAgB,YAAY,IAAI,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAcxE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAsBR;AA4eD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CA6F9E;AAED,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAEnF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}