myshell-tools 1.0.0 → 2.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.
Files changed (153) hide show
  1. package/CHANGELOG.md +44 -69
  2. package/LICENSE +21 -21
  3. package/README.md +178 -318
  4. package/dist/cli.d.ts +8 -0
  5. package/dist/cli.js +130 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/cost.d.ts +36 -0
  8. package/dist/commands/cost.js +103 -0
  9. package/dist/commands/cost.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +36 -0
  11. package/dist/commands/doctor.js +115 -0
  12. package/dist/commands/doctor.js.map +1 -0
  13. package/dist/commands/login.d.ts +20 -0
  14. package/dist/commands/login.js +60 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/core/assess.d.ts +25 -0
  17. package/dist/core/assess.js +142 -0
  18. package/dist/core/assess.js.map +1 -0
  19. package/dist/core/classify.d.ts +19 -0
  20. package/dist/core/classify.js +80 -0
  21. package/dist/core/classify.js.map +1 -0
  22. package/dist/core/escalate.d.ts +32 -0
  23. package/dist/core/escalate.js +57 -0
  24. package/dist/core/escalate.js.map +1 -0
  25. package/dist/core/index.d.ts +13 -0
  26. package/dist/core/index.js +12 -0
  27. package/dist/core/index.js.map +1 -0
  28. package/dist/core/orchestrate.d.ts +42 -0
  29. package/dist/core/orchestrate.js +439 -0
  30. package/dist/core/orchestrate.js.map +1 -0
  31. package/dist/core/policy.d.ts +9 -0
  32. package/dist/core/policy.js +27 -0
  33. package/dist/core/policy.js.map +1 -0
  34. package/dist/core/prompt.d.ts +26 -0
  35. package/dist/core/prompt.js +125 -0
  36. package/dist/core/prompt.js.map +1 -0
  37. package/dist/core/review.d.ts +46 -0
  38. package/dist/core/review.js +148 -0
  39. package/dist/core/review.js.map +1 -0
  40. package/dist/core/route.d.ts +28 -0
  41. package/dist/core/route.js +52 -0
  42. package/dist/core/route.js.map +1 -0
  43. package/dist/core/types.d.ts +141 -0
  44. package/dist/core/types.js +14 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/infra/atomic.d.ts +53 -0
  47. package/dist/infra/atomic.js +171 -0
  48. package/dist/infra/atomic.js.map +1 -0
  49. package/dist/infra/clock.d.ts +9 -0
  50. package/dist/infra/clock.js +15 -0
  51. package/dist/infra/clock.js.map +1 -0
  52. package/dist/infra/index.d.ts +9 -0
  53. package/dist/infra/index.js +7 -0
  54. package/dist/infra/index.js.map +1 -0
  55. package/dist/infra/ledger.d.ts +49 -0
  56. package/dist/infra/ledger.js +90 -0
  57. package/dist/infra/ledger.js.map +1 -0
  58. package/dist/infra/paths.d.ts +28 -0
  59. package/dist/infra/paths.js +38 -0
  60. package/dist/infra/paths.js.map +1 -0
  61. package/dist/infra/pricing.d.ts +47 -0
  62. package/dist/infra/pricing.js +151 -0
  63. package/dist/infra/pricing.js.map +1 -0
  64. package/dist/infra/session.d.ts +28 -0
  65. package/dist/infra/session.js +61 -0
  66. package/dist/infra/session.js.map +1 -0
  67. package/dist/interface/render.d.ts +27 -0
  68. package/dist/interface/render.js +134 -0
  69. package/dist/interface/render.js.map +1 -0
  70. package/dist/interface/repl.d.ts +23 -0
  71. package/dist/interface/repl.js +90 -0
  72. package/dist/interface/repl.js.map +1 -0
  73. package/dist/interface/run.d.ts +20 -0
  74. package/dist/interface/run.js +31 -0
  75. package/dist/interface/run.js.map +1 -0
  76. package/dist/providers/claude-parse.d.ts +24 -0
  77. package/dist/providers/claude-parse.js +113 -0
  78. package/dist/providers/claude-parse.js.map +1 -0
  79. package/dist/providers/claude.d.ts +45 -0
  80. package/dist/providers/claude.js +122 -0
  81. package/dist/providers/claude.js.map +1 -0
  82. package/dist/providers/codex-parse.d.ts +32 -0
  83. package/dist/providers/codex-parse.js +145 -0
  84. package/dist/providers/codex-parse.js.map +1 -0
  85. package/dist/providers/codex.d.ts +44 -0
  86. package/dist/providers/codex.js +124 -0
  87. package/dist/providers/codex.js.map +1 -0
  88. package/dist/providers/detect.d.ts +49 -0
  89. package/dist/providers/detect.js +125 -0
  90. package/dist/providers/detect.js.map +1 -0
  91. package/dist/providers/errors.d.ts +49 -0
  92. package/dist/providers/errors.js +189 -0
  93. package/dist/providers/errors.js.map +1 -0
  94. package/dist/providers/index.d.ts +9 -0
  95. package/dist/providers/index.js +7 -0
  96. package/dist/providers/index.js.map +1 -0
  97. package/dist/providers/port.d.ts +74 -0
  98. package/dist/providers/port.js +16 -0
  99. package/dist/providers/port.js.map +1 -0
  100. package/dist/providers/registry.d.ts +21 -0
  101. package/dist/providers/registry.js +34 -0
  102. package/dist/providers/registry.js.map +1 -0
  103. package/dist/ui/banner.d.ts +19 -0
  104. package/dist/ui/banner.js +32 -0
  105. package/dist/ui/banner.js.map +1 -0
  106. package/dist/ui/spinner.d.ts +27 -0
  107. package/dist/ui/spinner.js +67 -0
  108. package/dist/ui/spinner.js.map +1 -0
  109. package/dist/ui/theme.d.ts +32 -0
  110. package/dist/ui/theme.js +56 -0
  111. package/dist/ui/theme.js.map +1 -0
  112. package/package.json +55 -49
  113. package/data/orchestrator.json +0 -113
  114. package/src/auth/recovery.mjs +0 -328
  115. package/src/auth/refresh.mjs +0 -373
  116. package/src/chef.mjs +0 -348
  117. package/src/cli/doctor.mjs +0 -568
  118. package/src/cli/reset.mjs +0 -447
  119. package/src/cli/status.mjs +0 -379
  120. package/src/cli.mjs +0 -429
  121. package/src/commands/doctor.mjs +0 -375
  122. package/src/commands/help.mjs +0 -324
  123. package/src/commands/status.mjs +0 -331
  124. package/src/monitor/health.mjs +0 -486
  125. package/src/monitor/performance.mjs +0 -442
  126. package/src/monitor/report.mjs +0 -535
  127. package/src/orchestrator/classify.mjs +0 -391
  128. package/src/orchestrator/confidence.mjs +0 -151
  129. package/src/orchestrator/handoffs.mjs +0 -231
  130. package/src/orchestrator/review.mjs +0 -222
  131. package/src/providers/balance.mjs +0 -201
  132. package/src/providers/claude.mjs +0 -236
  133. package/src/providers/codex.mjs +0 -255
  134. package/src/providers/detect.mjs +0 -185
  135. package/src/providers/errors.mjs +0 -373
  136. package/src/providers/select.mjs +0 -162
  137. package/src/repl-enhanced.mjs +0 -417
  138. package/src/repl.mjs +0 -321
  139. package/src/state/archive.mjs +0 -366
  140. package/src/state/atomic.mjs +0 -116
  141. package/src/state/cleanup.mjs +0 -440
  142. package/src/state/recovery.mjs +0 -461
  143. package/src/state/session.mjs +0 -147
  144. package/src/ui/errors.mjs +0 -456
  145. package/src/ui/formatter.mjs +0 -327
  146. package/src/ui/icons.mjs +0 -318
  147. package/src/ui/progress.mjs +0 -468
  148. package/templates/prompts/confidence-format.txt +0 -14
  149. package/templates/prompts/ic-with-feedback.txt +0 -41
  150. package/templates/prompts/ic.txt +0 -13
  151. package/templates/prompts/manager-review.txt +0 -40
  152. package/templates/prompts/manager.txt +0 -14
  153. package/templates/prompts/worker.txt +0 -12
@@ -0,0 +1,80 @@
1
+ /**
2
+ * src/core/classify.ts — pure task classification.
3
+ *
4
+ * Determines the orchestration tier and security risk level from a free-text
5
+ * task description using keyword/regex signals. No I/O, no time, no randomness.
6
+ *
7
+ * Honesty Contract: no fabricated confidence numbers are produced here.
8
+ * The rationale field names the matched signal so callers can audit decisions.
9
+ */
10
+ // ---------------------------------------------------------------------------
11
+ // Tier signal tables
12
+ // ---------------------------------------------------------------------------
13
+ /** Words that signal a manager-tier task (review, planning, architecture, security). */
14
+ const MANAGER_WORDS = /\b(review|plan|design|architect|audit|security|threat|evaluate|assess|complex)\b/i;
15
+ /** Words that signal a worker-tier task (read-only lookups, searches). */
16
+ const WORKER_WORDS = /\b(find|search|grep|locate|list|read[-\s]only|lookup|scan|what\s+is)\b/i;
17
+ // ---------------------------------------------------------------------------
18
+ // Risk signal tables — highest match wins
19
+ // ---------------------------------------------------------------------------
20
+ /** Critical: auth / secrets / credentials / encryption artefacts. */
21
+ const CRITICAL_RE = /\b(auth|credential|secret|password|token|key|encrypt|certificate)\b|\.env\b/i;
22
+ /** High: payments, deploys, migrations, CI/CD, permissions, schema changes. */
23
+ const HIGH_RE = /\b(login|payment|billing|deploy|migration|ci\/cd|permission|schema)\b/i;
24
+ /** Medium: tests, configs, shared utilities, integrations. */
25
+ const MEDIUM_RE = /\b(test|spec|config|integration|shared|util|lib)\b/i;
26
+ // ---------------------------------------------------------------------------
27
+ // Public API
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * Classify a free-text `task` string into a {@link Classification}.
31
+ *
32
+ * Tier priority: manager > worker > ic (ic is the default).
33
+ * Risk priority: critical > high > medium > low (low is the default).
34
+ *
35
+ * @param task - The raw task description from the user.
36
+ */
37
+ export function classify(task) {
38
+ // --- Tier ---
39
+ let tier;
40
+ let tierSignal;
41
+ if (MANAGER_WORDS.test(task)) {
42
+ tier = 'manager';
43
+ const m = task.match(MANAGER_WORDS);
44
+ tierSignal = m ? `manager keyword '${m[0].toLowerCase()}'` : 'manager keyword';
45
+ }
46
+ else if (WORKER_WORDS.test(task)) {
47
+ tier = 'worker';
48
+ const m = task.match(WORKER_WORDS);
49
+ tierSignal = m ? `worker keyword '${m[0].toLowerCase()}'` : 'worker keyword';
50
+ }
51
+ else {
52
+ tier = 'ic';
53
+ tierSignal = 'no tier keyword matched — defaulting to ic';
54
+ }
55
+ // --- Risk ---
56
+ let risk;
57
+ let riskSignal;
58
+ if (CRITICAL_RE.test(task)) {
59
+ risk = 'critical';
60
+ const m = task.match(CRITICAL_RE);
61
+ riskSignal = `critical keyword '${m ? m[0].toLowerCase() : 'unknown'}'`;
62
+ }
63
+ else if (HIGH_RE.test(task)) {
64
+ risk = 'high';
65
+ const m = task.match(HIGH_RE);
66
+ riskSignal = `high keyword '${m ? m[0].toLowerCase() : 'unknown'}'`;
67
+ }
68
+ else if (MEDIUM_RE.test(task)) {
69
+ risk = 'medium';
70
+ const m = task.match(MEDIUM_RE);
71
+ riskSignal = `medium keyword '${m ? m[0].toLowerCase() : 'unknown'}'`;
72
+ }
73
+ else {
74
+ risk = 'low';
75
+ riskSignal = 'no risk keyword matched — defaulting to low';
76
+ }
77
+ const rationale = `tier: ${tierSignal}; risk: ${riskSignal}`;
78
+ return { tier, risk, rationale };
79
+ }
80
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/core/classify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * src/core/escalate.ts — pure escalation helpers.
3
+ *
4
+ * Provides utilities for determining the next tier in the escalation chain
5
+ * and selecting a cross-vendor reviewer.
6
+ *
7
+ * Pure module: no I/O, no time, no randomness.
8
+ */
9
+ import type { Tier } from './types.js';
10
+ import type { ProviderId } from '../providers/port.js';
11
+ /**
12
+ * Return the next tier up from the given tier, or null if already at the top.
13
+ *
14
+ * Chain: worker → ic → manager → null
15
+ *
16
+ * @param tier - The current orchestration tier.
17
+ */
18
+ export declare function nextTierUp(tier: Tier): Tier | null;
19
+ /**
20
+ * Pick a reviewer provider from the available list, preferring cross-vendor
21
+ * review over same-vendor review.
22
+ *
23
+ * Algorithm:
24
+ * 1. If `available` is empty, return null.
25
+ * 2. Prefer a provider with a DIFFERENT id than `primary` (cross-vendor review).
26
+ * 3. If all available are the same vendor as primary, return `primary` if it
27
+ * is in `available`, else return null.
28
+ *
29
+ * @param available - Provider IDs that are currently reachable.
30
+ * @param primary - The provider ID that ran the IC work being reviewed.
31
+ */
32
+ export declare function pickReviewer(available: ProviderId[], primary: ProviderId): ProviderId | null;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * src/core/escalate.ts — pure escalation helpers.
3
+ *
4
+ * Provides utilities for determining the next tier in the escalation chain
5
+ * and selecting a cross-vendor reviewer.
6
+ *
7
+ * Pure module: no I/O, no time, no randomness.
8
+ */
9
+ // ---------------------------------------------------------------------------
10
+ // Tier chain
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * Return the next tier up from the given tier, or null if already at the top.
14
+ *
15
+ * Chain: worker → ic → manager → null
16
+ *
17
+ * @param tier - The current orchestration tier.
18
+ */
19
+ export function nextTierUp(tier) {
20
+ switch (tier) {
21
+ case 'worker':
22
+ return 'ic';
23
+ case 'ic':
24
+ return 'manager';
25
+ case 'manager':
26
+ return null;
27
+ }
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Reviewer selection
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Pick a reviewer provider from the available list, preferring cross-vendor
34
+ * review over same-vendor review.
35
+ *
36
+ * Algorithm:
37
+ * 1. If `available` is empty, return null.
38
+ * 2. Prefer a provider with a DIFFERENT id than `primary` (cross-vendor review).
39
+ * 3. If all available are the same vendor as primary, return `primary` if it
40
+ * is in `available`, else return null.
41
+ *
42
+ * @param available - Provider IDs that are currently reachable.
43
+ * @param primary - The provider ID that ran the IC work being reviewed.
44
+ */
45
+ export function pickReviewer(available, primary) {
46
+ if (available.length === 0)
47
+ return null;
48
+ // Prefer a different vendor (cross-vendor review is the goal)
49
+ const crossVendor = available.find((id) => id !== primary);
50
+ if (crossVendor !== undefined)
51
+ return crossVendor;
52
+ // All available are same vendor — return primary if it's in the list
53
+ if (available.includes(primary))
54
+ return primary;
55
+ return null;
56
+ }
57
+ //# sourceMappingURL=escalate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escalate.js","sourceRoot":"","sources":["../../src/core/escalate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,IAAI;YACP,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,SAAuB,EAAE,OAAmB;IACvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,8DAA8D;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC3D,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAElD,qEAAqE;IACrE,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAEhD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * src/core/index.ts — public surface of the pure orchestration core.
3
+ */
4
+ export { orchestrate } from './orchestrate.js';
5
+ export { classify } from './classify.js';
6
+ export { route } from './route.js';
7
+ export { assess } from './assess.js';
8
+ export { buildPrompt } from './prompt.js';
9
+ export { DEFAULT_POLICY } from './policy.js';
10
+ export { nextTierUp, pickReviewer } from './escalate.js';
11
+ export { buildReviewPrompt, parseReviewVerdict } from './review.js';
12
+ export type { ReviewVerdict } from './review.js';
13
+ export type { Tier, Risk, Classification, RouteDecision, Assessment, Clock, SessionEntry, SessionWriter, LedgerEntry, LedgerWriter, Policy, OrchestrateDeps, CoreEvent, } from './types.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * src/core/index.ts — public surface of the pure orchestration core.
3
+ */
4
+ export { orchestrate } from './orchestrate.js';
5
+ export { classify } from './classify.js';
6
+ export { route } from './route.js';
7
+ export { assess } from './assess.js';
8
+ export { buildPrompt } from './prompt.js';
9
+ export { DEFAULT_POLICY } from './policy.js';
10
+ export { nextTierUp, pickReviewer } from './escalate.js';
11
+ export { buildReviewPrompt, parseReviewVerdict } from './review.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * src/core/orchestrate.ts — the bounded escalation + review loop.
3
+ *
4
+ * Implements the Phase-2 multi-tier loop:
5
+ * classify → route → run IC → (optionally) cross-vendor review → assess →
6
+ * escalate/retry/accept → final
7
+ *
8
+ * Control-flow overview:
9
+ * 1. Classify the task.
10
+ * 2. If no providers → notice(error) + final(false); return.
11
+ * 3. Append user session entry once.
12
+ * 4. Loop (≤ maxAttempts):
13
+ * a. Route to provider+model for currentTier.
14
+ * b. Yield tier-start → stream provider events → yield tier-done.
15
+ * c. Provider failure → escalate to manager (or break if already there).
16
+ * d. If IC tier + shouldReview(classification, assessment):
17
+ * run cross-vendor reviewer at manager tier.
18
+ * approve → accept; revise → retry IC with notes; escalate → escalate tier.
19
+ * e. Low-confidence / escalate signal → nextTierUp → continue.
20
+ * f. All good → yield final(success:true); return.
21
+ * 5. Loop exhausted or broke on failure → yield final(success:false).
22
+ *
23
+ * Purity rules (enforced by test/arch/guards.test.ts):
24
+ * - No imports of fs / path / child_process
25
+ * - No console.* calls
26
+ * - No Date.now() / Math.random() / new Date() — use deps.clock
27
+ * - No process.exit() — only src/cli.ts may terminate the process
28
+ */
29
+ import type { CoreEvent, OrchestrateDeps } from './types.js';
30
+ /**
31
+ * Orchestrate a task through the bounded escalation + review loop.
32
+ *
33
+ * Yields a sequence of {@link CoreEvent} objects.
34
+ * The interface/render layer drives the generator and surfaces events to
35
+ * the user.
36
+ *
37
+ * @param task - The raw user task description.
38
+ * @param deps - Injected dependencies (providers, clock, session, ledger, policy, …).
39
+ * @param signal - AbortSignal; when aborted the generator stops and yields a
40
+ * notice(warn, 'cancelled') followed by final(success:false).
41
+ */
42
+ export declare function orchestrate(task: string, deps: OrchestrateDeps, signal: AbortSignal): AsyncGenerator<CoreEvent>;