@stackmemoryai/stackmemory 0.5.59 → 0.5.61
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.
- package/README.md +105 -1
- package/dist/src/cli/claude-sm.js +130 -50
- package/dist/src/cli/claude-sm.js.map +2 -2
- package/dist/src/cli/index.js +18 -3
- package/dist/src/cli/index.js.map +3 -3
- package/dist/src/core/extensions/custom-tools.js +567 -0
- package/dist/src/core/extensions/custom-tools.js.map +7 -0
- package/dist/src/core/extensions/index.js +55 -0
- package/dist/src/core/extensions/index.js.map +7 -0
- package/dist/src/core/extensions/loader.js +709 -0
- package/dist/src/core/extensions/loader.js.map +7 -0
- package/dist/src/core/extensions/plugin-system.js +506 -0
- package/dist/src/core/extensions/plugin-system.js.map +7 -0
- package/dist/src/core/extensions/provider-adapter.js +617 -0
- package/dist/src/core/extensions/provider-adapter.js.map +7 -0
- package/dist/src/core/extensions/sandbox-runtime.js +664 -0
- package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +32 -6
- package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
- package/dist/src/skills/repo-ingestion-skill.js +35 -12
- package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
- package/package.json +11 -7
- package/scripts/background-sync-manager.js +145 -83
- package/scripts/claude-sm-autostart.js +17 -12
- package/scripts/gepa/README.md +275 -0
- package/scripts/gepa/config.json +53 -0
- package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
- package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
- package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
- package/scripts/gepa/generations/gen-000/baseline.md +124 -0
- package/scripts/gepa/hooks/auto-optimize.js +494 -0
- package/scripts/gepa/hooks/eval-tracker.js +203 -0
- package/scripts/gepa/hooks/reflect.js +311 -0
- package/scripts/gepa/optimize.js +611 -0
- package/scripts/gepa/state.json +14 -0
- package/scripts/test-pre-publish-quick.sh +1 -1
- package/dist/agents/core/agent-task-manager.js +0 -527
- package/dist/agents/core/agent-task-manager.js.map +0 -7
- package/dist/agents/testing-agent.js +0 -614
- package/dist/agents/testing-agent.js.map +0 -7
- package/dist/agents/verifiers/base-verifier.js +0 -133
- package/dist/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/agents/verifiers/formatter-verifier.js +0 -130
- package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/agents/verifiers/llm-judge.js +0 -252
- package/dist/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/cli/auto-detect.js +0 -321
- package/dist/cli/auto-detect.js.map +0 -7
- package/dist/cli/browser-test.js +0 -33
- package/dist/cli/browser-test.js.map +0 -7
- package/dist/cli/claude-sm-danger.js +0 -21
- package/dist/cli/claude-sm-danger.js.map +0 -7
- package/dist/cli/claude-sm.js +0 -1156
- package/dist/cli/claude-sm.js.map +0 -7
- package/dist/cli/codex-sm-danger.js +0 -21
- package/dist/cli/codex-sm-danger.js.map +0 -7
- package/dist/cli/codex-sm.js +0 -349
- package/dist/cli/codex-sm.js.map +0 -7
- package/dist/cli/commands/api.js +0 -232
- package/dist/cli/commands/api.js.map +0 -7
- package/dist/cli/commands/auto-background.js +0 -180
- package/dist/cli/commands/auto-background.js.map +0 -7
- package/dist/cli/commands/cleanup-processes.js +0 -68
- package/dist/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/cli/commands/clear.js +0 -202
- package/dist/cli/commands/clear.js.map +0 -7
- package/dist/cli/commands/config.js +0 -445
- package/dist/cli/commands/config.js.map +0 -7
- package/dist/cli/commands/context-rehydrate.js +0 -751
- package/dist/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/cli/commands/context.js +0 -343
- package/dist/cli/commands/context.js.map +0 -7
- package/dist/cli/commands/daemon.js +0 -392
- package/dist/cli/commands/daemon.js.map +0 -7
- package/dist/cli/commands/dashboard.js +0 -210
- package/dist/cli/commands/dashboard.js.map +0 -7
- package/dist/cli/commands/db.js +0 -147
- package/dist/cli/commands/db.js.map +0 -7
- package/dist/cli/commands/decision.js +0 -266
- package/dist/cli/commands/decision.js.map +0 -7
- package/dist/cli/commands/discovery.js +0 -279
- package/dist/cli/commands/discovery.js.map +0 -7
- package/dist/cli/commands/handoff.js +0 -624
- package/dist/cli/commands/handoff.js.map +0 -7
- package/dist/cli/commands/hooks.js +0 -298
- package/dist/cli/commands/hooks.js.map +0 -7
- package/dist/cli/commands/linear-unified.js +0 -353
- package/dist/cli/commands/linear-unified.js.map +0 -7
- package/dist/cli/commands/linear.js +0 -529
- package/dist/cli/commands/linear.js.map +0 -7
- package/dist/cli/commands/log.js +0 -169
- package/dist/cli/commands/log.js.map +0 -7
- package/dist/cli/commands/login.js +0 -172
- package/dist/cli/commands/login.js.map +0 -7
- package/dist/cli/commands/migrate.js +0 -240
- package/dist/cli/commands/migrate.js.map +0 -7
- package/dist/cli/commands/model.js +0 -533
- package/dist/cli/commands/model.js.map +0 -7
- package/dist/cli/commands/monitor.js +0 -313
- package/dist/cli/commands/monitor.js.map +0 -7
- package/dist/cli/commands/onboard.js +0 -536
- package/dist/cli/commands/onboard.js.map +0 -7
- package/dist/cli/commands/projects.js +0 -199
- package/dist/cli/commands/projects.js.map +0 -7
- package/dist/cli/commands/quality.js +0 -413
- package/dist/cli/commands/quality.js.map +0 -7
- package/dist/cli/commands/ralph.js +0 -909
- package/dist/cli/commands/ralph.js.map +0 -7
- package/dist/cli/commands/retrieval.js +0 -248
- package/dist/cli/commands/retrieval.js.map +0 -7
- package/dist/cli/commands/search.js +0 -173
- package/dist/cli/commands/search.js.map +0 -7
- package/dist/cli/commands/service.js +0 -749
- package/dist/cli/commands/service.js.map +0 -7
- package/dist/cli/commands/session.js +0 -200
- package/dist/cli/commands/session.js.map +0 -7
- package/dist/cli/commands/settings.js +0 -306
- package/dist/cli/commands/settings.js.map +0 -7
- package/dist/cli/commands/setup.js +0 -701
- package/dist/cli/commands/setup.js.map +0 -7
- package/dist/cli/commands/shell.js +0 -249
- package/dist/cli/commands/shell.js.map +0 -7
- package/dist/cli/commands/signup.js +0 -50
- package/dist/cli/commands/signup.js.map +0 -7
- package/dist/cli/commands/skills.js +0 -470
- package/dist/cli/commands/skills.js.map +0 -7
- package/dist/cli/commands/sms-notify.js +0 -795
- package/dist/cli/commands/sms-notify.js.map +0 -7
- package/dist/cli/commands/storage-tier.js +0 -183
- package/dist/cli/commands/storage-tier.js.map +0 -7
- package/dist/cli/commands/storage.js +0 -360
- package/dist/cli/commands/storage.js.map +0 -7
- package/dist/cli/commands/sweep.js +0 -249
- package/dist/cli/commands/sweep.js.map +0 -7
- package/dist/cli/commands/tasks.js +0 -213
- package/dist/cli/commands/tasks.js.map +0 -7
- package/dist/cli/commands/test.js +0 -286
- package/dist/cli/commands/test.js.map +0 -7
- package/dist/cli/commands/workflow.js +0 -142
- package/dist/cli/commands/workflow.js.map +0 -7
- package/dist/cli/commands/worktree.js +0 -319
- package/dist/cli/commands/worktree.js.map +0 -7
- package/dist/cli/index.js +0 -594
- package/dist/cli/index.js.map +0 -7
- package/dist/cli/opencode-sm.js +0 -448
- package/dist/cli/opencode-sm.js.map +0 -7
- package/dist/cli/utils/viewer.js +0 -96
- package/dist/cli/utils/viewer.js.map +0 -7
- package/dist/core/analytics/team-analytics.js +0 -378
- package/dist/core/analytics/team-analytics.js.map +0 -7
- package/dist/core/config/config-manager.js +0 -398
- package/dist/core/config/config-manager.js.map +0 -7
- package/dist/core/config/feature-flags.js +0 -76
- package/dist/core/config/feature-flags.js.map +0 -7
- package/dist/core/config/storage-config.js +0 -115
- package/dist/core/config/storage-config.js.map +0 -7
- package/dist/core/config/types.js +0 -144
- package/dist/core/config/types.js.map +0 -7
- package/dist/core/context/auto-context.js +0 -80
- package/dist/core/context/auto-context.js.map +0 -7
- package/dist/core/context/dual-stack-manager.js +0 -870
- package/dist/core/context/dual-stack-manager.js.map +0 -7
- package/dist/core/context/enhanced-rehydration.js +0 -994
- package/dist/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/core/context/frame-database.js +0 -479
- package/dist/core/context/frame-database.js.map +0 -7
- package/dist/core/context/frame-digest.js +0 -250
- package/dist/core/context/frame-digest.js.map +0 -7
- package/dist/core/context/frame-handoff-manager.js +0 -778
- package/dist/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/core/context/frame-lifecycle-hooks.js +0 -119
- package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/core/context/frame-manager.js +0 -1069
- package/dist/core/context/frame-manager.js.map +0 -7
- package/dist/core/context/frame-recovery.js +0 -302
- package/dist/core/context/frame-recovery.js.map +0 -7
- package/dist/core/context/frame-stack.js +0 -314
- package/dist/core/context/frame-stack.js.map +0 -7
- package/dist/core/context/frame-types.js +0 -5
- package/dist/core/context/frame-types.js.map +0 -7
- package/dist/core/context/incremental-gc.js +0 -290
- package/dist/core/context/incremental-gc.js.map +0 -7
- package/dist/core/context/index.js +0 -25
- package/dist/core/context/index.js.map +0 -7
- package/dist/core/context/model-aware-compaction.js +0 -623
- package/dist/core/context/model-aware-compaction.js.map +0 -7
- package/dist/core/context/permission-manager.js +0 -185
- package/dist/core/context/permission-manager.js.map +0 -7
- package/dist/core/context/recursive-context-manager.js +0 -592
- package/dist/core/context/recursive-context-manager.js.map +0 -7
- package/dist/core/context/refactored-frame-manager.js +0 -754
- package/dist/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/core/context/shared-context-layer.js +0 -621
- package/dist/core/context/shared-context-layer.js.map +0 -7
- package/dist/core/context/stack-merge-resolver.js +0 -749
- package/dist/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/core/context/validation.js +0 -130
- package/dist/core/context/validation.js.map +0 -7
- package/dist/core/database/batch-operations.js +0 -384
- package/dist/core/database/batch-operations.js.map +0 -7
- package/dist/core/database/connection-pool.js +0 -330
- package/dist/core/database/connection-pool.js.map +0 -7
- package/dist/core/database/database-adapter.js +0 -60
- package/dist/core/database/database-adapter.js.map +0 -7
- package/dist/core/database/migration-manager.js +0 -614
- package/dist/core/database/migration-manager.js.map +0 -7
- package/dist/core/database/paradedb-adapter.js +0 -990
- package/dist/core/database/paradedb-adapter.js.map +0 -7
- package/dist/core/database/query-cache.js +0 -298
- package/dist/core/database/query-cache.js.map +0 -7
- package/dist/core/database/query-router.js +0 -430
- package/dist/core/database/query-router.js.map +0 -7
- package/dist/core/database/sqlite-adapter.js +0 -738
- package/dist/core/database/sqlite-adapter.js.map +0 -7
- package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
- package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/core/digest/frame-digest-integration.js +0 -176
- package/dist/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/core/digest/hybrid-digest-generator.js +0 -553
- package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/core/digest/index.js +0 -9
- package/dist/core/digest/index.js.map +0 -7
- package/dist/core/digest/types.js +0 -25
- package/dist/core/digest/types.js.map +0 -7
- package/dist/core/errors/error-utils.js +0 -208
- package/dist/core/errors/error-utils.js.map +0 -7
- package/dist/core/errors/index.js +0 -521
- package/dist/core/errors/index.js.map +0 -7
- package/dist/core/errors/recovery.js +0 -269
- package/dist/core/errors/recovery.js.map +0 -7
- package/dist/core/execution/parallel-executor.js +0 -258
- package/dist/core/execution/parallel-executor.js.map +0 -7
- package/dist/core/frame/workflow-templates.js +0 -319
- package/dist/core/frame/workflow-templates.js.map +0 -7
- package/dist/core/merge/conflict-detector.js +0 -431
- package/dist/core/merge/conflict-detector.js.map +0 -7
- package/dist/core/merge/index.js +0 -9
- package/dist/core/merge/index.js.map +0 -7
- package/dist/core/merge/resolution-engine.js +0 -558
- package/dist/core/merge/resolution-engine.js.map +0 -7
- package/dist/core/merge/stack-diff.js +0 -532
- package/dist/core/merge/stack-diff.js.map +0 -7
- package/dist/core/merge/unified-merge-resolver.js +0 -303
- package/dist/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/core/models/fallback-monitor.js +0 -232
- package/dist/core/models/fallback-monitor.js.map +0 -7
- package/dist/core/models/model-router.js +0 -340
- package/dist/core/models/model-router.js.map +0 -7
- package/dist/core/monitoring/error-handler.js +0 -49
- package/dist/core/monitoring/error-handler.js.map +0 -7
- package/dist/core/monitoring/logger.js +0 -202
- package/dist/core/monitoring/logger.js.map +0 -7
- package/dist/core/monitoring/metrics.js +0 -172
- package/dist/core/monitoring/metrics.js.map +0 -7
- package/dist/core/monitoring/progress-tracker.js +0 -189
- package/dist/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/core/monitoring/session-monitor.js +0 -300
- package/dist/core/monitoring/session-monitor.js.map +0 -7
- package/dist/core/performance/context-cache.js +0 -273
- package/dist/core/performance/context-cache.js.map +0 -7
- package/dist/core/performance/index.js +0 -11
- package/dist/core/performance/index.js.map +0 -7
- package/dist/core/performance/lazy-context-loader.js +0 -327
- package/dist/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/core/performance/monitor.js +0 -221
- package/dist/core/performance/monitor.js.map +0 -7
- package/dist/core/performance/optimized-frame-context.js +0 -345
- package/dist/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/core/performance/performance-benchmark.js +0 -277
- package/dist/core/performance/performance-benchmark.js.map +0 -7
- package/dist/core/performance/performance-profiler.js +0 -370
- package/dist/core/performance/performance-profiler.js.map +0 -7
- package/dist/core/performance/streaming-jsonl-parser.js +0 -195
- package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/core/persistence/postgres-adapter.js +0 -349
- package/dist/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/core/projects/project-isolation.js +0 -201
- package/dist/core/projects/project-isolation.js.map +0 -7
- package/dist/core/projects/project-manager.js +0 -697
- package/dist/core/projects/project-manager.js.map +0 -7
- package/dist/core/query/query-parser.js +0 -370
- package/dist/core/query/query-parser.js.map +0 -7
- package/dist/core/query/query-templates.js +0 -321
- package/dist/core/query/query-templates.js.map +0 -7
- package/dist/core/retrieval/context-retriever.js +0 -479
- package/dist/core/retrieval/context-retriever.js.map +0 -7
- package/dist/core/retrieval/graph-retrieval.js +0 -662
- package/dist/core/retrieval/graph-retrieval.js.map +0 -7
- package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
- package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
- package/dist/core/retrieval/index.js +0 -8
- package/dist/core/retrieval/index.js.map +0 -7
- package/dist/core/retrieval/llm-context-retrieval.js +0 -613
- package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/core/retrieval/llm-provider.js +0 -151
- package/dist/core/retrieval/llm-provider.js.map +0 -7
- package/dist/core/retrieval/retrieval-audit.js +0 -236
- package/dist/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
- package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
- package/dist/core/retrieval/summary-generator.js +0 -589
- package/dist/core/retrieval/summary-generator.js.map +0 -7
- package/dist/core/retrieval/types.js +0 -21
- package/dist/core/retrieval/types.js.map +0 -7
- package/dist/core/security/index.js +0 -35
- package/dist/core/security/index.js.map +0 -7
- package/dist/core/security/input-sanitizer.js +0 -321
- package/dist/core/security/input-sanitizer.js.map +0 -7
- package/dist/core/session/clear-survival.js +0 -465
- package/dist/core/session/clear-survival.js.map +0 -7
- package/dist/core/session/enhanced-handoff.js +0 -792
- package/dist/core/session/enhanced-handoff.js.map +0 -7
- package/dist/core/session/handoff-generator.js +0 -343
- package/dist/core/session/handoff-generator.js.map +0 -7
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -7
- package/dist/core/session/session-manager.js +0 -347
- package/dist/core/session/session-manager.js.map +0 -7
- package/dist/core/skills/index.js +0 -7
- package/dist/core/skills/index.js.map +0 -7
- package/dist/core/skills/skill-storage.js +0 -764
- package/dist/core/skills/skill-storage.js.map +0 -7
- package/dist/core/skills/types.js +0 -193
- package/dist/core/skills/types.js.map +0 -7
- package/dist/core/storage/chromadb-adapter.js +0 -354
- package/dist/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/core/storage/infinite-storage.js +0 -510
- package/dist/core/storage/infinite-storage.js.map +0 -7
- package/dist/core/storage/railway-optimized-storage.js +0 -591
- package/dist/core/storage/railway-optimized-storage.js.map +0 -7
- package/dist/core/storage/remote-storage.js +0 -489
- package/dist/core/storage/remote-storage.js.map +0 -7
- package/dist/core/storage/two-tier-storage.js +0 -766
- package/dist/core/storage/two-tier-storage.js.map +0 -7
- package/dist/core/trace/cli-trace-wrapper.js +0 -132
- package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/core/trace/db-trace-wrapper.js +0 -247
- package/dist/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/core/trace/debug-trace.js +0 -417
- package/dist/core/trace/debug-trace.js.map +0 -7
- package/dist/core/trace/index.js +0 -109
- package/dist/core/trace/index.js.map +0 -7
- package/dist/core/trace/linear-api-wrapper.js +0 -178
- package/dist/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/core/trace/trace-demo.js +0 -154
- package/dist/core/trace/trace-demo.js.map +0 -7
- package/dist/core/trace/trace-detector.demo.js +0 -142
- package/dist/core/trace/trace-detector.demo.js.map +0 -7
- package/dist/core/trace/trace-detector.js +0 -528
- package/dist/core/trace/trace-detector.js.map +0 -7
- package/dist/core/trace/trace-store.js +0 -345
- package/dist/core/trace/trace-store.js.map +0 -7
- package/dist/core/trace/types.js +0 -77
- package/dist/core/trace/types.js.map +0 -7
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -7
- package/dist/core/utils/async-mutex.js +0 -114
- package/dist/core/utils/async-mutex.js.map +0 -7
- package/dist/core/utils/compression.js +0 -83
- package/dist/core/utils/compression.js.map +0 -7
- package/dist/core/utils/update-checker.js +0 -218
- package/dist/core/utils/update-checker.js.map +0 -7
- package/dist/core/worktree/worktree-manager.js +0 -465
- package/dist/core/worktree/worktree-manager.js.map +0 -7
- package/dist/daemon/daemon-config.js +0 -149
- package/dist/daemon/daemon-config.js.map +0 -7
- package/dist/daemon/services/context-service.js +0 -122
- package/dist/daemon/services/context-service.js.map +0 -7
- package/dist/daemon/services/linear-service.js +0 -136
- package/dist/daemon/services/linear-service.js.map +0 -7
- package/dist/daemon/session-daemon.js +0 -312
- package/dist/daemon/session-daemon.js.map +0 -7
- package/dist/daemon/unified-daemon.js +0 -276
- package/dist/daemon/unified-daemon.js.map +0 -7
- package/dist/features/analytics/api/analytics-api.js +0 -287
- package/dist/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/features/analytics/core/analytics-service.js +0 -282
- package/dist/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/features/analytics/index.js +0 -18
- package/dist/features/analytics/index.js.map +0 -7
- package/dist/features/analytics/queries/metrics-queries.js +0 -277
- package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/features/analytics/types/metrics.js +0 -5
- package/dist/features/analytics/types/metrics.js.map +0 -7
- package/dist/features/browser/browser-mcp.js +0 -492
- package/dist/features/browser/browser-mcp.js.map +0 -7
- package/dist/features/sweep/index.js +0 -20
- package/dist/features/sweep/index.js.map +0 -7
- package/dist/features/sweep/prediction-client.js +0 -155
- package/dist/features/sweep/prediction-client.js.map +0 -7
- package/dist/features/sweep/prompt-builder.js +0 -85
- package/dist/features/sweep/prompt-builder.js.map +0 -7
- package/dist/features/sweep/pty-wrapper.js +0 -171
- package/dist/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/features/sweep/state-watcher.js +0 -87
- package/dist/features/sweep/state-watcher.js.map +0 -7
- package/dist/features/sweep/status-bar.js +0 -88
- package/dist/features/sweep/status-bar.js.map +0 -7
- package/dist/features/sweep/sweep-server-manager.js +0 -226
- package/dist/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/features/sweep/tab-interceptor.js +0 -38
- package/dist/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/features/sweep/types.js +0 -18
- package/dist/features/sweep/types.js.map +0 -7
- package/dist/features/tasks/linear-task-manager.js +0 -487
- package/dist/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/features/tasks/task-aware-context.js +0 -410
- package/dist/features/tasks/task-aware-context.js.map +0 -7
- package/dist/features/tui/simple-monitor.js +0 -116
- package/dist/features/tui/simple-monitor.js.map +0 -7
- package/dist/features/tui/swarm-monitor.js +0 -648
- package/dist/features/tui/swarm-monitor.js.map +0 -7
- package/dist/features/web/client/stores/task-store.js +0 -26
- package/dist/features/web/client/stores/task-store.js.map +0 -7
- package/dist/features/web/server/index.js +0 -194
- package/dist/features/web/server/index.js.map +0 -7
- package/dist/hooks/auto-background.js +0 -151
- package/dist/hooks/auto-background.js.map +0 -7
- package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/hooks/config.js +0 -150
- package/dist/hooks/config.js.map +0 -7
- package/dist/hooks/daemon.js +0 -364
- package/dist/hooks/daemon.js.map +0 -7
- package/dist/hooks/events.js +0 -58
- package/dist/hooks/events.js.map +0 -7
- package/dist/hooks/index.js +0 -12
- package/dist/hooks/index.js.map +0 -7
- package/dist/hooks/linear-task-picker.js +0 -186
- package/dist/hooks/linear-task-picker.js.map +0 -7
- package/dist/hooks/schemas.js +0 -197
- package/dist/hooks/schemas.js.map +0 -7
- package/dist/hooks/secure-fs.js +0 -49
- package/dist/hooks/secure-fs.js.map +0 -7
- package/dist/hooks/security-logger.js +0 -155
- package/dist/hooks/security-logger.js.map +0 -7
- package/dist/hooks/session-summary.js +0 -222
- package/dist/hooks/session-summary.js.map +0 -7
- package/dist/hooks/sms-action-runner.js +0 -371
- package/dist/hooks/sms-action-runner.js.map +0 -7
- package/dist/hooks/sms-notify.js +0 -506
- package/dist/hooks/sms-notify.js.map +0 -7
- package/dist/hooks/sms-watcher.js +0 -93
- package/dist/hooks/sms-watcher.js.map +0 -7
- package/dist/hooks/sms-webhook.js +0 -555
- package/dist/hooks/sms-webhook.js.map +0 -7
- package/dist/hooks/whatsapp-commands.js +0 -479
- package/dist/hooks/whatsapp-commands.js.map +0 -7
- package/dist/hooks/whatsapp-scheduler.js +0 -317
- package/dist/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/hooks/whatsapp-sync.js +0 -409
- package/dist/hooks/whatsapp-sync.js.map +0 -7
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -7
- package/dist/integrations/anthropic/client.js +0 -263
- package/dist/integrations/anthropic/client.js.map +0 -7
- package/dist/integrations/claude-code/agent-bridge.js +0 -768
- package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/integrations/claude-code/post-task-hooks.js +0 -545
- package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
- package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client.js +0 -511
- package/dist/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/integrations/claude-code/task-coordinator.js +0 -360
- package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/integrations/linear/auth.js +0 -337
- package/dist/integrations/linear/auth.js.map +0 -7
- package/dist/integrations/linear/auto-sync.js +0 -258
- package/dist/integrations/linear/auto-sync.js.map +0 -7
- package/dist/integrations/linear/client.js +0 -634
- package/dist/integrations/linear/client.js.map +0 -7
- package/dist/integrations/linear/config.js +0 -130
- package/dist/integrations/linear/config.js.map +0 -7
- package/dist/integrations/linear/migration.js +0 -361
- package/dist/integrations/linear/migration.js.map +0 -7
- package/dist/integrations/linear/oauth-server.js +0 -454
- package/dist/integrations/linear/oauth-server.js.map +0 -7
- package/dist/integrations/linear/rest-client.js +0 -213
- package/dist/integrations/linear/rest-client.js.map +0 -7
- package/dist/integrations/linear/sync-manager.js +0 -236
- package/dist/integrations/linear/sync-manager.js.map +0 -7
- package/dist/integrations/linear/sync-service.js +0 -231
- package/dist/integrations/linear/sync-service.js.map +0 -7
- package/dist/integrations/linear/sync.js +0 -782
- package/dist/integrations/linear/sync.js.map +0 -7
- package/dist/integrations/linear/types.js +0 -5
- package/dist/integrations/linear/types.js.map +0 -7
- package/dist/integrations/linear/unified-sync.js +0 -589
- package/dist/integrations/linear/unified-sync.js.map +0 -7
- package/dist/integrations/linear/webhook-handler.js +0 -219
- package/dist/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/integrations/linear/webhook-server.js +0 -218
- package/dist/integrations/linear/webhook-server.js.map +0 -7
- package/dist/integrations/linear/webhook.js +0 -291
- package/dist/integrations/linear/webhook.js.map +0 -7
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
- package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
- package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/index.js +0 -166
- package/dist/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
- package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/integrations/mcp/index.js +0 -23
- package/dist/integrations/mcp/index.js.map +0 -7
- package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/integrations/mcp/refactored-server.js +0 -374
- package/dist/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/integrations/mcp/remote-server.js +0 -682
- package/dist/integrations/mcp/remote-server.js.map +0 -7
- package/dist/integrations/mcp/schemas.js +0 -147
- package/dist/integrations/mcp/schemas.js.map +0 -7
- package/dist/integrations/mcp/server.js +0 -1975
- package/dist/integrations/mcp/server.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions-code.js +0 -125
- package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions.js +0 -702
- package/dist/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/integrations/mcp/trace-test.js +0 -48
- package/dist/integrations/mcp/trace-test.js.map +0 -7
- package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
- package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
- package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
- package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -860
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
- package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/integrations/ralph/index.js +0 -18
- package/dist/integrations/ralph/index.js.map +0 -7
- package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
- package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
- package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
- package/dist/integrations/ralph/recovery/crash-recovery.js +0 -462
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/integrations/ralph/state/state-reconciler.js +0 -404
- package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/integrations/ralph/types.js +0 -5
- package/dist/integrations/ralph/types.js.map +0 -7
- package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/mcp/stackmemory-mcp-server.js +0 -554
- package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/middleware/exponential-rate-limiter.js +0 -289
- package/dist/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/models/user.model.js +0 -358
- package/dist/models/user.model.js.map +0 -7
- package/dist/servers/production/auth-middleware.js +0 -528
- package/dist/servers/production/auth-middleware.js.map +0 -7
- package/dist/servers/railway/config.js +0 -55
- package/dist/servers/railway/config.js.map +0 -7
- package/dist/servers/railway/index-enhanced.js +0 -160
- package/dist/servers/railway/index-enhanced.js.map +0 -7
- package/dist/servers/railway/index.js +0 -1349
- package/dist/servers/railway/index.js.map +0 -7
- package/dist/servers/railway/simple.js +0 -64
- package/dist/servers/railway/simple.js.map +0 -7
- package/dist/servers/railway/storage-test.js +0 -459
- package/dist/servers/railway/storage-test.js.map +0 -7
- package/dist/services/config-service.js +0 -65
- package/dist/services/config-service.js.map +0 -7
- package/dist/services/context-service.js +0 -194
- package/dist/services/context-service.js.map +0 -7
- package/dist/skills/api-discovery.js +0 -354
- package/dist/skills/api-discovery.js.map +0 -7
- package/dist/skills/api-skill.js +0 -475
- package/dist/skills/api-skill.js.map +0 -7
- package/dist/skills/claude-skills.js +0 -1061
- package/dist/skills/claude-skills.js.map +0 -7
- package/dist/skills/dashboard-launcher.js +0 -216
- package/dist/skills/dashboard-launcher.js.map +0 -7
- package/dist/skills/recursive-agent-orchestrator.js +0 -575
- package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/skills/repo-ingestion-skill.js +0 -609
- package/dist/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/skills/security-secrets-scanner.js +0 -284
- package/dist/skills/security-secrets-scanner.js.map +0 -7
- package/dist/skills/unified-rlm-orchestrator.js +0 -404
- package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -7
- package/dist/utils/env.js +0 -50
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/formatting.js +0 -62
- package/dist/utils/formatting.js.map +0 -7
- package/dist/utils/process-cleanup.js +0 -136
- package/dist/utils/process-cleanup.js.map +0 -7
- package/dist/validation/schemas.js +0 -222
- package/dist/validation/schemas.js.map +0 -7
- /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { logger } from "../core/monitoring/logger.js";
|
|
6
|
-
import Database from "better-sqlite3";
|
|
7
|
-
import { join } from "path";
|
|
8
|
-
import { existsSync } from "fs";
|
|
9
|
-
class ContextService {
|
|
10
|
-
// Using singleton logger from monitoring
|
|
11
|
-
db = null;
|
|
12
|
-
tasks = /* @__PURE__ */ new Map();
|
|
13
|
-
constructor() {
|
|
14
|
-
this.initializeDatabase();
|
|
15
|
-
}
|
|
16
|
-
initializeDatabase() {
|
|
17
|
-
try {
|
|
18
|
-
const dbPath = join(process.cwd(), ".stackmemory", "context.db");
|
|
19
|
-
if (existsSync(dbPath)) {
|
|
20
|
-
this.db = new Database(dbPath);
|
|
21
|
-
this.loadTasksFromDatabase();
|
|
22
|
-
}
|
|
23
|
-
} catch (error) {
|
|
24
|
-
logger.warn(
|
|
25
|
-
"Could not connect to database, using in-memory storage",
|
|
26
|
-
error
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
loadTasksFromDatabase() {
|
|
31
|
-
if (!this.db) return;
|
|
32
|
-
try {
|
|
33
|
-
this.db.exec(`
|
|
34
|
-
CREATE TABLE IF NOT EXISTS tasks (
|
|
35
|
-
id TEXT PRIMARY KEY,
|
|
36
|
-
title TEXT NOT NULL,
|
|
37
|
-
description TEXT,
|
|
38
|
-
status TEXT DEFAULT 'todo',
|
|
39
|
-
priority TEXT,
|
|
40
|
-
tags TEXT,
|
|
41
|
-
external_id TEXT,
|
|
42
|
-
external_identifier TEXT,
|
|
43
|
-
external_url TEXT,
|
|
44
|
-
metadata TEXT,
|
|
45
|
-
created_at INTEGER,
|
|
46
|
-
updated_at INTEGER
|
|
47
|
-
)
|
|
48
|
-
`);
|
|
49
|
-
const stmt = this.db.prepare("SELECT * FROM tasks");
|
|
50
|
-
const rows = stmt.all();
|
|
51
|
-
for (const row of rows) {
|
|
52
|
-
const task = {
|
|
53
|
-
id: row.id,
|
|
54
|
-
title: row.title,
|
|
55
|
-
description: row.description || "",
|
|
56
|
-
status: row.status || "todo",
|
|
57
|
-
priority: row.priority || void 0,
|
|
58
|
-
tags: row.tags ? JSON.parse(row.tags) : [],
|
|
59
|
-
externalId: row.external_id || void 0,
|
|
60
|
-
externalIdentifier: row.external_identifier || void 0,
|
|
61
|
-
externalUrl: row.external_url || void 0,
|
|
62
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : void 0,
|
|
63
|
-
createdAt: new Date(row.created_at),
|
|
64
|
-
updatedAt: new Date(row.updated_at)
|
|
65
|
-
};
|
|
66
|
-
this.tasks.set(task.id, task);
|
|
67
|
-
}
|
|
68
|
-
logger.info(`Loaded ${rows.length} tasks from database`);
|
|
69
|
-
} catch (error) {
|
|
70
|
-
logger.error("Failed to load tasks from database", error);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
async getTask(id) {
|
|
74
|
-
return this.tasks.get(id) || null;
|
|
75
|
-
}
|
|
76
|
-
async getTaskByExternalId(externalId) {
|
|
77
|
-
for (const task of this.tasks.values()) {
|
|
78
|
-
if (task.externalId === externalId) {
|
|
79
|
-
return task;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
async getAllTasks() {
|
|
85
|
-
return Array.from(this.tasks.values());
|
|
86
|
-
}
|
|
87
|
-
async createTask(taskData) {
|
|
88
|
-
const task = {
|
|
89
|
-
id: this.generateId(),
|
|
90
|
-
title: taskData.title || "Untitled Task",
|
|
91
|
-
description: taskData.description || "",
|
|
92
|
-
status: taskData.status || "todo",
|
|
93
|
-
priority: taskData.priority,
|
|
94
|
-
tags: taskData.tags || [],
|
|
95
|
-
externalId: taskData.externalId,
|
|
96
|
-
externalIdentifier: taskData.externalIdentifier,
|
|
97
|
-
externalUrl: taskData.externalUrl,
|
|
98
|
-
metadata: taskData.metadata,
|
|
99
|
-
createdAt: taskData.createdAt || /* @__PURE__ */ new Date(),
|
|
100
|
-
updatedAt: taskData.updatedAt || /* @__PURE__ */ new Date()
|
|
101
|
-
};
|
|
102
|
-
this.tasks.set(task.id, task);
|
|
103
|
-
if (this.db) {
|
|
104
|
-
try {
|
|
105
|
-
const stmt = this.db.prepare(`
|
|
106
|
-
INSERT INTO tasks (id, title, description, status, priority, tags,
|
|
107
|
-
external_id, external_identifier, external_url,
|
|
108
|
-
metadata, created_at, updated_at)
|
|
109
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
110
|
-
`);
|
|
111
|
-
stmt.run(
|
|
112
|
-
task.id,
|
|
113
|
-
task.title,
|
|
114
|
-
task.description,
|
|
115
|
-
task.status,
|
|
116
|
-
task.priority || null,
|
|
117
|
-
JSON.stringify(task.tags),
|
|
118
|
-
task.externalId || null,
|
|
119
|
-
task.externalIdentifier || null,
|
|
120
|
-
task.externalUrl || null,
|
|
121
|
-
task.metadata ? JSON.stringify(task.metadata) : null,
|
|
122
|
-
task.createdAt.getTime(),
|
|
123
|
-
task.updatedAt.getTime()
|
|
124
|
-
);
|
|
125
|
-
} catch (error) {
|
|
126
|
-
logger.error("Failed to persist task to database", error);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
logger.debug(`Created task: ${task.id} - ${task.title}`);
|
|
130
|
-
return task;
|
|
131
|
-
}
|
|
132
|
-
async updateTask(id, updates) {
|
|
133
|
-
const task = this.tasks.get(id);
|
|
134
|
-
if (!task) {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
const updatedTask = {
|
|
138
|
-
...task,
|
|
139
|
-
...updates,
|
|
140
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
141
|
-
};
|
|
142
|
-
this.tasks.set(id, updatedTask);
|
|
143
|
-
if (this.db) {
|
|
144
|
-
try {
|
|
145
|
-
const stmt = this.db.prepare(`
|
|
146
|
-
UPDATE tasks SET title = ?, description = ?, status = ?,
|
|
147
|
-
priority = ?, tags = ?, external_id = ?,
|
|
148
|
-
external_identifier = ?, external_url = ?,
|
|
149
|
-
metadata = ?, updated_at = ?
|
|
150
|
-
WHERE id = ?
|
|
151
|
-
`);
|
|
152
|
-
stmt.run(
|
|
153
|
-
updatedTask.title,
|
|
154
|
-
updatedTask.description,
|
|
155
|
-
updatedTask.status,
|
|
156
|
-
updatedTask.priority || null,
|
|
157
|
-
JSON.stringify(updatedTask.tags),
|
|
158
|
-
updatedTask.externalId || null,
|
|
159
|
-
updatedTask.externalIdentifier || null,
|
|
160
|
-
updatedTask.externalUrl || null,
|
|
161
|
-
updatedTask.metadata ? JSON.stringify(updatedTask.metadata) : null,
|
|
162
|
-
updatedTask.updatedAt.getTime(),
|
|
163
|
-
id
|
|
164
|
-
);
|
|
165
|
-
} catch (error) {
|
|
166
|
-
logger.error("Failed to update task in database", error);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
logger.debug(`Updated task: ${id} - ${updatedTask.title}`);
|
|
170
|
-
return updatedTask;
|
|
171
|
-
}
|
|
172
|
-
async deleteTask(id) {
|
|
173
|
-
const deleted = this.tasks.delete(id);
|
|
174
|
-
if (deleted) {
|
|
175
|
-
if (this.db) {
|
|
176
|
-
try {
|
|
177
|
-
const stmt = this.db.prepare("DELETE FROM tasks WHERE id = ?");
|
|
178
|
-
stmt.run(id);
|
|
179
|
-
} catch (error) {
|
|
180
|
-
logger.error("Failed to delete task from database", error);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
logger.debug(`Deleted task: ${id}`);
|
|
184
|
-
}
|
|
185
|
-
return deleted;
|
|
186
|
-
}
|
|
187
|
-
generateId() {
|
|
188
|
-
return "task_" + Date.now() + "_" + Math.random().toString(36).substr(2, 9);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
export {
|
|
192
|
-
ContextService
|
|
193
|
-
};
|
|
194
|
-
//# sourceMappingURL=context-service.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/context-service.ts"],
|
|
4
|
-
"sourcesContent": ["import { Task } from '../types/task.js';\n// TaskStatus and TaskPriority will be used in future implementations\n// import { TaskStatus, TaskPriority } from '../types/task.js';\nimport { logger } from '../core/monitoring/logger.js';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\n\ninterface TaskRow {\n id: string;\n title: string;\n description?: string;\n status?: string;\n priority?: string;\n tags?: string;\n external_id?: string;\n external_identifier?: string;\n external_url?: string;\n metadata?: string;\n created_at: number;\n updated_at: number;\n}\n\nexport class ContextService {\n // Using singleton logger from monitoring\n private db: Database.Database | null = null;\n private tasks: Map<string, Task> = new Map();\n\n constructor() {\n // Use singleton logger\n this.initializeDatabase();\n }\n\n private initializeDatabase(): void {\n try {\n const dbPath = join(process.cwd(), '.stackmemory', 'context.db');\n if (existsSync(dbPath)) {\n this.db = new Database(dbPath);\n this.loadTasksFromDatabase();\n }\n } catch (error: unknown) {\n logger.warn(\n 'Could not connect to database, using in-memory storage',\n error\n );\n }\n }\n\n private loadTasksFromDatabase(): void {\n if (!this.db) return;\n\n try {\n // Create tasks table if it doesn't exist\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT DEFAULT 'todo',\n priority TEXT,\n tags TEXT,\n external_id TEXT,\n external_identifier TEXT,\n external_url TEXT,\n metadata TEXT,\n created_at INTEGER,\n updated_at INTEGER\n )\n `);\n\n // Load all tasks from database\n const stmt = this.db.prepare('SELECT * FROM tasks');\n const rows = stmt.all() as TaskRow[];\n\n for (const row of rows) {\n const task: Task = {\n id: row.id,\n title: row.title,\n description: row.description || '',\n status: row.status || 'todo',\n priority: row.priority || undefined,\n tags: row.tags ? JSON.parse(row.tags) : [],\n externalId: row.external_id || undefined,\n externalIdentifier: row.external_identifier || undefined,\n externalUrl: row.external_url || undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n };\n this.tasks.set(task.id, task);\n }\n\n logger.info(`Loaded ${rows.length} tasks from database`);\n } catch (error: unknown) {\n logger.error('Failed to load tasks from database', error);\n }\n }\n\n public async getTask(id: string): Promise<Task | null> {\n return this.tasks.get(id) || null;\n }\n\n public async getTaskByExternalId(externalId: string): Promise<Task | null> {\n for (const task of this.tasks.values()) {\n if (task.externalId === externalId) {\n return task;\n }\n }\n return null;\n }\n\n public async getAllTasks(): Promise<Task[]> {\n return Array.from(this.tasks.values());\n }\n\n public async createTask(taskData: Partial<Task>): Promise<Task> {\n const task: Task = {\n id: this.generateId(),\n title: taskData.title || 'Untitled Task',\n description: taskData.description || '',\n status: taskData.status || 'todo',\n priority: taskData.priority,\n tags: taskData.tags || [],\n externalId: taskData.externalId,\n externalIdentifier: taskData.externalIdentifier,\n externalUrl: taskData.externalUrl,\n metadata: taskData.metadata,\n createdAt: taskData.createdAt || new Date(),\n updatedAt: taskData.updatedAt || new Date(),\n };\n\n this.tasks.set(task.id, task);\n\n // Persist to database if available\n if (this.db) {\n try {\n const stmt = this.db.prepare(`\n INSERT INTO tasks (id, title, description, status, priority, tags, \n external_id, external_identifier, external_url, \n metadata, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n stmt.run(\n task.id,\n task.title,\n task.description,\n task.status,\n task.priority || null,\n JSON.stringify(task.tags),\n task.externalId || null,\n task.externalIdentifier || null,\n task.externalUrl || null,\n task.metadata ? JSON.stringify(task.metadata) : null,\n task.createdAt.getTime(),\n task.updatedAt.getTime()\n );\n } catch (error: unknown) {\n logger.error('Failed to persist task to database', error);\n }\n }\n\n logger.debug(`Created task: ${task.id} - ${task.title}`);\n return task;\n }\n\n public async updateTask(\n id: string,\n updates: Partial<Task>\n ): Promise<Task | null> {\n const task = this.tasks.get(id);\n if (!task) {\n return null;\n }\n\n const updatedTask = {\n ...task,\n ...updates,\n updatedAt: new Date(),\n };\n\n this.tasks.set(id, updatedTask);\n\n // Update in database if available\n if (this.db) {\n try {\n const stmt = this.db.prepare(`\n UPDATE tasks SET title = ?, description = ?, status = ?, \n priority = ?, tags = ?, external_id = ?, \n external_identifier = ?, external_url = ?, \n metadata = ?, updated_at = ?\n WHERE id = ?\n `);\n stmt.run(\n updatedTask.title,\n updatedTask.description,\n updatedTask.status,\n updatedTask.priority || null,\n JSON.stringify(updatedTask.tags),\n updatedTask.externalId || null,\n updatedTask.externalIdentifier || null,\n updatedTask.externalUrl || null,\n updatedTask.metadata ? JSON.stringify(updatedTask.metadata) : null,\n updatedTask.updatedAt.getTime(),\n id\n );\n } catch (error: unknown) {\n logger.error('Failed to update task in database', error);\n }\n }\n\n logger.debug(`Updated task: ${id} - ${updatedTask.title}`);\n return updatedTask;\n }\n\n public async deleteTask(id: string): Promise<boolean> {\n const deleted = this.tasks.delete(id);\n\n if (deleted) {\n // Delete from database if available\n if (this.db) {\n try {\n const stmt = this.db.prepare('DELETE FROM tasks WHERE id = ?');\n stmt.run(id);\n } catch (error: unknown) {\n logger.error('Failed to delete task from database', error);\n }\n }\n logger.debug(`Deleted task: ${id}`);\n }\n return deleted;\n }\n\n private generateId(): string {\n return 'task_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { execSync } from "child_process";
|
|
6
|
-
import * as fs from "fs";
|
|
7
|
-
import * as path from "path";
|
|
8
|
-
import * as os from "os";
|
|
9
|
-
import { logger } from "../core/monitoring/logger.js";
|
|
10
|
-
import { getAPISkill } from "./api-skill.js";
|
|
11
|
-
const API_PATTERNS = [
|
|
12
|
-
// Direct API URLs
|
|
13
|
-
{
|
|
14
|
-
pattern: /https?:\/\/api\.([a-z0-9-]+)\.(com|io|dev|app|co)/,
|
|
15
|
-
nameGroup: 1
|
|
16
|
-
},
|
|
17
|
-
// REST API paths in docs
|
|
18
|
-
{ pattern: /https?:\/\/([a-z0-9-]+)\.com\/api/, nameGroup: 1 },
|
|
19
|
-
// Developer docs
|
|
20
|
-
{ pattern: /https?:\/\/developer\.([a-z0-9-]+)\.com/, nameGroup: 1 },
|
|
21
|
-
// Docs subdomains
|
|
22
|
-
{ pattern: /https?:\/\/docs\.([a-z0-9-]+)\.(com|io|dev)/, nameGroup: 1 }
|
|
23
|
-
];
|
|
24
|
-
const KNOWN_SPECS = {
|
|
25
|
-
github: "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",
|
|
26
|
-
stripe: "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
|
|
27
|
-
twilio: "https://raw.githubusercontent.com/twilio/twilio-oai/main/spec/json/twilio_api_v2010.json",
|
|
28
|
-
slack: "https://api.slack.com/specs/openapi/v2/slack_web.json",
|
|
29
|
-
discord: "https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json",
|
|
30
|
-
openai: "https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml",
|
|
31
|
-
anthropic: "https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/openapi.json",
|
|
32
|
-
linear: "https://api.linear.app/graphql",
|
|
33
|
-
// GraphQL, not REST
|
|
34
|
-
notion: "https://raw.githubusercontent.com/NotionX/notion-sdk-js/main/openapi.json",
|
|
35
|
-
vercel: "https://openapi.vercel.sh/",
|
|
36
|
-
cloudflare: "https://raw.githubusercontent.com/cloudflare/api-schemas/main/openapi.json",
|
|
37
|
-
// Google Cloud Platform - uses Google Discovery format
|
|
38
|
-
gcp: "https://www.googleapis.com/discovery/v1/apis",
|
|
39
|
-
"gcp-compute": "https://compute.googleapis.com/$discovery/rest?version=v1",
|
|
40
|
-
"gcp-storage": "https://storage.googleapis.com/$discovery/rest?version=v1",
|
|
41
|
-
"gcp-run": "https://run.googleapis.com/$discovery/rest?version=v2",
|
|
42
|
-
"gcp-functions": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v2",
|
|
43
|
-
"gcp-bigquery": "https://bigquery.googleapis.com/$discovery/rest?version=v2",
|
|
44
|
-
"gcp-aiplatform": "https://aiplatform.googleapis.com/$discovery/rest?version=v1",
|
|
45
|
-
// Railway - GraphQL API
|
|
46
|
-
railway: "https://backboard.railway.com/graphql/v2"
|
|
47
|
-
// GraphQL endpoint
|
|
48
|
-
};
|
|
49
|
-
const KNOWN_BASES = {
|
|
50
|
-
github: "https://api.github.com",
|
|
51
|
-
stripe: "https://api.stripe.com",
|
|
52
|
-
twilio: "https://api.twilio.com",
|
|
53
|
-
slack: "https://slack.com/api",
|
|
54
|
-
discord: "https://discord.com/api",
|
|
55
|
-
openai: "https://api.openai.com",
|
|
56
|
-
anthropic: "https://api.anthropic.com",
|
|
57
|
-
linear: "https://api.linear.app",
|
|
58
|
-
notion: "https://api.notion.com",
|
|
59
|
-
vercel: "https://api.vercel.com",
|
|
60
|
-
cloudflare: "https://api.cloudflare.com",
|
|
61
|
-
// Google Cloud Platform
|
|
62
|
-
gcp: "https://www.googleapis.com",
|
|
63
|
-
"gcp-compute": "https://compute.googleapis.com",
|
|
64
|
-
"gcp-storage": "https://storage.googleapis.com",
|
|
65
|
-
"gcp-run": "https://run.googleapis.com",
|
|
66
|
-
"gcp-functions": "https://cloudfunctions.googleapis.com",
|
|
67
|
-
"gcp-bigquery": "https://bigquery.googleapis.com",
|
|
68
|
-
"gcp-aiplatform": "https://aiplatform.googleapis.com",
|
|
69
|
-
// Railway (GraphQL)
|
|
70
|
-
railway: "https://backboard.railway.com/graphql/v2"
|
|
71
|
-
};
|
|
72
|
-
const API_TYPES = {
|
|
73
|
-
railway: "graphql",
|
|
74
|
-
linear: "graphql",
|
|
75
|
-
gcp: "google-discovery",
|
|
76
|
-
"gcp-compute": "google-discovery",
|
|
77
|
-
"gcp-storage": "google-discovery",
|
|
78
|
-
"gcp-run": "google-discovery",
|
|
79
|
-
"gcp-functions": "google-discovery",
|
|
80
|
-
"gcp-bigquery": "google-discovery",
|
|
81
|
-
"gcp-aiplatform": "google-discovery"
|
|
82
|
-
};
|
|
83
|
-
class APIDiscoverySkill {
|
|
84
|
-
discoveryLog;
|
|
85
|
-
discoveredAPIs = /* @__PURE__ */ new Map();
|
|
86
|
-
constructor() {
|
|
87
|
-
this.discoveryLog = path.join(
|
|
88
|
-
os.homedir(),
|
|
89
|
-
".stackmemory",
|
|
90
|
-
"api-discovery.log"
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Analyze a URL for potential API endpoints
|
|
95
|
-
*/
|
|
96
|
-
analyzeUrl(url) {
|
|
97
|
-
if (url.includes("googleapis.com")) {
|
|
98
|
-
const gcpMatch = url.match(/https?:\/\/([a-z]+)\.googleapis\.com/);
|
|
99
|
-
if (gcpMatch) {
|
|
100
|
-
const service = gcpMatch[1];
|
|
101
|
-
const name = `gcp-${service}`;
|
|
102
|
-
return {
|
|
103
|
-
name,
|
|
104
|
-
baseUrl: `https://${service}.googleapis.com`,
|
|
105
|
-
specUrl: KNOWN_SPECS[name] || `https://${service}.googleapis.com/$discovery/rest?version=v1`,
|
|
106
|
-
source: "known",
|
|
107
|
-
confidence: 0.95,
|
|
108
|
-
apiType: "google-discovery"
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (url.includes("railway.com") || url.includes("railway.app")) {
|
|
113
|
-
return {
|
|
114
|
-
name: "railway",
|
|
115
|
-
baseUrl: KNOWN_BASES["railway"],
|
|
116
|
-
specUrl: KNOWN_SPECS["railway"],
|
|
117
|
-
source: "known",
|
|
118
|
-
confidence: 0.95,
|
|
119
|
-
apiType: "graphql"
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
for (const [name, baseUrl] of Object.entries(KNOWN_BASES)) {
|
|
123
|
-
if (url.includes(name) || url.includes(baseUrl)) {
|
|
124
|
-
return {
|
|
125
|
-
name,
|
|
126
|
-
baseUrl,
|
|
127
|
-
specUrl: KNOWN_SPECS[name],
|
|
128
|
-
source: "known",
|
|
129
|
-
confidence: 0.95,
|
|
130
|
-
apiType: API_TYPES[name] || "rest"
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
for (const { pattern, nameGroup } of API_PATTERNS) {
|
|
135
|
-
const match = url.match(pattern);
|
|
136
|
-
if (match) {
|
|
137
|
-
const name = match[nameGroup].toLowerCase();
|
|
138
|
-
const baseUrl = this.inferBaseUrl(url, name);
|
|
139
|
-
return {
|
|
140
|
-
name,
|
|
141
|
-
baseUrl,
|
|
142
|
-
source: "inferred",
|
|
143
|
-
confidence: 0.7,
|
|
144
|
-
apiType: "rest"
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Infer base URL from a discovered URL
|
|
152
|
-
*/
|
|
153
|
-
inferBaseUrl(url, name) {
|
|
154
|
-
const patterns = [
|
|
155
|
-
`https://api.${name}.com`,
|
|
156
|
-
`https://api.${name}.io`,
|
|
157
|
-
`https://${name}.com/api`
|
|
158
|
-
];
|
|
159
|
-
try {
|
|
160
|
-
const urlObj = new URL(url);
|
|
161
|
-
if (urlObj.hostname.startsWith("api.")) {
|
|
162
|
-
return `${urlObj.protocol}//${urlObj.hostname}`;
|
|
163
|
-
}
|
|
164
|
-
if (urlObj.pathname.includes("/api")) {
|
|
165
|
-
return `${urlObj.protocol}//${urlObj.hostname}/api`;
|
|
166
|
-
}
|
|
167
|
-
return `${urlObj.protocol}//${urlObj.hostname}`;
|
|
168
|
-
} catch {
|
|
169
|
-
return patterns[0];
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Try to discover OpenAPI spec for a service
|
|
174
|
-
*/
|
|
175
|
-
async discoverSpec(name, baseUrl) {
|
|
176
|
-
if (KNOWN_SPECS[name]) {
|
|
177
|
-
return KNOWN_SPECS[name];
|
|
178
|
-
}
|
|
179
|
-
const specPaths = [
|
|
180
|
-
"/openapi.json",
|
|
181
|
-
"/openapi.yaml",
|
|
182
|
-
"/swagger.json",
|
|
183
|
-
"/swagger.yaml",
|
|
184
|
-
"/api-docs",
|
|
185
|
-
"/v1/openapi.json",
|
|
186
|
-
"/v2/openapi.json",
|
|
187
|
-
"/docs/openapi.json",
|
|
188
|
-
"/.well-known/openapi.json"
|
|
189
|
-
];
|
|
190
|
-
for (const specPath of specPaths) {
|
|
191
|
-
const specUrl = `${baseUrl}${specPath}`;
|
|
192
|
-
try {
|
|
193
|
-
execSync(`curl -sI --max-time 2 "${specUrl}" | grep -q "200 OK"`, {
|
|
194
|
-
stdio: "pipe"
|
|
195
|
-
});
|
|
196
|
-
return specUrl;
|
|
197
|
-
} catch {
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Process a URL and auto-register if it's an API
|
|
204
|
-
*/
|
|
205
|
-
async processUrl(url, autoRegister = true) {
|
|
206
|
-
const discovered = this.analyzeUrl(url);
|
|
207
|
-
if (!discovered) {
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
const existing = this.discoveredAPIs.get(discovered.name);
|
|
211
|
-
if (existing) {
|
|
212
|
-
return existing;
|
|
213
|
-
}
|
|
214
|
-
if (!discovered.specUrl && discovered.source !== "known") {
|
|
215
|
-
try {
|
|
216
|
-
discovered.specUrl = await this.discoverSpec(discovered.name, discovered.baseUrl) || void 0;
|
|
217
|
-
} catch {
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
this.discoveredAPIs.set(discovered.name, discovered);
|
|
221
|
-
this.logDiscovery(discovered, url);
|
|
222
|
-
if (autoRegister && discovered.confidence >= 0.7) {
|
|
223
|
-
await this.registerAPI(discovered);
|
|
224
|
-
}
|
|
225
|
-
return discovered;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Register a discovered API
|
|
229
|
-
*/
|
|
230
|
-
async registerAPI(api) {
|
|
231
|
-
const skill = getAPISkill();
|
|
232
|
-
try {
|
|
233
|
-
const result = await skill.add(api.name, api.baseUrl, {
|
|
234
|
-
spec: api.specUrl
|
|
235
|
-
});
|
|
236
|
-
if (result.success) {
|
|
237
|
-
logger.info(`Auto-registered API: ${api.name}`);
|
|
238
|
-
return true;
|
|
239
|
-
}
|
|
240
|
-
} catch (error) {
|
|
241
|
-
logger.warn(`Failed to auto-register API ${api.name}:`, error);
|
|
242
|
-
}
|
|
243
|
-
return false;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Log discovery for debugging
|
|
247
|
-
*/
|
|
248
|
-
logDiscovery(api, sourceUrl) {
|
|
249
|
-
const entry = {
|
|
250
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
251
|
-
api,
|
|
252
|
-
sourceUrl
|
|
253
|
-
};
|
|
254
|
-
try {
|
|
255
|
-
const dir = path.dirname(this.discoveryLog);
|
|
256
|
-
if (!fs.existsSync(dir)) {
|
|
257
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
258
|
-
}
|
|
259
|
-
fs.appendFileSync(this.discoveryLog, JSON.stringify(entry) + "\n");
|
|
260
|
-
} catch (error) {
|
|
261
|
-
logger.warn("Failed to log API discovery:", error);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Get all discovered APIs
|
|
266
|
-
*/
|
|
267
|
-
getDiscoveredAPIs() {
|
|
268
|
-
return Array.from(this.discoveredAPIs.values());
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Suggest API registration based on recent activity
|
|
272
|
-
*/
|
|
273
|
-
async suggestFromContext(recentUrls) {
|
|
274
|
-
const result = {
|
|
275
|
-
discovered: [],
|
|
276
|
-
registered: [],
|
|
277
|
-
skipped: []
|
|
278
|
-
};
|
|
279
|
-
for (const url of recentUrls) {
|
|
280
|
-
const discovered = await this.processUrl(url, false);
|
|
281
|
-
if (discovered) {
|
|
282
|
-
result.discovered.push(discovered);
|
|
283
|
-
const skill = getAPISkill();
|
|
284
|
-
const listResult = await skill.list();
|
|
285
|
-
const existingAPIs = listResult.data || [];
|
|
286
|
-
if (existingAPIs.some((api) => api.name === discovered.name)) {
|
|
287
|
-
result.skipped.push(discovered.name);
|
|
288
|
-
} else if (discovered.confidence >= 0.7) {
|
|
289
|
-
const registered = await this.registerAPI(discovered);
|
|
290
|
-
if (registered) {
|
|
291
|
-
result.registered.push(discovered.name);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return result;
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Get help text
|
|
300
|
-
*/
|
|
301
|
-
getHelp() {
|
|
302
|
-
const restAPIs = Object.keys(KNOWN_SPECS).filter(
|
|
303
|
-
(s) => !API_TYPES[s] || API_TYPES[s] === "rest"
|
|
304
|
-
);
|
|
305
|
-
const graphqlAPIs = Object.keys(KNOWN_SPECS).filter(
|
|
306
|
-
(s) => API_TYPES[s] === "graphql"
|
|
307
|
-
);
|
|
308
|
-
const gcpAPIs = Object.keys(KNOWN_SPECS).filter(
|
|
309
|
-
(s) => API_TYPES[s] === "google-discovery"
|
|
310
|
-
);
|
|
311
|
-
return `
|
|
312
|
-
API Auto-Discovery
|
|
313
|
-
|
|
314
|
-
Automatically detects and registers APIs when you browse documentation.
|
|
315
|
-
|
|
316
|
-
REST APIs (OpenAPI specs):
|
|
317
|
-
${restAPIs.map((s) => ` - ${s}`).join("\n")}
|
|
318
|
-
|
|
319
|
-
GraphQL APIs:
|
|
320
|
-
${graphqlAPIs.map((s) => ` - ${s}`).join("\n")}
|
|
321
|
-
|
|
322
|
-
Google Cloud Platform (Discovery format):
|
|
323
|
-
${gcpAPIs.map((s) => ` - ${s}`).join("\n")}
|
|
324
|
-
|
|
325
|
-
How It Works:
|
|
326
|
-
1. Monitors URLs you access during development
|
|
327
|
-
2. Identifies API documentation and endpoints
|
|
328
|
-
3. Finds OpenAPI specs automatically
|
|
329
|
-
4. Registers APIs for easy access via /api exec
|
|
330
|
-
|
|
331
|
-
Usage:
|
|
332
|
-
# Check if a URL is a known API
|
|
333
|
-
stackmemory api discover <url>
|
|
334
|
-
|
|
335
|
-
# List discovered APIs
|
|
336
|
-
stackmemory api discovered
|
|
337
|
-
|
|
338
|
-
# Register all discovered APIs
|
|
339
|
-
stackmemory api register-discovered
|
|
340
|
-
`;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
let discoveryInstance = null;
|
|
344
|
-
function getAPIDiscovery() {
|
|
345
|
-
if (!discoveryInstance) {
|
|
346
|
-
discoveryInstance = new APIDiscoverySkill();
|
|
347
|
-
}
|
|
348
|
-
return discoveryInstance;
|
|
349
|
-
}
|
|
350
|
-
export {
|
|
351
|
-
APIDiscoverySkill,
|
|
352
|
-
getAPIDiscovery
|
|
353
|
-
};
|
|
354
|
-
//# sourceMappingURL=api-discovery.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/skills/api-discovery.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * API Auto-Discovery Skill\n *\n * Automatically detects API endpoints and OpenAPI specs when Claude\n * reads documentation or API URLs, then registers them for easy access.\n */\n\nimport { execSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { logger } from '../core/monitoring/logger.js';\nimport { getAPISkill } from './api-skill.js';\n\n// Common API documentation patterns\nconst API_PATTERNS = [\n // Direct API URLs\n {\n pattern: /https?:\\/\\/api\\.([a-z0-9-]+)\\.(com|io|dev|app|co)/,\n nameGroup: 1,\n },\n // REST API paths in docs\n { pattern: /https?:\\/\\/([a-z0-9-]+)\\.com\\/api/, nameGroup: 1 },\n // Developer docs\n { pattern: /https?:\\/\\/developer\\.([a-z0-9-]+)\\.com/, nameGroup: 1 },\n // Docs subdomains\n { pattern: /https?:\\/\\/docs\\.([a-z0-9-]+)\\.(com|io|dev)/, nameGroup: 1 },\n];\n\n// Known OpenAPI spec locations for popular services\nconst KNOWN_SPECS: Record<string, string> = {\n github:\n 'https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json',\n stripe:\n 'https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json',\n twilio:\n 'https://raw.githubusercontent.com/twilio/twilio-oai/main/spec/json/twilio_api_v2010.json',\n slack: 'https://api.slack.com/specs/openapi/v2/slack_web.json',\n discord:\n 'https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json',\n openai:\n 'https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml',\n anthropic:\n 'https://raw.githubusercontent.com/anthropics/anthropic-sdk-python/main/openapi.json',\n linear: 'https://api.linear.app/graphql', // GraphQL, not REST\n notion:\n 'https://raw.githubusercontent.com/NotionX/notion-sdk-js/main/openapi.json',\n vercel: 'https://openapi.vercel.sh/',\n cloudflare:\n 'https://raw.githubusercontent.com/cloudflare/api-schemas/main/openapi.json',\n // Google Cloud Platform - uses Google Discovery format\n gcp: 'https://www.googleapis.com/discovery/v1/apis',\n 'gcp-compute': 'https://compute.googleapis.com/$discovery/rest?version=v1',\n 'gcp-storage': 'https://storage.googleapis.com/$discovery/rest?version=v1',\n 'gcp-run': 'https://run.googleapis.com/$discovery/rest?version=v2',\n 'gcp-functions':\n 'https://cloudfunctions.googleapis.com/$discovery/rest?version=v2',\n 'gcp-bigquery': 'https://bigquery.googleapis.com/$discovery/rest?version=v2',\n 'gcp-aiplatform':\n 'https://aiplatform.googleapis.com/$discovery/rest?version=v1',\n // Railway - GraphQL API\n railway: 'https://backboard.railway.com/graphql/v2', // GraphQL endpoint\n};\n\n// Known base URLs for popular services\nconst KNOWN_BASES: Record<string, string> = {\n github: 'https://api.github.com',\n stripe: 'https://api.stripe.com',\n twilio: 'https://api.twilio.com',\n slack: 'https://slack.com/api',\n discord: 'https://discord.com/api',\n openai: 'https://api.openai.com',\n anthropic: 'https://api.anthropic.com',\n linear: 'https://api.linear.app',\n notion: 'https://api.notion.com',\n vercel: 'https://api.vercel.com',\n cloudflare: 'https://api.cloudflare.com',\n // Google Cloud Platform\n gcp: 'https://www.googleapis.com',\n 'gcp-compute': 'https://compute.googleapis.com',\n 'gcp-storage': 'https://storage.googleapis.com',\n 'gcp-run': 'https://run.googleapis.com',\n 'gcp-functions': 'https://cloudfunctions.googleapis.com',\n 'gcp-bigquery': 'https://bigquery.googleapis.com',\n 'gcp-aiplatform': 'https://aiplatform.googleapis.com',\n // Railway (GraphQL)\n railway: 'https://backboard.railway.com/graphql/v2',\n};\n\n// API types for special handling\nconst API_TYPES: Record<string, 'rest' | 'graphql' | 'google-discovery'> = {\n railway: 'graphql',\n linear: 'graphql',\n gcp: 'google-discovery',\n 'gcp-compute': 'google-discovery',\n 'gcp-storage': 'google-discovery',\n 'gcp-run': 'google-discovery',\n 'gcp-functions': 'google-discovery',\n 'gcp-bigquery': 'google-discovery',\n 'gcp-aiplatform': 'google-discovery',\n};\n\nexport interface DiscoveredAPI {\n name: string;\n baseUrl: string;\n specUrl?: string;\n source: 'url' | 'docs' | 'known' | 'inferred';\n confidence: number; // 0-1\n apiType?: 'rest' | 'graphql' | 'google-discovery';\n}\n\nexport interface DiscoveryResult {\n discovered: DiscoveredAPI[];\n registered: string[];\n skipped: string[];\n}\n\nexport class APIDiscoverySkill {\n private discoveryLog: string;\n private discoveredAPIs: Map<string, DiscoveredAPI> = new Map();\n\n constructor() {\n this.discoveryLog = path.join(\n os.homedir(),\n '.stackmemory',\n 'api-discovery.log'\n );\n }\n\n /**\n * Analyze a URL for potential API endpoints\n */\n analyzeUrl(url: string): DiscoveredAPI | null {\n // Check for GCP URLs first (special pattern)\n if (url.includes('googleapis.com')) {\n const gcpMatch = url.match(/https?:\\/\\/([a-z]+)\\.googleapis\\.com/);\n if (gcpMatch) {\n const service = gcpMatch[1];\n const name = `gcp-${service}`;\n return {\n name,\n baseUrl: `https://${service}.googleapis.com`,\n specUrl:\n KNOWN_SPECS[name] ||\n `https://${service}.googleapis.com/$discovery/rest?version=v1`,\n source: 'known',\n confidence: 0.95,\n apiType: 'google-discovery',\n };\n }\n }\n\n // Check for Railway\n if (url.includes('railway.com') || url.includes('railway.app')) {\n return {\n name: 'railway',\n baseUrl: KNOWN_BASES['railway'],\n specUrl: KNOWN_SPECS['railway'],\n source: 'known',\n confidence: 0.95,\n apiType: 'graphql',\n };\n }\n\n // Check if it's a known service\n for (const [name, baseUrl] of Object.entries(KNOWN_BASES)) {\n if (url.includes(name) || url.includes(baseUrl)) {\n return {\n name,\n baseUrl,\n specUrl: KNOWN_SPECS[name],\n source: 'known',\n confidence: 0.95,\n apiType: API_TYPES[name] || 'rest',\n };\n }\n }\n\n // Try to match API patterns\n for (const { pattern, nameGroup } of API_PATTERNS) {\n const match = url.match(pattern);\n if (match) {\n const name = match[nameGroup].toLowerCase();\n const baseUrl = this.inferBaseUrl(url, name);\n\n return {\n name,\n baseUrl,\n source: 'inferred',\n confidence: 0.7,\n apiType: 'rest',\n };\n }\n }\n\n return null;\n }\n\n /**\n * Infer base URL from a discovered URL\n */\n private inferBaseUrl(url: string, name: string): string {\n // Try common patterns\n const patterns = [\n `https://api.${name}.com`,\n `https://api.${name}.io`,\n `https://${name}.com/api`,\n ];\n\n // Extract domain from URL\n try {\n const urlObj = new URL(url);\n if (urlObj.hostname.startsWith('api.')) {\n return `${urlObj.protocol}//${urlObj.hostname}`;\n }\n if (urlObj.pathname.includes('/api')) {\n return `${urlObj.protocol}//${urlObj.hostname}/api`;\n }\n return `${urlObj.protocol}//${urlObj.hostname}`;\n } catch {\n return patterns[0];\n }\n }\n\n /**\n * Try to discover OpenAPI spec for a service\n */\n async discoverSpec(name: string, baseUrl: string): Promise<string | null> {\n // Check known specs first\n if (KNOWN_SPECS[name]) {\n return KNOWN_SPECS[name];\n }\n\n // Try common spec locations\n const specPaths = [\n '/openapi.json',\n '/openapi.yaml',\n '/swagger.json',\n '/swagger.yaml',\n '/api-docs',\n '/v1/openapi.json',\n '/v2/openapi.json',\n '/docs/openapi.json',\n '/.well-known/openapi.json',\n ];\n\n for (const specPath of specPaths) {\n const specUrl = `${baseUrl}${specPath}`;\n try {\n // Quick HEAD request to check if spec exists\n execSync(`curl -sI --max-time 2 \"${specUrl}\" | grep -q \"200 OK\"`, {\n stdio: 'pipe',\n });\n return specUrl;\n } catch {\n // Spec not found at this location\n }\n }\n\n return null;\n }\n\n /**\n * Process a URL and auto-register if it's an API\n */\n async processUrl(\n url: string,\n autoRegister: boolean = true\n ): Promise<DiscoveredAPI | null> {\n const discovered = this.analyzeUrl(url);\n\n if (!discovered) {\n return null;\n }\n\n // Check if already discovered\n const existing = this.discoveredAPIs.get(discovered.name);\n if (existing) {\n return existing;\n }\n\n // Only probe for spec if it's not a known service (known services already have spec URLs)\n if (!discovered.specUrl && discovered.source !== 'known') {\n // Try to find OpenAPI spec (with timeout protection)\n try {\n discovered.specUrl =\n (await this.discoverSpec(discovered.name, discovered.baseUrl)) ||\n undefined;\n } catch {\n // Spec discovery failed, continue without\n }\n }\n\n this.discoveredAPIs.set(discovered.name, discovered);\n this.logDiscovery(discovered, url);\n\n // Auto-register if enabled and confidence is high enough\n if (autoRegister && discovered.confidence >= 0.7) {\n await this.registerAPI(discovered);\n }\n\n return discovered;\n }\n\n /**\n * Register a discovered API\n */\n async registerAPI(api: DiscoveredAPI): Promise<boolean> {\n const skill = getAPISkill();\n\n try {\n const result = await skill.add(api.name, api.baseUrl, {\n spec: api.specUrl,\n });\n\n if (result.success) {\n logger.info(`Auto-registered API: ${api.name}`);\n return true;\n }\n } catch (error) {\n logger.warn(`Failed to auto-register API ${api.name}:`, error);\n }\n\n return false;\n }\n\n /**\n * Log discovery for debugging\n */\n private logDiscovery(api: DiscoveredAPI, sourceUrl: string): void {\n const entry = {\n timestamp: new Date().toISOString(),\n api,\n sourceUrl,\n };\n\n try {\n const dir = path.dirname(this.discoveryLog);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.appendFileSync(this.discoveryLog, JSON.stringify(entry) + '\\n');\n } catch (error) {\n logger.warn('Failed to log API discovery:', error);\n }\n }\n\n /**\n * Get all discovered APIs\n */\n getDiscoveredAPIs(): DiscoveredAPI[] {\n return Array.from(this.discoveredAPIs.values());\n }\n\n /**\n * Suggest API registration based on recent activity\n */\n async suggestFromContext(recentUrls: string[]): Promise<DiscoveryResult> {\n const result: DiscoveryResult = {\n discovered: [],\n registered: [],\n skipped: [],\n };\n\n for (const url of recentUrls) {\n const discovered = await this.processUrl(url, false);\n\n if (discovered) {\n result.discovered.push(discovered);\n\n // Check if already registered\n const skill = getAPISkill();\n const listResult = await skill.list();\n const existingAPIs = (listResult.data as Array<{ name: string }>) || [];\n\n if (existingAPIs.some((api) => api.name === discovered.name)) {\n result.skipped.push(discovered.name);\n } else if (discovered.confidence >= 0.7) {\n const registered = await this.registerAPI(discovered);\n if (registered) {\n result.registered.push(discovered.name);\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Get help text\n */\n getHelp(): string {\n const restAPIs = Object.keys(KNOWN_SPECS).filter(\n (s) => !API_TYPES[s] || API_TYPES[s] === 'rest'\n );\n const graphqlAPIs = Object.keys(KNOWN_SPECS).filter(\n (s) => API_TYPES[s] === 'graphql'\n );\n const gcpAPIs = Object.keys(KNOWN_SPECS).filter(\n (s) => API_TYPES[s] === 'google-discovery'\n );\n\n return `\nAPI Auto-Discovery\n\nAutomatically detects and registers APIs when you browse documentation.\n\nREST APIs (OpenAPI specs):\n${restAPIs.map((s) => ` - ${s}`).join('\\n')}\n\nGraphQL APIs:\n${graphqlAPIs.map((s) => ` - ${s}`).join('\\n')}\n\nGoogle Cloud Platform (Discovery format):\n${gcpAPIs.map((s) => ` - ${s}`).join('\\n')}\n\nHow It Works:\n1. Monitors URLs you access during development\n2. Identifies API documentation and endpoints\n3. Finds OpenAPI specs automatically\n4. Registers APIs for easy access via /api exec\n\nUsage:\n # Check if a URL is a known API\n stackmemory api discover <url>\n\n # List discovered APIs\n stackmemory api discovered\n\n # Register all discovered APIs\n stackmemory api register-discovered\n`;\n }\n}\n\n// Singleton instance\nlet discoveryInstance: APIDiscoverySkill | null = null;\n\nexport function getAPIDiscovery(): APIDiscoverySkill {\n if (!discoveryInstance) {\n discoveryInstance = new APIDiscoverySkill();\n }\n return discoveryInstance;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|