@selesai/code 0.3.9 → 0.4.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 (222) hide show
  1. package/dist/cli/args.d.ts.map +1 -1
  2. package/dist/cli/args.js +4 -4
  3. package/dist/cli/args.js.map +1 -1
  4. package/dist/cli/config-selector.d.ts +4 -2
  5. package/dist/cli/config-selector.d.ts.map +1 -1
  6. package/dist/cli/config-selector.js +1 -1
  7. package/dist/cli/config-selector.js.map +1 -1
  8. package/dist/cli/file-processor.d.ts.map +1 -1
  9. package/dist/cli/file-processor.js +13 -25
  10. package/dist/cli/file-processor.js.map +1 -1
  11. package/dist/core/agent-session.d.ts +22 -5
  12. package/dist/core/agent-session.d.ts.map +1 -1
  13. package/dist/core/agent-session.js +130 -49
  14. package/dist/core/agent-session.js.map +1 -1
  15. package/dist/core/auth-storage.d.ts.map +1 -1
  16. package/dist/core/auth-storage.js +13 -5
  17. package/dist/core/auth-storage.js.map +1 -1
  18. package/dist/core/cache-stats.d.ts +49 -0
  19. package/dist/core/cache-stats.d.ts.map +1 -0
  20. package/dist/core/cache-stats.js +101 -0
  21. package/dist/core/cache-stats.js.map +1 -0
  22. package/dist/core/compaction/compaction.d.ts +1 -2
  23. package/dist/core/compaction/compaction.d.ts.map +1 -1
  24. package/dist/core/compaction/compaction.js +56 -81
  25. package/dist/core/compaction/compaction.js.map +1 -1
  26. package/dist/core/extensions/index.d.ts +1 -1
  27. package/dist/core/extensions/index.d.ts.map +1 -1
  28. package/dist/core/extensions/index.js.map +1 -1
  29. package/dist/core/extensions/loader.d.ts.map +1 -1
  30. package/dist/core/extensions/loader.js +10 -0
  31. package/dist/core/extensions/loader.js.map +1 -1
  32. package/dist/core/extensions/runner.d.ts +5 -3
  33. package/dist/core/extensions/runner.d.ts.map +1 -1
  34. package/dist/core/extensions/runner.js +38 -0
  35. package/dist/core/extensions/runner.js.map +1 -1
  36. package/dist/core/extensions/types.d.ts +41 -12
  37. package/dist/core/extensions/types.d.ts.map +1 -1
  38. package/dist/core/extensions/types.js.map +1 -1
  39. package/dist/core/http-dispatcher.d.ts.map +1 -1
  40. package/dist/core/http-dispatcher.js +28 -1
  41. package/dist/core/http-dispatcher.js.map +1 -1
  42. package/dist/core/index.d.ts +1 -1
  43. package/dist/core/index.d.ts.map +1 -1
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/keybindings.d.ts.map +1 -1
  46. package/dist/core/keybindings.js +3 -6
  47. package/dist/core/keybindings.js.map +1 -1
  48. package/dist/core/model-registry.d.ts +4 -6
  49. package/dist/core/model-registry.d.ts.map +1 -1
  50. package/dist/core/model-registry.js +34 -8
  51. package/dist/core/model-registry.js.map +1 -1
  52. package/dist/core/model-resolver.d.ts +10 -0
  53. package/dist/core/model-resolver.d.ts.map +1 -1
  54. package/dist/core/model-resolver.js +15 -18
  55. package/dist/core/model-resolver.js.map +1 -1
  56. package/dist/core/package-manager.d.ts +4 -1
  57. package/dist/core/package-manager.d.ts.map +1 -1
  58. package/dist/core/package-manager.js +68 -26
  59. package/dist/core/package-manager.js.map +1 -1
  60. package/dist/core/provider-attribution.d.ts.map +1 -1
  61. package/dist/core/provider-attribution.js +0 -10
  62. package/dist/core/provider-attribution.js.map +1 -1
  63. package/dist/core/resource-loader.d.ts +2 -2
  64. package/dist/core/resource-loader.d.ts.map +1 -1
  65. package/dist/core/resource-loader.js +8 -7
  66. package/dist/core/resource-loader.js.map +1 -1
  67. package/dist/core/sdk.d.ts +1 -1
  68. package/dist/core/sdk.d.ts.map +1 -1
  69. package/dist/core/sdk.js +8 -1
  70. package/dist/core/sdk.js.map +1 -1
  71. package/dist/core/session-manager.d.ts +21 -2
  72. package/dist/core/session-manager.d.ts.map +1 -1
  73. package/dist/core/session-manager.js +104 -72
  74. package/dist/core/session-manager.js.map +1 -1
  75. package/dist/core/settings-manager.d.ts +14 -3
  76. package/dist/core/settings-manager.d.ts.map +1 -1
  77. package/dist/core/settings-manager.js +29 -1
  78. package/dist/core/settings-manager.js.map +1 -1
  79. package/dist/core/slash-commands.d.ts +1 -0
  80. package/dist/core/slash-commands.d.ts.map +1 -1
  81. package/dist/core/slash-commands.js +3 -3
  82. package/dist/core/slash-commands.js.map +1 -1
  83. package/dist/core/timings.d.ts +4 -2
  84. package/dist/core/timings.d.ts.map +1 -1
  85. package/dist/core/timings.js +24 -14
  86. package/dist/core/timings.js.map +1 -1
  87. package/dist/core/tools/bash.d.ts.map +1 -1
  88. package/dist/core/tools/bash.js +20 -5
  89. package/dist/core/tools/bash.js.map +1 -1
  90. package/dist/core/tools/edit.d.ts.map +1 -1
  91. package/dist/core/tools/edit.js +2 -2
  92. package/dist/core/tools/edit.js.map +1 -1
  93. package/dist/core/tools/read.d.ts.map +1 -1
  94. package/dist/core/tools/read.js +12 -25
  95. package/dist/core/tools/read.js.map +1 -1
  96. package/dist/defaults/models.json +2 -3
  97. package/dist/extensions/caveman/index.js +16 -1
  98. package/dist/extensions/caveman/test/extension.test.js +7 -4
  99. package/dist/extensions/caveman/test/helpers.test.js +12 -1
  100. package/dist/extensions/context-compaction-reminder.test.ts +82 -0
  101. package/dist/extensions/context-compaction-reminder.ts +28 -0
  102. package/dist/extensions/handoff-new.test.ts +2 -13
  103. package/dist/extensions/handoff-new.ts +16 -25
  104. package/dist/extensions/package.json +1 -0
  105. package/dist/extensions/pi-subagents/agents/architect.md +25 -173
  106. package/dist/extensions/pi-subagents/agents/builder.md +16 -105
  107. package/dist/extensions/pi-subagents/agents/commentator.md +19 -116
  108. package/dist/extensions/pi-subagents/agents/explorer.md +13 -33
  109. package/dist/extensions/pi-subagents/agents/recapper.md +19 -11
  110. package/dist/extensions/pi-subagents/agents/researcher.md +10 -33
  111. package/dist/extensions/question/constants.ts +0 -7
  112. package/dist/extensions/question/index.ts +11 -108
  113. package/dist/extensions/question/schemas.ts +1 -26
  114. package/dist/extensions/question/shortcuts.ts +5 -14
  115. package/dist/extensions/question/tests/question-list.test.ts +8 -0
  116. package/dist/extensions/question/tests/ui-protocol.test.ts +1 -7
  117. package/dist/extensions/question/tui-adapter.ts +3 -20
  118. package/dist/extensions/question/types.ts +0 -6
  119. package/dist/extensions/question/ui-protocol.ts +2 -17
  120. package/dist/extensions/workflow/adapter.ts +384 -124
  121. package/dist/extensions/workflow/extension.ts +2 -1
  122. package/dist/extensions/workflow/modes/prototype.ts +6 -6
  123. package/dist/extensions/workflow/modes/quick.ts +6 -6
  124. package/dist/extensions/workflow/modes/task.ts +79 -0
  125. package/dist/extensions/workflow/run-state.ts +124 -0
  126. package/dist/extensions/workflow/state-machine.ts +4 -8
  127. package/dist/index.d.ts +3 -2
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +2 -1
  130. package/dist/index.js.map +1 -1
  131. package/dist/main.d.ts +2 -2
  132. package/dist/main.d.ts.map +1 -1
  133. package/dist/main.js +17 -4
  134. package/dist/main.js.map +1 -1
  135. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  136. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/assistant-message.js +23 -15
  138. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  139. package/dist/modes/interactive/components/config-selector.d.ts +34 -3
  140. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/config-selector.js +280 -25
  142. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  143. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  144. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  145. package/dist/modes/interactive/components/custom-entry.js +52 -0
  146. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  147. package/dist/modes/interactive/components/extension-editor.d.ts +3 -1
  148. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  149. package/dist/modes/interactive/components/extension-editor.js +12 -3
  150. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  151. package/dist/modes/interactive/components/footer.d.ts +4 -0
  152. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  153. package/dist/modes/interactive/components/footer.js +1 -1
  154. package/dist/modes/interactive/components/footer.js.map +1 -1
  155. package/dist/modes/interactive/components/oauth-selector.d.ts +3 -1
  156. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  157. package/dist/modes/interactive/components/oauth-selector.js +17 -6
  158. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  159. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  160. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  161. package/dist/modes/interactive/components/settings-selector.js +25 -2
  162. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  163. package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  164. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  165. package/dist/modes/interactive/components/status-indicator.js +60 -0
  166. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  167. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  168. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  169. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  170. package/dist/modes/interactive/components/user-message.d.ts +6 -2
  171. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  172. package/dist/modes/interactive/components/user-message.js +19 -6
  173. package/dist/modes/interactive/components/user-message.js.map +1 -1
  174. package/dist/modes/interactive/interactive-mode.d.ts +21 -10
  175. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  176. package/dist/modes/interactive/interactive-mode.js +417 -196
  177. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  178. package/dist/modes/interactive/theme/dark.json +1 -0
  179. package/dist/modes/interactive/theme/light.json +1 -0
  180. package/dist/modes/interactive/theme/theme-schema.json +6 -2
  181. package/dist/modes/interactive/theme/theme.d.ts +3 -2
  182. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  183. package/dist/modes/interactive/theme/theme.js +10 -3
  184. package/dist/modes/interactive/theme/theme.js.map +1 -1
  185. package/dist/modes/print-mode.d.ts.map +1 -1
  186. package/dist/modes/print-mode.js +1 -1
  187. package/dist/modes/print-mode.js.map +1 -1
  188. package/dist/modes/rpc/rpc-client.d.ts +21 -6
  189. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  190. package/dist/modes/rpc/rpc-client.js +17 -3
  191. package/dist/modes/rpc/rpc-client.js.map +1 -1
  192. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  193. package/dist/modes/rpc/rpc-mode.js +20 -1
  194. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  195. package/dist/modes/rpc/rpc-types.d.ts +26 -0
  196. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  197. package/dist/modes/rpc/rpc-types.js.map +1 -1
  198. package/dist/package-manager-cli.d.ts +2 -2
  199. package/dist/package-manager-cli.d.ts.map +1 -1
  200. package/dist/package-manager-cli.js +71 -17
  201. package/dist/package-manager-cli.js.map +1 -1
  202. package/dist/rpc-entry.d.ts +3 -0
  203. package/dist/rpc-entry.d.ts.map +1 -0
  204. package/dist/rpc-entry.js +10 -0
  205. package/dist/rpc-entry.js.map +1 -0
  206. package/dist/skills/workflow-creation/SKILL.md +72 -0
  207. package/dist/utils/clipboard-image.d.ts.map +1 -1
  208. package/dist/utils/clipboard-image.js +1 -1
  209. package/dist/utils/clipboard-image.js.map +1 -1
  210. package/dist/utils/image-convert.d.ts +1 -0
  211. package/dist/utils/image-convert.d.ts.map +1 -1
  212. package/dist/utils/image-convert.js +21 -15
  213. package/dist/utils/image-convert.js.map +1 -1
  214. package/dist/utils/image-process.d.ts +18 -0
  215. package/dist/utils/image-process.d.ts.map +1 -0
  216. package/dist/utils/image-process.js +83 -0
  217. package/dist/utils/image-process.js.map +1 -0
  218. package/dist/utils/mime.d.ts.map +1 -1
  219. package/dist/utils/mime.js +41 -0
  220. package/dist/utils/mime.js.map +1 -1
  221. package/docs/workflows.md +40 -6
  222. package/package.json +8 -5
@@ -599,6 +599,20 @@ function applyPatterns(allPaths, patterns, baseDir) {
599
599
  }
600
600
  return new Set(result);
601
601
  }
602
+ function applyAutoloadDisabledPatterns(allPaths, patterns, baseDir) {
603
+ const result = new Map();
604
+ for (const pattern of patterns) {
605
+ const target = pattern.slice(pattern.startsWith("+") || pattern.startsWith("-") || pattern.startsWith("!") ? 1 : 0);
606
+ const enabled = !pattern.startsWith("-") && !pattern.startsWith("!");
607
+ const exact = pattern.startsWith("+") || pattern.startsWith("-");
608
+ for (const filePath of allPaths) {
609
+ if (exact ? matchesAnyExactPattern(filePath, [target], baseDir) : matchesAnyPattern(filePath, [target], baseDir)) {
610
+ result.set(filePath, enabled);
611
+ }
612
+ }
613
+ }
614
+ return result;
615
+ }
602
616
  export class DefaultPackageManager {
603
617
  cwd;
604
618
  agentDir;
@@ -981,57 +995,67 @@ export class DefaultPackageManager {
981
995
  for (const { pkg, scope } of sources) {
982
996
  const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
983
997
  const filter = typeof pkg === "object" ? pkg : undefined;
984
- const parsed = this.parseSource(sourceStr);
998
+ const deltaBase = this.findAutoloadDeltaBase(pkg, scope, sources);
999
+ const resolvedSource = deltaBase?.source ?? sourceStr;
1000
+ const resolvedScope = deltaBase?.scope ?? scope;
1001
+ const parsed = this.parseSource(resolvedSource);
985
1002
  const metadata = { source: sourceStr, scope, origin: "package" };
986
1003
  if (parsed.type === "local") {
987
- const baseDir = this.getBaseDirForScope(scope);
1004
+ const baseDir = this.getBaseDirForScope(resolvedScope);
988
1005
  this.resolveLocalExtensionSource(parsed, accumulator, filter, metadata, baseDir);
989
1006
  continue;
990
1007
  }
991
1008
  const installMissing = async () => {
992
- if (isOfflineModeEnabled()) {
1009
+ if (isOfflineModeEnabled())
993
1010
  return false;
994
- }
995
1011
  if (!onMissing) {
996
- await this.installParsedSource(parsed, scope);
1012
+ await this.installParsedSource(parsed, resolvedScope);
997
1013
  return true;
998
1014
  }
999
- const action = await onMissing(sourceStr);
1015
+ const action = await onMissing(resolvedSource);
1000
1016
  if (action === "skip")
1001
1017
  return false;
1002
1018
  if (action === "error")
1003
- throw new Error(`Missing source: ${sourceStr}`);
1004
- await this.installParsedSource(parsed, scope);
1019
+ throw new Error(`Missing source: ${resolvedSource}`);
1020
+ await this.installParsedSource(parsed, resolvedScope);
1005
1021
  return true;
1006
1022
  };
1007
1023
  if (parsed.type === "npm") {
1008
- let installedPath = this.getNpmInstallPath(parsed, scope);
1024
+ let installedPath = this.getNpmInstallPath(parsed, resolvedScope);
1009
1025
  const needsInstall = !existsSync(installedPath) || !(await this.installedNpmMatchesConfiguredVersion(parsed, installedPath));
1010
1026
  if (needsInstall) {
1011
1027
  const installed = await installMissing();
1012
1028
  if (!installed)
1013
1029
  continue;
1014
- installedPath = this.getNpmInstallPath(parsed, scope);
1030
+ installedPath = this.getNpmInstallPath(parsed, resolvedScope);
1015
1031
  }
1016
1032
  metadata.baseDir = installedPath;
1017
1033
  this.collectPackageResources(installedPath, accumulator, filter, metadata);
1018
1034
  continue;
1019
1035
  }
1020
1036
  if (parsed.type === "git") {
1021
- const installedPath = this.getGitInstallPath(parsed, scope);
1037
+ const installedPath = this.getGitInstallPath(parsed, resolvedScope);
1022
1038
  if (!existsSync(installedPath)) {
1023
1039
  const installed = await installMissing();
1024
1040
  if (!installed)
1025
1041
  continue;
1026
1042
  }
1027
- else if (scope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
1028
- await this.refreshTemporaryGitSource(parsed, sourceStr);
1043
+ else if (resolvedScope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
1044
+ await this.refreshTemporaryGitSource(parsed, resolvedSource);
1029
1045
  }
1030
1046
  metadata.baseDir = installedPath;
1031
1047
  this.collectPackageResources(installedPath, accumulator, filter, metadata);
1032
1048
  }
1033
1049
  }
1034
1050
  }
1051
+ findAutoloadDeltaBase(pkg, scope, sources) {
1052
+ if (scope !== "project" || typeof pkg !== "object" || pkg.autoload !== false)
1053
+ return undefined;
1054
+ const identity = this.getPackageIdentity(pkg.source, scope);
1055
+ const userEntry = sources.find((entry) => entry.scope === "user" &&
1056
+ this.getPackageIdentity(this.getPackageSourceString(entry.pkg), "user") === identity);
1057
+ return userEntry ? { source: this.getPackageSourceString(userEntry.pkg), scope: "user" } : undefined;
1058
+ }
1035
1059
  resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir) {
1036
1060
  const resolved = this.resolvePathFromBase(source.path, baseDir);
1037
1061
  if (!existsSync(resolved)) {
@@ -1373,25 +1397,30 @@ export class DefaultPackageManager {
1373
1397
  }
1374
1398
  /**
1375
1399
  * Dedupe packages: if same package identity appears in both global and project,
1376
- * keep only the project one (project wins).
1400
+ * keep only the project one (project wins). A project entry with autoload=false
1401
+ * is a delta over the global entry, so both are kept (delta first).
1377
1402
  */
1378
1403
  dedupePackages(packages) {
1404
+ const result = [];
1379
1405
  const seen = new Map();
1380
1406
  for (const entry of packages) {
1381
- const sourceStr = typeof entry.pkg === "string" ? entry.pkg : entry.pkg.source;
1382
- const identity = this.getPackageIdentity(sourceStr, entry.scope);
1383
- const existing = seen.get(identity);
1384
- if (!existing) {
1385
- seen.set(identity, entry);
1407
+ const identity = this.getPackageIdentity(this.getPackageSourceString(entry.pkg), entry.scope);
1408
+ const index = seen.get(identity);
1409
+ if (index === undefined) {
1410
+ seen.set(identity, result.length);
1411
+ result.push(entry);
1412
+ continue;
1413
+ }
1414
+ const existing = result[index];
1415
+ if (existing?.scope === "project" && entry.scope === "user") {
1416
+ if (typeof existing.pkg === "object" && existing.pkg.autoload === false)
1417
+ result.push(entry);
1386
1418
  }
1387
- else if (entry.scope === "project" && existing.scope === "user") {
1388
- // Project wins over user
1389
- seen.set(identity, entry);
1419
+ else if (entry.scope === "project") {
1420
+ result[index] = entry;
1390
1421
  }
1391
- // If existing is project and new is global, keep existing (project)
1392
- // If both are same scope, keep first one
1393
1422
  }
1394
- return Array.from(seen.values());
1423
+ return result;
1395
1424
  }
1396
1425
  parseNpmSpec(spec) {
1397
1426
  const match = spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/);
@@ -1726,7 +1755,10 @@ export class DefaultPackageManager {
1726
1755
  for (const resourceType of RESOURCE_TYPES) {
1727
1756
  const patterns = filter[resourceType];
1728
1757
  const target = this.getTargetMap(accumulator, resourceType);
1729
- if (patterns !== undefined) {
1758
+ if (filter.autoload === false) {
1759
+ this.applyPackageDeltaFilter(packageRoot, patterns ?? [], resourceType, target, metadata);
1760
+ }
1761
+ else if (patterns !== undefined) {
1730
1762
  this.applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);
1731
1763
  }
1732
1764
  else {
@@ -1789,6 +1821,16 @@ export class DefaultPackageManager {
1789
1821
  this.addResource(target, f, metadata, enabled);
1790
1822
  }
1791
1823
  }
1824
+ applyPackageDeltaFilter(packageRoot, userPatterns, resourceType, target, metadata) {
1825
+ if (userPatterns.length === 0) {
1826
+ return;
1827
+ }
1828
+ const { allFiles } = this.collectManifestFiles(packageRoot, resourceType);
1829
+ const enabledByUser = applyAutoloadDisabledPatterns(allFiles, userPatterns, packageRoot);
1830
+ for (const [filePath, enabled] of enabledByUser) {
1831
+ this.addResource(target, filePath, metadata, enabled);
1832
+ }
1833
+ }
1792
1834
  /**
1793
1835
  * Collect all files from a package for a resource type, applying manifest patterns.
1794
1836
  * Returns { allFiles, enabledByManifest } where enabledByManifest is the set of files