sneakoscope 5.7.0 → 5.8.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 (53) hide show
  1. package/README.md +1 -1
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/bin/sks.js +1 -1
  6. package/dist/cli/command-registry.js +1 -2
  7. package/dist/cli/{insane-search-command.js → super-search-command.js} +96 -55
  8. package/dist/cli/xai-command.js +7 -7
  9. package/dist/config/skills-manifest.json +63 -70
  10. package/dist/core/agents/agent-codex-cockpit.js +3 -3
  11. package/dist/core/agents/agent-orchestrator.js +20 -2
  12. package/dist/core/agents/agent-wrongness.js +1 -1
  13. package/dist/core/agents/native-cli-session-swarm.js +14 -1
  14. package/dist/core/agents/parallel-runtime-proof.js +82 -8
  15. package/dist/core/commands/gc-command.js +12 -6
  16. package/dist/core/commands/run-command.js +20 -18
  17. package/dist/core/feature-fixtures.js +15 -8
  18. package/dist/core/fsx.js +1 -1
  19. package/dist/core/init/skills.js +1 -2
  20. package/dist/core/mission.js +41 -15
  21. package/dist/core/release-parallel-full-coverage.js +1 -1
  22. package/dist/core/retention.js +1 -1
  23. package/dist/core/routes/constants.js +2 -2
  24. package/dist/core/routes.js +150 -52
  25. package/dist/core/source-intelligence/source-intelligence-policy.js +5 -5
  26. package/dist/core/source-intelligence/source-intelligence-proof.js +8 -8
  27. package/dist/core/source-intelligence/source-intelligence-runner.js +16 -16
  28. package/dist/core/strategy/strategy-gate.js +2 -1
  29. package/dist/core/super-search/runtime-helpers.js +289 -0
  30. package/dist/core/super-search/runtime.js +259 -0
  31. package/dist/core/super-search/source-records.js +96 -0
  32. package/dist/core/super-search/types.js +3 -0
  33. package/dist/core/trust-kernel/trust-report.js +3 -3
  34. package/dist/core/verification/real-evidence-policy.js +55 -0
  35. package/dist/core/version.js +1 -1
  36. package/dist/scripts/agent-visual-consistency-check.js +1 -1
  37. package/dist/scripts/check-architecture.js +0 -1
  38. package/dist/scripts/mutation-callsite-coverage-check.js +7 -0
  39. package/dist/scripts/release-metadata-1-19-check.js +2 -2
  40. package/dist/scripts/release-parallel-check.js +2 -2
  41. package/dist/scripts/release-parallel-full-coverage-check.js +1 -1
  42. package/dist/scripts/sks-1-18-gate-lib.js +2 -2
  43. package/dist/scripts/source-intelligence-all-modes-check.js +2 -2
  44. package/dist/scripts/source-intelligence-policy-check.js +1 -1
  45. package/dist/scripts/super-search-name-guard-check.js +98 -0
  46. package/dist/scripts/{ultra-search-provider-interface-check.js → super-search-provider-interface-check.js} +9 -9
  47. package/dist/scripts/trust-fixture-check.js +19 -6
  48. package/package.json +9 -3
  49. package/schemas/agents/parallel-runtime-proof.schema.json +17 -1
  50. package/dist/core/ultra-search/runtime.js +0 -502
  51. package/dist/core/ultra-search/types.js +0 -3
  52. package/dist/scripts/release-readiness-report.js +0 -1262
  53. /package/dist/core/{ultra-search → super-search}/index.js +0 -0
@@ -408,19 +408,19 @@ export const ROUTES = [
408
408
  examples: ['$Research investigate this idea']
409
409
  },
410
410
  {
411
- id: 'InsaneSearch',
412
- command: '$Insane-Search',
413
- mode: 'ULTRA_SEARCH',
411
+ id: 'SuperSearch',
412
+ command: '$Super-Search',
413
+ mode: 'SUPER_SEARCH',
414
414
  route: 'provider-independent source intelligence',
415
- description: 'Run InsaneSearch source acquisition, source normalization, claim/proof ledgers, and provider-independent citation evidence without requiring xAI/Grok.',
416
- requiredSkills: ['insane-search', 'pipeline-runner', 'context7-docs', 'honest-mode'],
417
- dollarAliases: ['$InsaneSearch', '$Ultra-Search', '$UltraSearch'],
418
- lifecycle: ['source_intent', 'query_variants', 'provider_plan', 'source_ledgers', 'claim_ledgers', 'ultra_search_gate', 'honest_mode'],
415
+ description: 'Run Super-Search source acquisition, source normalization, claim/proof ledgers, and provider-independent citation evidence without requiring xAI/Grok.',
416
+ requiredSkills: ['super-search', 'pipeline-runner', 'context7-docs', 'honest-mode'],
417
+ appSkillAliases: ['super-search'],
418
+ lifecycle: ['source_intent', 'query_variants', 'provider_plan', 'source_ledgers', 'claim_ledgers', 'super_search_gate', 'honest_mode'],
419
419
  context7Policy: 'if_external_docs',
420
420
  reasoningPolicy: 'high',
421
- stopGate: 'ultra-search/ultra-search-gate.json',
422
- cliEntrypoint: 'sks insane-search doctor|run|x|fetch|status|inspect|sources|claims|cache|bench|migrate-xai',
423
- examples: ['$Insane-Search run "current package release notes"', '$InsaneSearch x "site:x.com product launch"']
421
+ stopGate: 'super-search/super-search-gate.json',
422
+ cliEntrypoint: 'sks super-search doctor|run|x|fetch|status|inspect|sources|claims|cache|bench',
423
+ examples: ['$Super-Search run "current package release notes"', '$Super-Search x "site:x.com product launch"']
424
424
  },
425
425
  {
426
426
  id: 'SEOGEOOptimizer',
@@ -599,9 +599,8 @@ export const COMMAND_CATALOG = [
599
599
  { name: 'image-ux-review', usage: 'sks ux-review run --image <path> --fix --json | sks image-ux-review status <mission-id|latest> [--json]', description: 'Run or inspect $Image-UX-Review gpt-image-2/imagegen annotated UI/UX review artifacts, issue ledgers, safe fix loops, recapture, and proof gates.' },
600
600
  { name: 'computer-use', usage: 'sks computer-use import|status|smoke|require ... [--json]', description: 'Record native Mac/non-web Computer Use visual evidence while keeping web verification on the Chrome Extension path.' },
601
601
  { name: 'context7', usage: 'sks context7 check|setup|tools|resolve|docs|evidence ...', description: 'Check, configure, and call the local Context7 MCP requirement.' },
602
- { name: 'insane-search', usage: 'sks insane-search doctor|run|x|fetch|status|inspect|sources|claims|cache|bench|migrate-xai', description: 'Run provider-independent InsaneSearch source intelligence.' },
603
- { name: 'ultra-search', usage: 'compatibility alias for sks insane-search', description: 'Deprecated compatibility alias; use sks insane-search.' },
604
- { name: 'xai', usage: 'sks xai check|status|docs', description: 'Deprecated compatibility notice; use sks insane-search.' },
602
+ { name: 'super-search', usage: 'sks super-search doctor|run|x|fetch|status|inspect|sources|claims|cache|bench', description: 'Run Super-Search provider-independent source intelligence.' },
603
+ { name: 'xai', usage: 'sks xai check|status|docs', description: 'Deprecated compatibility notice; use sks super-search.' },
605
604
  { name: 'recallpulse', usage: 'sks recallpulse run|status|eval|governance|checklist <mission-id|latest>', description: 'Run report-only RecallPulse active recall, durable status, proof capsule, evidence envelope, and governance checks.' },
606
605
  { name: 'pipeline', usage: 'sks pipeline status|resume|plan|answer ...', description: 'Inspect the active skill-first route, materialized execution plan, ambiguity gates, and completion gates.' },
607
606
  { name: 'guard', usage: 'sks guard check [--json]', description: 'Check SKS harness self-protection lock, fingerprints, and source-repo exception state.' },
@@ -643,7 +642,7 @@ export const COMMAND_CATALOG = [
643
642
  { name: 'gx', usage: 'sks gx init|render|validate|drift|snapshot [name]', description: 'Create and verify deterministic SVG/HTML visual context cartridges.' },
644
643
  { name: 'profile', usage: 'sks profile show|set <model>', description: 'Inspect or set the current SKS model profile metadata.' },
645
644
  { name: 'gc', usage: 'sks gc [--dry-run] [--json]', description: 'Compact oversized logs and prune stale runtime artifacts.' },
646
- { name: 'stats', usage: 'sks stats [--json]', description: 'Show package and .sneakoscope storage size.' },
645
+ { name: 'stats', usage: 'sks stats [--full] [--json]', description: 'Show package and .sneakoscope storage size.' },
647
646
  { name: 'mcp-server', usage: 'sks mcp-server [--expose-exec] [--probe]', description: 'Run a stdio MCP server exposing SKS read-only commands as tools for any MCP-capable agent host; --expose-exec also exposes non-read-only commands; --probe round-trips initialize/tools-list and exits.' },
648
647
  { name: 'agent-bridge', usage: 'sks agent-bridge setup [--json]', description: 'Publish the agent-bridge manifest, print host registration snippets (generic MCP host, Codex CLI, non-interactive contract), and run a live non-interactive smoke test.' }
649
648
  ];
@@ -785,80 +784,158 @@ export function looksLikeGenerativeEngineOptimizationRequest(prompt = '') {
785
784
  const text = String(prompt || '');
786
785
  return /\b(?:GEO|generative\s+engine\s+optimization|AI\s+(?:answer|search)\s+(?:visibility|discoverability)|LLM\s+(?:citation|answer|visibility|discoverability)|answerability|entity\s+(?:facts?|clarity)|claim\s+evidence|crawler\s+policy|OAI-SearchBot|GPTBot|ChatGPT-User|Claude-SearchBot|ClaudeBot|Claude-User|llms\.txt|AI\s*검색\s*가시성|AI\s*답변\s*가시성|생성형\s*엔진\s*최적화)\b/i.test(text);
787
786
  }
788
- export function looksLikeUltraSearchRequest(prompt = '') {
787
+ export function looksLikeSuperSearchRequest(prompt = '') {
789
788
  const text = String(prompt || '');
790
- return /\b(?:InsaneSearch|Insane-Search|insane\s*search|UltraSearch|Ultra-Search|ultra\s*search|source\s+intelligence|provider-independent\s+source|source\s+acquisition|citation\s+proof|x-search)\b|인세인\s*서치|울트라\s*서치|소스\s*인텔리전스/i.test(text);
789
+ return /\b(?:SuperSearch|Super-Search|source\s+intelligence|provider-independent\s+source|source\s+acquisition|citation\s+proof|x-search)\b|슈퍼\s*서치|소스\s*인텔리전스/i.test(text);
791
790
  }
792
791
  export function routePrompt(prompt) {
793
792
  const text = stripVisibleDecisionAnswerBlocks(prompt);
793
+ const intentScores = scorePromptIntent(text);
794
+ const select = (route) => withPromptIntentScores(route, intentScores);
794
795
  if (/^\$?plan\b/i.test(text))
795
- return routeById('Planner');
796
+ return select(routeById('Planner'));
796
797
  if (/^\$?work\b/i.test(text))
797
- return routeById('Naruto');
798
+ return select(routeById('Naruto'));
798
799
  if (/^\$?swarm\b/i.test(text))
799
- return routeById('Naruto');
800
+ return select(routeById('Naruto'));
800
801
  const command = dollarCommand(text);
801
802
  if (command) {
802
803
  if (command === 'MAD-SKS') {
803
804
  const afterModifier = stripMadSksSignal(text);
804
805
  const nestedCommand = dollarCommand(afterModifier);
805
806
  if (nestedCommand)
806
- return routeByDollarCommand(nestedCommand) || routeById('MadSKS');
807
+ return select(routeByDollarCommand(nestedCommand) || routeById('MadSKS'));
807
808
  if (looksLikeAnswerOnlyRequest(afterModifier))
808
- return routeById('Answer');
809
+ return select(routeById('Answer'));
809
810
  if (looksLikeCodeChangingWork(afterModifier) || looksLikeDirectWorkRequest(afterModifier))
810
- return routeById('Naruto');
811
- return routeById('MadSKS');
811
+ return select(routeById('Naruto'));
812
+ return select(routeById('MadSKS'));
812
813
  }
813
814
  const route = routeByDollarCommand(command) || routeById('SKS');
814
815
  if (route?.id === 'SKS' && looksLikeTeamDefaultWork(stripDollarCommand(text)))
815
- return routeById('Naruto');
816
+ return select(routeById('Naruto'));
816
817
  if (route?.id === 'Team')
817
- return routeById('Naruto');
818
- return route;
818
+ return select(routeById('Naruto'));
819
+ return select(route);
819
820
  }
820
821
  if (hasFromChatImgSignal(text))
821
- return routeById('Naruto');
822
+ return select(routeById('Naruto'));
822
823
  const simpleGitRoute = simpleGitOnlyRouteId(text);
823
824
  if (simpleGitRoute)
824
- return routeById(simpleGitRoute);
825
+ return select(routeById(simpleGitRoute));
825
826
  if (looksLikePresentationArtifactRequest(text))
826
- return routeById('PPT');
827
+ return select(routeById('PPT'));
827
828
  if (looksLikeImageUxReviewRequest(text))
828
- return routeById('ImageUXReview');
829
+ return select(routeById('ImageUXReview'));
829
830
  if (looksLikeComputerUseFastLane(text))
830
- return routeById('ComputerUse');
831
+ return select(routeById('ComputerUse'));
831
832
  if (looksLikeTinyDirectFix(text))
832
- return routeById('DFix');
833
+ return select(routeById('DFix'));
833
834
  if (looksLikeQuestionShapedDirective(text))
834
- return routeById('Naruto');
835
+ return select(routeById('Naruto'));
836
+ if (looksLikeDirectWorkRequest(text))
837
+ return select(routeById('Naruto'));
835
838
  if (looksLikeAnswerOnlyRequest(text))
836
- return routeById('Answer');
839
+ return select(routeById('Answer'));
837
840
  if (/\b(SQL|Supabase|Postgres|migration|RLS|Prisma|Drizzle|Knex|database|DB|execute_sql)\b/i.test(text))
838
- return routeById('DB');
841
+ return select(routeById('DB'));
839
842
  if (/\b(team|multi-agent|subagent|parallel agents|agent team)\b|병렬|팀/i.test(text))
840
- return routeById('Naruto');
843
+ return select(routeById('Naruto'));
841
844
  if (looksLikeChatCaptureRequest(text) && !looksLikeAnswerOnlyRequest(text))
842
- return routeById('Naruto');
845
+ return select(routeById('Naruto'));
843
846
  if (/\b(qa[-\s]?loop|qaloop|e2e\s+qa|qa\s+e2e)\b/i.test(text))
844
- return routeById('QALoop');
845
- if (looksLikeUltraSearchRequest(text) && !looksLikeCodeChangingWork(text) && !looksLikeAnswerOnlyRequest(text))
846
- return routeById('InsaneSearch');
847
+ return select(routeById('QALoop'));
848
+ if (looksLikeSuperSearchRequest(text) && !looksLikeCodeChangingWork(text) && !looksLikeAnswerOnlyRequest(text))
849
+ return select(routeById('SuperSearch'));
847
850
  if (looksLikeGenerativeEngineOptimizationRequest(text))
848
- return routeById('SEOGEOOptimizer');
851
+ return select(routeById('SEOGEOOptimizer'));
849
852
  if (looksLikeSeoRequest(text))
850
- return routeById('SEOGEOOptimizer');
853
+ return select(routeById('SEOGEOOptimizer'));
851
854
  if (/\b(autoresearch|experiment|benchmark|ranking|optimi[sz]e|improve metric|github stars?|npm downloads?|스타|다운로드)\b/i.test(text))
852
- return routeById('AutoResearch');
855
+ return select(routeById('AutoResearch'));
853
856
  if (/\b(research|hypothesis|falsify|novelty|frontier|조사|연구)\b/i.test(text))
854
- return routeById('Research');
857
+ return select(routeById('Research'));
855
858
  if (/(wiki\s+(refresh|pack|validate|prune)|triwiki\s+(refresh|pack|validate)|위키\s*(갱신|리프레시|정리|검증|패킹)|트라이위키|triwiki)/i.test(text) && !looksLikeDirectWorkRequest(text))
856
- return routeById('Wiki');
859
+ return select(routeById('Wiki'));
857
860
  if (/\b(GX|vgraph|visual context|render cartridge|wiki coordinate|rgba|trig|llm wiki)\b/i.test(text))
858
- return routeById('GX');
861
+ return select(routeById('GX'));
859
862
  if (looksLikeTeamDefaultWork(text))
860
- return routeById('Naruto');
861
- return routeById('SKS');
863
+ return select(routeById('Naruto'));
864
+ return select(routeById('SKS'));
865
+ }
866
+ export function scorePromptIntent(prompt = '') {
867
+ const text = String(prompt || '').trim();
868
+ const reasons = new Set();
869
+ const questionShape = /(?:\?|^(?:why|what|how|when|where|who|which|can|could|should|would)\b|^(?:왜|뭐|무엇|어떻게|언제|어디|누구|가능|인가|인지)\b)/i.test(text);
870
+ const conditionalWork = looksLikeConditionalWorkRequest(text);
871
+ const complaintDirective = looksLikeComplaintDirectiveRequest(text);
872
+ const commandSignal = Boolean(dollarCommand(text));
873
+ const tinyDirectFix = looksLikeTinyDirectFix(text);
874
+ const directWork = looksLikeDirectWorkRequest(text);
875
+ const answerOnly = looksLikeAnswerOnlyRequest(text);
876
+ let answerOnlyScore = 0;
877
+ let directWorkScore = 0;
878
+ let tinyDirectFixScore = 0;
879
+ let researchScore = 0;
880
+ let dbScore = 0;
881
+ let superSearchScore = 0;
882
+ if (questionShape) {
883
+ answerOnlyScore += 1;
884
+ reasons.add('question_shape');
885
+ }
886
+ if (commandSignal)
887
+ reasons.add('command_signal');
888
+ if (tinyDirectFix) {
889
+ tinyDirectFixScore += 5;
890
+ directWorkScore += 2;
891
+ reasons.add('tiny_direct_fix');
892
+ }
893
+ if (conditionalWork) {
894
+ directWorkScore += 5;
895
+ reasons.add('conditional_work');
896
+ }
897
+ if (complaintDirective) {
898
+ directWorkScore += 4;
899
+ reasons.add('complaint_directive');
900
+ }
901
+ if (looksLikeQuestionShapedDirective(text)) {
902
+ directWorkScore += 4;
903
+ reasons.add('question_shaped_directive');
904
+ }
905
+ if (directWork) {
906
+ directWorkScore += 3;
907
+ reasons.add('direct_work');
908
+ }
909
+ if (answerOnly) {
910
+ answerOnlyScore += 4;
911
+ reasons.add('answer_only');
912
+ }
913
+ if (/\b(research|hypothesis|falsify|novelty|frontier|조사|연구)\b/i.test(text)) {
914
+ researchScore += 2;
915
+ reasons.add('research');
916
+ }
917
+ if (/\b(SQL|Supabase|Postgres|migration|RLS|Prisma|Drizzle|Knex|database|DB|execute_sql)\b/i.test(text)) {
918
+ dbScore += 3;
919
+ reasons.add('db');
920
+ }
921
+ if (looksLikeSuperSearchRequest(text)) {
922
+ superSearchScore += 4;
923
+ reasons.add('super_search');
924
+ }
925
+ return {
926
+ answerOnly: answerOnlyScore,
927
+ directWork: directWorkScore,
928
+ tinyDirectFix: tinyDirectFixScore,
929
+ research: researchScore,
930
+ db: dbScore,
931
+ superSearch: superSearchScore,
932
+ reasons: [...reasons]
933
+ };
934
+ }
935
+ function withPromptIntentScores(route, intentScores) {
936
+ if (!route)
937
+ return route;
938
+ return { ...route, intent_scores: intentScores };
862
939
  }
863
940
  export function looksLikeComputerUseFastLane(prompt = '') {
864
941
  const text = String(prompt || '');
@@ -883,6 +960,10 @@ export function looksLikeAnswerOnlyRequest(prompt = '') {
883
960
  return false;
884
961
  if (looksLikeQuestionShapedDirective(text))
885
962
  return false;
963
+ if (looksLikeConditionalWorkRequest(text))
964
+ return false;
965
+ if (looksLikeComplaintDirectiveRequest(text))
966
+ return false;
886
967
  const infoCue = /(왜|뭐야|무엇|뭔가|어떤|어떻게|언제|어디|누구|얼마|가능해|맞아|인가|인지|차이|의미|원리|이유|방법|설명|알려줘|요약|정리|비교|찾아줘|찾아봐|검색|조사|근거|출처|fact|source|cite|explain|what|why|how|when|where|who|which|whether|compare|summari[sz]e|search|look up|research|tell me|question|\?)/i.test(text);
887
968
  if (!infoCue)
888
969
  return false;
@@ -892,12 +973,13 @@ export function looksLikeQuestionShapedDirective(prompt = '') {
892
973
  const text = String(prompt || '').trim();
893
974
  if (!text)
894
975
  return false;
895
- const complaint = /(왜|근데|그런데).*(안\s*하|안\s*되|없이|누락|빠뜨|생략|스킵|못\s*하).*(많|자주|계속|이렇게|함|하지|하냐|하니|\?)/i.test(text);
976
+ const complaint = looksLikeComplaintDirectiveRequest(text);
896
977
  if (looksLikeMethodQuestion(text) && !looksLikePoliteDirectWorkRequest(text) && !looksLikeExplicitDirectWorkDirective(text) && !complaint)
897
978
  return false;
979
+ const questionDirective = /(?:\?|왜|why)[\s\S]{0,160}(?:질문|물음표|answer|라우팅|route|routing)[\s\S]{0,160}(?:고쳐|수정|변경|막아|fix|patch|change|update)/i.test(text);
898
980
  const directive = /(반드시|필수|무조건|해야\s*(?:해|함|돼|한다|하지|한다는|되는)|해야지|해야돼|해야한다|알지|기억해|파악해야|구분해야|막아야|보장해야|강제|기본적으로)/i.test(text);
899
981
  const pipelineCue = /(질문|질문형|암묵|지시|파이프라인|라우팅|route|routing|team|팀|sks|기본|구성|게이트|gate|작업|수정|구현|실행)/i.test(text);
900
- return (directive && pipelineCue) || complaint;
982
+ return questionDirective || (directive && pipelineCue) || complaint;
901
983
  }
902
984
  export function looksLikeDirectWorkRequest(prompt = '') {
903
985
  const text = String(prompt || '');
@@ -908,11 +990,27 @@ export function looksLikeDirectWorkRequest(prompt = '') {
908
990
  return false;
909
991
  return looksLikeCodeChangingWork(text)
910
992
  || looksLikeChatCaptureRequest(text)
993
+ || looksLikeConditionalWorkRequest(text)
911
994
  || looksLikeQuestionShapedDirective(text)
912
995
  || explicitDirective
913
996
  || /(작업|파이프라인|구현|수정|변경|추가|적용|반영|처리|수행|검수|설치|해결|리드미|README).*(해줘|해달|해라|해야|되게|줘야|줘야지|달라)/i.test(text)
914
997
  || /(진행해|수행해|작업해|처리해|적용해|반영해|검수해|고쳐줘|바꿔줘|해결해줘|만들어줘|해줘야|해줘야지|해달라|해야지|되게 해|install|run|execute|test|deploy|commit|push)/i.test(text);
915
998
  }
999
+ function looksLikeConditionalWorkRequest(prompt = '') {
1000
+ const text = String(prompt || '').trim();
1001
+ if (!text)
1002
+ return false;
1003
+ return /(확인하고|검토하고|봐서|보고|문제\s*있으면|가능한지).*(고쳐|수정|변경|처리|해결|진행|반영|해줘|해달)/i.test(text)
1004
+ || /\b(?:check|inspect|verify|see)\b[\s\S]{0,120}\b(?:if|whether|when)\b[\s\S]{0,120}\b(?:fix|patch|update|change|repair|resolve)\b/i.test(text)
1005
+ || /\b(?:if|when)\b[\s\S]{0,120}\b(?:problem|issue|bug|broken|fails?)\b[\s\S]{0,120}\b(?:fix|patch|update|change|repair|resolve)\b/i.test(text);
1006
+ }
1007
+ function looksLikeComplaintDirectiveRequest(prompt = '') {
1008
+ const text = String(prompt || '').trim();
1009
+ if (!text)
1010
+ return false;
1011
+ return /(왜|근데|그런데).*(안\s*하|안\s*되|없이|누락|빠뜨|생략|스킵|못\s*하).*(많|자주|계속|이렇게|함|하지|하냐|하니|\?)/i.test(text)
1012
+ || /\bwhy\b[\s\S]{0,80}\b(?:not|missing|skipped|failed|still|keeps?)\b[\s\S]{0,120}\b(?:fix|patch|route|routing|work|do|done)\b/i.test(text);
1013
+ }
916
1014
  function looksLikeExplicitDirectWorkDirective(prompt = '') {
917
1015
  const text = String(prompt || '').trim();
918
1016
  if (!text)
@@ -945,7 +1043,7 @@ export function routeRequiresSubagents(route, prompt = '') {
945
1043
  return false;
946
1044
  if (route.id === 'ImageUXReview')
947
1045
  return false;
948
- if (route.id === 'InsaneSearch')
1046
+ if (route.id === 'SuperSearch')
949
1047
  return false;
950
1048
  if (route.id === 'SEOGEOOptimizer')
951
1049
  return false;
@@ -1030,7 +1128,7 @@ export function routeReasoning(route, prompt = '') {
1030
1128
  return narutoRouteReasoning(text);
1031
1129
  if (route?.id === 'Research' || route?.id === 'AutoResearch')
1032
1130
  return reasoning('xhigh', 'research_or_experiment_route');
1033
- if (route?.id === 'InsaneSearch')
1131
+ if (route?.id === 'SuperSearch')
1034
1132
  return reasoning('high', 'source_intelligence_route');
1035
1133
  if (route?.id === 'SEOGEOOptimizer')
1036
1134
  return reasoning('high', 'search_visibility_route');
@@ -23,7 +23,7 @@ export function buildSourceIntelligencePolicy(input = {}) {
23
23
  wrongnessKinds.push('context7_missing');
24
24
  }
25
25
  if (!offline && codex.status === 'unavailable') {
26
- warnings.push('codex_web_search_unavailable_degraded_to_ultra_cache_or_docs');
26
+ warnings.push('codex_web_search_unavailable_degraded_to_super_cache_or_docs');
27
27
  wrongnessKinds.push('codex_web_search_missing');
28
28
  }
29
29
  if (input.xaiDetection)
@@ -37,8 +37,8 @@ export function buildSourceIntelligencePolicy(input = {}) {
37
37
  : xIntent
38
38
  ? 'x_search'
39
39
  : /deep|exhaustive|가능한 전부|누락 없이|완벽하게 조사/i.test(query)
40
- ? 'ultra_deep'
41
- : 'ultra_balanced');
40
+ ? 'super_deep'
41
+ : 'super_balanced');
42
42
  const selected = new Set();
43
43
  if (docsIntent && context7Available)
44
44
  selected.add('context7');
@@ -56,8 +56,8 @@ export function buildSourceIntelligencePolicy(input = {}) {
56
56
  mode,
57
57
  requirements: {
58
58
  official_sources: docsIntent,
59
- full_content: mode !== 'ultra_fast',
60
- counter_search: mode === 'ultra_deep' || mode === 'ultra_exhaustive',
59
+ full_content: mode !== 'super_fast',
60
+ counter_search: mode === 'super_deep' || mode === 'super_exhaustive',
61
61
  claim_ledger: true,
62
62
  social_recency: xIntent || mode === 'x_search',
63
63
  code_execution_verification: /\b(code|implementation|test|runtime|구현)\b/i.test(query)
@@ -3,19 +3,19 @@ export function buildSourceIntelligenceProof(policy, evidence) {
3
3
  const blockers = [...policy.blockers];
4
4
  const wrongnessKinds = [...policy.wrongness_kinds];
5
5
  const context7Ok = policy.context7.required ? evidence.context7?.ok === true : true;
6
- const ultraOk = evidence.ultra_search?.proof.provider_independent === true && evidence.ultra_search?.proof.xai_runtime_dependency === false;
6
+ const superSearchOk = evidence.super_search?.proof.provider_independent === true && evidence.super_search?.proof.xai_runtime_dependency === false;
7
7
  const appshotsRequired = evidence.appshots?.capability.visual_required === true;
8
8
  const appshotsOk = appshotsRequired ? evidence.appshots?.ok === true : true;
9
9
  if (policy.context7.required && !context7Ok) {
10
10
  blockers.push('context7_missing');
11
11
  wrongnessKinds.push('context7_missing');
12
12
  }
13
- if (!ultraOk) {
14
- blockers.push('ultra_search_provider_independent_proof_missing');
15
- wrongnessKinds.push('ultra_search_provider_independent_proof_missing');
13
+ if (!superSearchOk) {
14
+ blockers.push('super_search_provider_independent_proof_missing');
15
+ wrongnessKinds.push('super_search_provider_independent_proof_missing');
16
16
  }
17
- if (evidence.ultra_search?.proof.blockers.length)
18
- blockers.push(...evidence.ultra_search.proof.blockers);
17
+ if (evidence.super_search?.proof.blockers.length)
18
+ blockers.push(...evidence.super_search.proof.blockers);
19
19
  if (appshotsRequired && !appshotsOk) {
20
20
  blockers.push('appshots_operator_action_missing');
21
21
  wrongnessKinds.push('appshots_operator_action_missing');
@@ -28,8 +28,8 @@ export function buildSourceIntelligenceProof(policy, evidence) {
28
28
  context7_required: policy.context7.required,
29
29
  context7_ok: context7Ok,
30
30
  codex_web_required: policy.codex_web_search.required,
31
- ultra_search_ok: ultraOk,
32
- provider_independent: evidence.ultra_search?.proof.provider_independent === true,
31
+ super_search_ok: superSearchOk,
32
+ provider_independent: evidence.super_search?.proof.provider_independent === true,
33
33
  appshots_required: appshotsRequired,
34
34
  appshots_ok: appshotsOk
35
35
  },
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import { ensureDir, nowIso, sha256, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
3
3
  import { detectCodexWebSearchCapability } from '../codex/codex-web-search-adapter.js';
4
- import { runUltraSearch } from '../ultra-search/index.js';
4
+ import { runSuperSearch } from '../super-search/index.js';
5
5
  import { buildSourceIntelligencePolicy, writeSourceIntelligencePolicyArtifact } from './source-intelligence-policy.js';
6
6
  import { buildSourceIntelligenceProof } from './source-intelligence-proof.js';
7
7
  import { buildAppshotsEvidence, writeAppshotsEvidenceArtifact } from './appshots-evidence.js';
@@ -29,13 +29,13 @@ export async function runSourceIntelligence(input) {
29
29
  offline: input.offline === true,
30
30
  ...(input.context7 ? { context7: input.context7 } : {})
31
31
  });
32
- const ultraMode = sourceModeToUltraMode(policy.mode);
33
- const ultraSearch = await runUltraSearch({
32
+ const superSearchMode = sourceModeToSuperSearchMode(policy.mode);
33
+ const superSearch = await runSuperSearch({
34
34
  root,
35
35
  missionDir,
36
36
  route: input.route || 'unknown',
37
37
  query: input.query,
38
- mode: ultraMode,
38
+ mode: superSearchMode,
39
39
  ...(input.offline === undefined ? {} : { offline: input.offline }),
40
40
  ...(input.context7 ? { context7: input.context7 } : {}),
41
41
  ...(input.codexWebSearch ? { codexWebSearch: input.codexWebSearch } : {}),
@@ -54,13 +54,13 @@ export async function runSourceIntelligence(input) {
54
54
  const providersRequested = policy.selected_providers;
55
55
  const providersCompleted = [
56
56
  ...(context7.ok && policy.context7.required ? ['context7'] : []),
57
- ...(ultraSearch.sources.some((source) => source.provider_id === 'codex_web') ? ['codex_web'] : []),
58
- ...(ultraSearch.sources.some((source) => source.provider_id === 'x_public') ? ['x_public'] : []),
59
- 'ultra_search'
57
+ ...(superSearch.sources.some((source) => source.provider_id === 'codex_web') ? ['codex_web'] : []),
58
+ ...(superSearch.sources.some((source) => source.provider_id === 'x_public') ? ['x_public'] : []),
59
+ 'super_search'
60
60
  ];
61
- const proof = buildSourceIntelligenceProof(policy, { context7, ultra_search: ultraSearch, appshots });
61
+ const proof = buildSourceIntelligenceProof(policy, { context7, super_search: superSearch, appshots });
62
62
  const blockers = [...new Set([...policy.blockers, ...context7.blockers, ...appshots.blockers, ...proof.blockers])];
63
- const warnings = [...new Set([...policy.warnings, ...ultraSearch.warnings, ...appshots.warnings])];
63
+ const warnings = [...new Set([...policy.warnings, ...superSearch.warnings, ...appshots.warnings])];
64
64
  const cacheKey = sha256(JSON.stringify({ route: input.route || 'unknown', query: input.query, mode: policy.mode })).slice(0, 16);
65
65
  const evidence = {
66
66
  schema: SOURCE_INTELLIGENCE_EVIDENCE_SCHEMA,
@@ -77,12 +77,12 @@ export async function runSourceIntelligence(input) {
77
77
  cache: {
78
78
  key: cacheKey,
79
79
  local_only: true,
80
- ultra_search_hit: ultraSearch.cache.hit
80
+ super_search_hit: superSearch.cache.hit
81
81
  },
82
82
  policy,
83
83
  context7,
84
84
  codex_web_search: null,
85
- ultra_search: ultraSearch,
85
+ super_search: superSearch,
86
86
  appshots,
87
87
  proof,
88
88
  blockers,
@@ -102,7 +102,7 @@ export function renderSourceIntelligenceEvidenceMarkdown(evidence) {
102
102
  `- Route: ${evidence.route}`,
103
103
  `- Mode: ${evidence.mode}`,
104
104
  `- Context7: ${evidence.context7.status}`,
105
- `- UltraSearch: ${evidence.ultra_search.proof.ok ? 'ok' : 'partial'}`,
105
+ `- Super-Search: ${evidence.super_search.proof.ok ? 'ok' : 'partial'}`,
106
106
  `- Legacy x-search MCP: not_required`,
107
107
  `- Appshots: ${evidence.appshots?.status || 'not_required'}`,
108
108
  `- Providers completed: ${evidence.parallel.providers_completed.join(', ') || 'none'}`,
@@ -110,12 +110,12 @@ export function renderSourceIntelligenceEvidenceMarkdown(evidence) {
110
110
  ''
111
111
  ].join('\n');
112
112
  }
113
- function sourceModeToUltraMode(mode) {
114
- if (mode === 'ultra_fast')
113
+ function sourceModeToSuperSearchMode(mode) {
114
+ if (mode === 'super_fast')
115
115
  return 'fast';
116
- if (mode === 'ultra_deep')
116
+ if (mode === 'super_deep')
117
117
  return 'deep';
118
- if (mode === 'ultra_exhaustive')
118
+ if (mode === 'super_exhaustive')
119
119
  return 'exhaustive';
120
120
  if (mode === 'url_acquisition')
121
121
  return 'url_acquisition';
@@ -3,6 +3,7 @@ import { nowIso, writeJsonAtomic } from '../fsx.js';
3
3
  export const STRATEGY_GATE_SCHEMA = 'sks.strategy-gate.v1';
4
4
  export function evaluateStrategyGate(input) {
5
5
  const writeCapable = input.writeCapable === true;
6
+ const sourceIntelligenceRequired = input.sourceIntelligenceRequired !== false;
6
7
  const gate = input.compiled.gate;
7
8
  const strategyFirstRequired = writeCapable || gate.visual_appshot_required_count > 0 || input.visualRequired === true;
8
9
  const blockers = [
@@ -13,7 +14,7 @@ export function evaluateStrategyGate(input) {
13
14
  ...(writeCapable && input.visualRequired === true && input.appshotsOk !== true
14
15
  ? ['appshots_operator_action_missing_for_visual_proof']
15
16
  : []),
16
- ...(writeCapable && input.sourceIntelligenceOk === false ? ['source_intelligence_gate_failed'] : [])
17
+ ...(writeCapable && sourceIntelligenceRequired && input.sourceIntelligenceOk === false ? ['source_intelligence_gate_failed'] : [])
17
18
  ];
18
19
  return {
19
20
  schema: STRATEGY_GATE_SCHEMA,