profclaw 0.0.1-beta.1 → 0.0.1-beta.2
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 +1 -1
- package/dist/adapters/openclaw.js +1 -1
- package/dist/agents/executor.js +38 -6
- package/dist/auth/auth-service.js +8 -6
- package/dist/auth/device-identity.js +7 -5
- package/dist/auth/github-oauth.js +3 -1
- package/dist/auth/pairing-codes.js +6 -4
- package/dist/browser/service.js +5 -3
- package/dist/chat/execution/guardrails.js +3 -1
- package/dist/chat/execution/workflows/executor.js +4 -2
- package/dist/chat/memory.js +3 -1
- package/dist/chat/proactive/index.js +13 -11
- package/dist/chat/tools.js +8 -7
- package/dist/cli/commands/auth.js +22 -13
- package/dist/cli/commands/onboard.js +248 -59
- package/dist/cli/commands/setup.js +180 -104
- package/dist/cron/issue-poller.js +1 -1
- package/dist/hooks/agent-webhook.js +10 -7
- package/dist/hooks/prompt-submit.js +5 -6
- package/dist/hooks/session-end.js +10 -6
- package/dist/hooks/tool-use.js +9 -6
- package/dist/integrations/github-ticket-sync.js +8 -6
- package/dist/integrations/github.js +8 -6
- package/dist/integrations/jira.js +5 -3
- package/dist/mcp/server.js +12 -9
- package/dist/memory/experience-store.js +15 -14
- package/dist/notifications/slack.js +4 -2
- package/dist/providers/types.d.ts +2 -2
- package/dist/queue/failure-handler.js +15 -13
- package/dist/queue/index.js +6 -4
- package/dist/queue/memory-queue.js +23 -27
- package/dist/queue/task-queue.js +18 -22
- package/dist/routes/agents.js +3 -1
- package/dist/routes/auth.js +11 -9
- package/dist/routes/devices.js +17 -15
- package/dist/routes/gateway.js +3 -1
- package/dist/routes/hooks.js +7 -5
- package/dist/routes/import.js +10 -8
- package/dist/routes/labels.js +11 -9
- package/dist/routes/oobe.js +8 -6
- package/dist/routes/openapi.js +1 -1
- package/dist/routes/projects.js +27 -25
- package/dist/routes/settings.js +7 -5
- package/dist/routes/setup.js +12 -11
- package/dist/routes/slack.js +28 -27
- package/dist/routes/stats.js +6 -4
- package/dist/routes/summaries.js +4 -3
- package/dist/routes/sync.js +7 -5
- package/dist/routes/tasks.js +10 -8
- package/dist/routes/tickets.js +26 -26
- package/dist/routes/tokens.js +5 -3
- package/dist/routes/users.js +14 -12
- package/dist/routes/webhooks.js +5 -3
- package/dist/settings/index.js +3 -1
- package/dist/storage/index.d.ts +2 -1
- package/dist/storage/index.js +9 -4
- package/dist/storage/libsql.js +29 -21
- package/dist/storage/schema.d.ts +107 -46
- package/dist/summaries/storage.js +3 -1
- package/dist/tickets/index.js +10 -8
- package/dist/utils/circuit-breaker.js +10 -5
- package/dist/utils/logger.d.ts +5 -1
- package/dist/utils/logger.js +23 -7
- package/package.json +4 -3
- package/ui/dist/assets/{ActivityView-CkPgKhwm.js → ActivityView-DIPQSJ_d.js} +1 -1
- package/ui/dist/assets/{AgentList-C3SVdeEz.js → AgentList-CqyaYrcq.js} +1 -1
- package/ui/dist/assets/{AnalyticsDashboard-DVU--vlP.js → AnalyticsDashboard-C-mjuGHT.js} +1 -1
- package/ui/dist/assets/{AreaChart-B5qMEGWj.js → AreaChart-CfYWmbtr.js} +1 -1
- package/ui/dist/assets/{CartesianChart-B50bcUJi.js → CartesianChart-BaQ3It0c.js} +1 -1
- package/ui/dist/assets/{ChatView-BZFJs7w_.js → ChatView-DxxQy6pl.js} +1 -1
- package/ui/dist/assets/CostsDashboard-CDBBcGkg.js +1 -0
- package/ui/dist/assets/{EstimateSelect-CLpB4NQO.js → EstimateSelect-CDjf5qKl.js} +1 -1
- package/ui/dist/assets/{FloatingChatbot-CBzBY9a0.js → FloatingChatbot-CZHjvJIe.js} +1 -1
- package/ui/dist/assets/{InviteCodeManagement-DsbdPa6W.js → InviteCodeManagement-DTm-IPTm.js} +1 -1
- package/ui/dist/assets/{ProjectDetail-BEM3tFXg.js → ProjectDetail-DlYUcOss.js} +1 -1
- package/ui/dist/assets/{ProjectIcon-CN1FmFAk.js → ProjectIcon-BMRpnM04.js} +1 -1
- package/ui/dist/assets/{ProjectList-DSDaNhxQ.js → ProjectList-D85TN0i0.js} +1 -1
- package/ui/dist/assets/{Settings-dPVcqC_d.js → Settings-CgPqzUvj.js} +3 -3
- package/ui/dist/assets/{StatusIndicator-DA3NAo_b.js → StatusIndicator-yig0uZEA.js} +1 -1
- package/ui/dist/assets/{SummaryDetail-Bjnf9lT8.js → SummaryDetail-CwLAfHgJ.js} +1 -1
- package/ui/dist/assets/{SummaryList-ENwKDBKW.js → SummaryList-BvS5Idnu.js} +1 -1
- package/ui/dist/assets/{TaskDetail-DnwG6MzB.js → TaskDetail-zarC1fOt.js} +1 -1
- package/ui/dist/assets/{TaskList-D9Ug_HiV.js → TaskList-CyJq3ANE.js} +1 -1
- package/ui/dist/assets/{TicketBoard-CviH1571.js → TicketBoard-BlWr3-iH.js} +1 -1
- package/ui/dist/assets/{TicketDetail-8Jk8O-33.js → TicketDetail-DmqWKj2W.js} +1 -1
- package/ui/dist/assets/{TicketList-B-iV4rRA.js → TicketList-Scj4pMWa.js} +1 -1
- package/ui/dist/assets/{UserManagement-CPZ8s7s2.js → UserManagement-BH7uG7dw.js} +1 -1
- package/ui/dist/assets/{ViewSwitcher-BUyOOWDI.js → ViewSwitcher-3HzZUdWn.js} +1 -1
- package/ui/dist/assets/{alert-dialog-BOmnTkN-.js → alert-dialog-DWPb2IfQ.js} +1 -1
- package/ui/dist/assets/{archive-D5my9zOG.js → archive-CGck7gxR.js} +1 -1
- package/ui/dist/assets/{badge-B4ov81_m.js → badge-DEmc3Z_l.js} +1 -1
- package/ui/dist/assets/{brain-C53ElFLD.js → brain-CfFdLVqb.js} +1 -1
- package/ui/dist/assets/{bug-D0TJoCYn.js → bug-DqSGPUUE.js} +1 -1
- package/ui/dist/assets/{calendar-BkWIhKa1.js → calendar-BuZ4zbPW.js} +1 -1
- package/ui/dist/assets/{chevron-up-BRTtndUZ.js → chevron-up-DcJ4LL_N.js} +1 -1
- package/ui/dist/assets/{circle-x-BN89YhbS.js → circle-x-C78PNZjF.js} +1 -1
- package/ui/dist/assets/{constants-fc7TFI7u.js → constants-DhDjZe4P.js} +1 -1
- package/ui/dist/assets/{cpu-B41x1-vV.js → cpu-Ck6AoG8c.js} +1 -1
- package/ui/dist/assets/{database-D9Cnfmzj.js → database-CA2w8Lvt.js} +1 -1
- package/ui/dist/assets/{dialog-DrWB4EYD.js → dialog-BOdGWhgE.js} +1 -1
- package/ui/dist/assets/{ellipsis-NuUWekvu.js → ellipsis-FhHKRbfl.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-BueMfuCw.js → ellipsis-vertical-CO0UqE4-.js} +1 -1
- package/ui/dist/assets/{file-code-HR9829Jc.js → file-code-ChnhYYj1.js} +1 -1
- package/ui/dist/assets/{folder-open-C_7oYEqe.js → folder-open-CHwA1-ve.js} +1 -1
- package/ui/dist/assets/{funnel-B5gmNXGf.js → funnel-ByEjRFNB.js} +1 -1
- package/ui/dist/assets/{git-branch-BRMiJmV3.js → git-branch-GTOPQgU4.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-CXOUQeJI.js → git-commit-horizontal-F5M84Kut.js} +1 -1
- package/ui/dist/assets/{globe-CCspjvus.js → globe-CQWfr7hT.js} +1 -1
- package/ui/dist/assets/{hash-g3102kPC.js → hash-nKC9gtLg.js} +1 -1
- package/ui/dist/assets/{history-CNqcBBrV.js → history-DfFSA9xJ.js} +1 -1
- package/ui/dist/assets/{index-kb4AJXUB.js → index--JkIxVXb.js} +3 -3
- package/ui/dist/assets/index-Ca3vk7Gq.js +1 -0
- package/ui/dist/assets/{index-C9jNQXzL.js → index-DHGvP9mp.js} +1 -1
- package/ui/dist/assets/index-DeI8lKRR.js +1 -0
- package/ui/dist/assets/{index-DURTouJI.js → index-Z4-RtZcs.js} +1 -1
- package/ui/dist/assets/{index-CEZ6R2Uw.js → index-a4Fxq0Hb.js} +1 -1
- package/ui/dist/assets/{layers-CLXiHN6o.js → layers-DFeLExSa.js} +1 -1
- package/ui/dist/assets/{layout-dashboard-B07MFhBs.js → layout-dashboard-WmgjMhWF.js} +1 -1
- package/ui/dist/assets/{lightbulb-B2dgG5ks.js → lightbulb-Bo8hEr7B.js} +1 -1
- package/ui/dist/assets/{link-2-BxNmr9hL.js → link-2-YqrpQXBH.js} +1 -1
- package/ui/dist/assets/{markdown-renderer-CjU6hBcW.js → markdown-renderer-Croje6Xe.js} +1 -1
- package/ui/dist/assets/{message-square-Bf2-CVbt.js → message-square-CD0H5hot.js} +1 -1
- package/ui/dist/assets/{pencil-D096Ey62.js → pencil-DpFnj5dn.js} +1 -1
- package/ui/dist/assets/{play-DfdcSI3x.js → play-DVgea_jT.js} +1 -1
- package/ui/dist/assets/{popover-BV0QJDQq.js → popover-JXecfWG5.js} +1 -1
- package/ui/dist/assets/{progress-DjPEDJfI.js → progress-C1ghf1Fu.js} +1 -1
- package/ui/dist/assets/{rocket-CPsTc-5G.js → rocket-BFxPYGx9.js} +1 -1
- package/ui/dist/assets/{select-LsO16slr.js → select-MADP8m6Q.js} +1 -1
- package/ui/dist/assets/{send-BDYBZDUZ.js → send-eYnW_7n-.js} +1 -1
- package/ui/dist/assets/{server-B3k6noce.js → server-CPMaysH8.js} +1 -1
- package/ui/dist/assets/{settings-2-Cu4xTjhG.js → settings-2-scXUOuE_.js} +1 -1
- package/ui/dist/assets/{sheet-BScLnPKX.js → sheet-r6NSOxi-.js} +1 -1
- package/ui/dist/assets/{shield-check-CQqkwufI.js → shield-check-PEr7nmVw.js} +1 -1
- package/ui/dist/assets/{shield-off-ZFruH9KO.js → shield-off-CLtXio62.js} +1 -1
- package/ui/dist/assets/{skeleton-CtkIA_MU.js → skeleton-C9oEzNlU.js} +1 -1
- package/ui/dist/assets/{smartphone-DnoksVkc.js → smartphone-DusFfY0U.js} +1 -1
- package/ui/dist/assets/{square-uD9ZHMfW.js → square-e1yxB2eR.js} +1 -1
- package/ui/dist/assets/{switch-MQPnwGJK.js → switch-tNs0n-kz.js} +1 -1
- package/ui/dist/assets/{table-B8cqlywA.js → table-CXxtLicg.js} +1 -1
- package/ui/dist/assets/{tag-wEJQRWlV.js → tag-tAwMmQ9G.js} +1 -1
- package/ui/dist/assets/{textarea-D5LJCOGl.js → textarea-BjiEeIWh.js} +1 -1
- package/ui/dist/assets/{timer-mbGHegmr.js → timer-Vel1N3RP.js} +1 -1
- package/ui/dist/assets/{tooltip-Df1CunSp.js → tooltip-ZMwtfr1J.js} +1 -1
- package/ui/dist/assets/{trash-2-B4oAXsX-.js → trash-2-eM-CNwsZ.js} +1 -1
- package/ui/dist/assets/{trending-up-BGWxvlmZ.js → trending-up-BGafmjRo.js} +1 -1
- package/ui/dist/assets/{wand-sparkles-CZy4xvL3.js → wand-sparkles-DPvcd9Pi.js} +1 -1
- package/ui/dist/assets/{wrench-ByZkjO6m.js → wrench-B8s3zYVV.js} +1 -1
- package/ui/dist/index.html +1 -1
- package/ui/dist/assets/CostsDashboard-ChfH8BlG.js +0 -1
- package/ui/dist/assets/index-27mTPKuh.js +0 -1
- package/ui/dist/assets/index-BMx3fH-e.js +0 -1
package/dist/storage/schema.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { TaskResult } from "../types/task.js";
|
|
2
|
+
type JsonObject = Record<string, unknown>;
|
|
1
3
|
/**
|
|
2
4
|
* Tasks Table
|
|
3
5
|
*/
|
|
@@ -361,7 +363,7 @@ export declare const tasks: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
361
363
|
tableName: "tasks";
|
|
362
364
|
dataType: "json";
|
|
363
365
|
columnType: "SQLiteTextJson";
|
|
364
|
-
data:
|
|
366
|
+
data: JsonObject;
|
|
365
367
|
driverParam: string;
|
|
366
368
|
notNull: true;
|
|
367
369
|
hasDefault: true;
|
|
@@ -373,14 +375,14 @@ export declare const tasks: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
373
375
|
identity: undefined;
|
|
374
376
|
generated: undefined;
|
|
375
377
|
}, {}, {
|
|
376
|
-
$type:
|
|
378
|
+
$type: JsonObject;
|
|
377
379
|
}>;
|
|
378
380
|
result: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
379
381
|
name: "result";
|
|
380
382
|
tableName: "tasks";
|
|
381
383
|
dataType: "json";
|
|
382
384
|
columnType: "SQLiteTextJson";
|
|
383
|
-
data:
|
|
385
|
+
data: TaskResult;
|
|
384
386
|
driverParam: string;
|
|
385
387
|
notNull: false;
|
|
386
388
|
hasDefault: false;
|
|
@@ -392,7 +394,7 @@ export declare const tasks: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
392
394
|
identity: undefined;
|
|
393
395
|
generated: undefined;
|
|
394
396
|
}, {}, {
|
|
395
|
-
$type:
|
|
397
|
+
$type: TaskResult;
|
|
396
398
|
}>;
|
|
397
399
|
attempts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
398
400
|
name: "attempts";
|
|
@@ -615,7 +617,13 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
615
617
|
tableName: "summaries";
|
|
616
618
|
dataType: "json";
|
|
617
619
|
columnType: "SQLiteTextJson";
|
|
618
|
-
data:
|
|
620
|
+
data: {
|
|
621
|
+
path: string;
|
|
622
|
+
action: "created" | "modified" | "deleted" | "renamed";
|
|
623
|
+
linesAdded?: number | undefined;
|
|
624
|
+
linesRemoved?: number | undefined;
|
|
625
|
+
oldPath?: string | undefined;
|
|
626
|
+
}[];
|
|
619
627
|
driverParam: string;
|
|
620
628
|
notNull: true;
|
|
621
629
|
hasDefault: true;
|
|
@@ -627,14 +635,25 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
627
635
|
identity: undefined;
|
|
628
636
|
generated: undefined;
|
|
629
637
|
}, {}, {
|
|
630
|
-
$type:
|
|
638
|
+
$type: {
|
|
639
|
+
path: string;
|
|
640
|
+
action: "created" | "modified" | "deleted" | "renamed";
|
|
641
|
+
linesAdded?: number | undefined;
|
|
642
|
+
linesRemoved?: number | undefined;
|
|
643
|
+
oldPath?: string | undefined;
|
|
644
|
+
}[];
|
|
631
645
|
}>;
|
|
632
646
|
decisions: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
633
647
|
name: "decisions";
|
|
634
648
|
tableName: "summaries";
|
|
635
649
|
dataType: "json";
|
|
636
650
|
columnType: "SQLiteTextJson";
|
|
637
|
-
data:
|
|
651
|
+
data: {
|
|
652
|
+
description: string;
|
|
653
|
+
reason?: string | undefined;
|
|
654
|
+
alternatives?: string[] | undefined;
|
|
655
|
+
confidence?: number | undefined;
|
|
656
|
+
}[];
|
|
638
657
|
driverParam: string;
|
|
639
658
|
notNull: true;
|
|
640
659
|
hasDefault: true;
|
|
@@ -646,14 +665,24 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
646
665
|
identity: undefined;
|
|
647
666
|
generated: undefined;
|
|
648
667
|
}, {}, {
|
|
649
|
-
$type:
|
|
668
|
+
$type: {
|
|
669
|
+
description: string;
|
|
670
|
+
reason?: string | undefined;
|
|
671
|
+
alternatives?: string[] | undefined;
|
|
672
|
+
confidence?: number | undefined;
|
|
673
|
+
}[];
|
|
650
674
|
}>;
|
|
651
675
|
blockers: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
652
676
|
name: "blockers";
|
|
653
677
|
tableName: "summaries";
|
|
654
678
|
dataType: "json";
|
|
655
679
|
columnType: "SQLiteTextJson";
|
|
656
|
-
data:
|
|
680
|
+
data: {
|
|
681
|
+
description: string;
|
|
682
|
+
severity: "info" | "warning" | "error" | "critical";
|
|
683
|
+
resolved: boolean;
|
|
684
|
+
resolution?: string | undefined;
|
|
685
|
+
}[];
|
|
657
686
|
driverParam: string;
|
|
658
687
|
notNull: true;
|
|
659
688
|
hasDefault: true;
|
|
@@ -665,14 +694,25 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
665
694
|
identity: undefined;
|
|
666
695
|
generated: undefined;
|
|
667
696
|
}, {}, {
|
|
668
|
-
$type:
|
|
697
|
+
$type: {
|
|
698
|
+
description: string;
|
|
699
|
+
severity: "info" | "warning" | "error" | "critical";
|
|
700
|
+
resolved: boolean;
|
|
701
|
+
resolution?: string | undefined;
|
|
702
|
+
}[];
|
|
669
703
|
}>;
|
|
670
704
|
artifacts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
671
705
|
name: "artifacts";
|
|
672
706
|
tableName: "summaries";
|
|
673
707
|
dataType: "json";
|
|
674
708
|
columnType: "SQLiteTextJson";
|
|
675
|
-
data:
|
|
709
|
+
data: {
|
|
710
|
+
type: "branch" | "commit" | "pull_request" | "file" | "comment" | "other" | "deployment";
|
|
711
|
+
title?: string | undefined;
|
|
712
|
+
metadata?: Record<string, unknown> | undefined;
|
|
713
|
+
url?: string | undefined;
|
|
714
|
+
identifier?: string | undefined;
|
|
715
|
+
}[];
|
|
676
716
|
driverParam: string;
|
|
677
717
|
notNull: true;
|
|
678
718
|
hasDefault: true;
|
|
@@ -684,14 +724,24 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
684
724
|
identity: undefined;
|
|
685
725
|
generated: undefined;
|
|
686
726
|
}, {}, {
|
|
687
|
-
$type:
|
|
727
|
+
$type: {
|
|
728
|
+
type: "branch" | "commit" | "pull_request" | "file" | "comment" | "other" | "deployment";
|
|
729
|
+
title?: string | undefined;
|
|
730
|
+
metadata?: Record<string, unknown> | undefined;
|
|
731
|
+
url?: string | undefined;
|
|
732
|
+
identifier?: string | undefined;
|
|
733
|
+
}[];
|
|
688
734
|
}>;
|
|
689
735
|
tokensUsed: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
690
736
|
name: "tokens_used";
|
|
691
737
|
tableName: "summaries";
|
|
692
738
|
dataType: "json";
|
|
693
739
|
columnType: "SQLiteTextJson";
|
|
694
|
-
data:
|
|
740
|
+
data: {
|
|
741
|
+
input: number;
|
|
742
|
+
output: number;
|
|
743
|
+
total: number;
|
|
744
|
+
};
|
|
695
745
|
driverParam: string;
|
|
696
746
|
notNull: false;
|
|
697
747
|
hasDefault: false;
|
|
@@ -703,14 +753,21 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
703
753
|
identity: undefined;
|
|
704
754
|
generated: undefined;
|
|
705
755
|
}, {}, {
|
|
706
|
-
$type:
|
|
756
|
+
$type: {
|
|
757
|
+
input: number;
|
|
758
|
+
output: number;
|
|
759
|
+
total: number;
|
|
760
|
+
};
|
|
707
761
|
}>;
|
|
708
762
|
cost: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
709
763
|
name: "cost";
|
|
710
764
|
tableName: "summaries";
|
|
711
765
|
dataType: "json";
|
|
712
766
|
columnType: "SQLiteTextJson";
|
|
713
|
-
data:
|
|
767
|
+
data: {
|
|
768
|
+
amount: number;
|
|
769
|
+
currency: string;
|
|
770
|
+
};
|
|
714
771
|
driverParam: string;
|
|
715
772
|
notNull: false;
|
|
716
773
|
hasDefault: false;
|
|
@@ -722,7 +779,10 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
722
779
|
identity: undefined;
|
|
723
780
|
generated: undefined;
|
|
724
781
|
}, {}, {
|
|
725
|
-
$type:
|
|
782
|
+
$type: {
|
|
783
|
+
amount: number;
|
|
784
|
+
currency: string;
|
|
785
|
+
};
|
|
726
786
|
}>;
|
|
727
787
|
taskType: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
728
788
|
name: "task_type";
|
|
@@ -915,7 +975,7 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
915
975
|
tableName: "summaries";
|
|
916
976
|
dataType: "json";
|
|
917
977
|
columnType: "SQLiteTextJson";
|
|
918
|
-
data:
|
|
978
|
+
data: JsonObject;
|
|
919
979
|
driverParam: string;
|
|
920
980
|
notNull: false;
|
|
921
981
|
hasDefault: false;
|
|
@@ -927,7 +987,7 @@ export declare const summaries: import("drizzle-orm/sqlite-core").SQLiteTableWit
|
|
|
927
987
|
identity: undefined;
|
|
928
988
|
generated: undefined;
|
|
929
989
|
}, {}, {
|
|
930
|
-
$type:
|
|
990
|
+
$type: JsonObject;
|
|
931
991
|
}>;
|
|
932
992
|
};
|
|
933
993
|
dialect: "sqlite";
|
|
@@ -1185,7 +1245,7 @@ export declare const settings: import("drizzle-orm/sqlite-core").SQLiteTableWith
|
|
|
1185
1245
|
tableName: "settings";
|
|
1186
1246
|
dataType: "json";
|
|
1187
1247
|
columnType: "SQLiteTextJson";
|
|
1188
|
-
data:
|
|
1248
|
+
data: unknown;
|
|
1189
1249
|
driverParam: string;
|
|
1190
1250
|
notNull: true;
|
|
1191
1251
|
hasDefault: false;
|
|
@@ -1197,7 +1257,7 @@ export declare const settings: import("drizzle-orm/sqlite-core").SQLiteTableWith
|
|
|
1197
1257
|
identity: undefined;
|
|
1198
1258
|
generated: undefined;
|
|
1199
1259
|
}, {}, {
|
|
1200
|
-
$type:
|
|
1260
|
+
$type: unknown;
|
|
1201
1261
|
}>;
|
|
1202
1262
|
category: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1203
1263
|
name: "category";
|
|
@@ -1674,7 +1734,7 @@ export declare const taskEvents: import("drizzle-orm/sqlite-core").SQLiteTableWi
|
|
|
1674
1734
|
tableName: "task_events";
|
|
1675
1735
|
dataType: "json";
|
|
1676
1736
|
columnType: "SQLiteTextJson";
|
|
1677
|
-
data:
|
|
1737
|
+
data: JsonObject;
|
|
1678
1738
|
driverParam: string;
|
|
1679
1739
|
notNull: false;
|
|
1680
1740
|
hasDefault: false;
|
|
@@ -1686,7 +1746,7 @@ export declare const taskEvents: import("drizzle-orm/sqlite-core").SQLiteTableWi
|
|
|
1686
1746
|
identity: undefined;
|
|
1687
1747
|
generated: undefined;
|
|
1688
1748
|
}, {}, {
|
|
1689
|
-
$type:
|
|
1749
|
+
$type: JsonObject;
|
|
1690
1750
|
}>;
|
|
1691
1751
|
timestamp: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
1692
1752
|
name: "timestamp";
|
|
@@ -2071,7 +2131,7 @@ export declare const taskArchives: import("drizzle-orm/sqlite-core").SQLiteTable
|
|
|
2071
2131
|
tableName: "task_archives";
|
|
2072
2132
|
dataType: "json";
|
|
2073
2133
|
columnType: "SQLiteTextJson";
|
|
2074
|
-
data:
|
|
2134
|
+
data: TaskResult;
|
|
2075
2135
|
driverParam: string;
|
|
2076
2136
|
notNull: false;
|
|
2077
2137
|
hasDefault: false;
|
|
@@ -2083,14 +2143,14 @@ export declare const taskArchives: import("drizzle-orm/sqlite-core").SQLiteTable
|
|
|
2083
2143
|
identity: undefined;
|
|
2084
2144
|
generated: undefined;
|
|
2085
2145
|
}, {}, {
|
|
2086
|
-
$type:
|
|
2146
|
+
$type: TaskResult;
|
|
2087
2147
|
}>;
|
|
2088
2148
|
metadata: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
2089
2149
|
name: "metadata";
|
|
2090
2150
|
tableName: "task_archives";
|
|
2091
2151
|
dataType: "json";
|
|
2092
2152
|
columnType: "SQLiteTextJson";
|
|
2093
|
-
data:
|
|
2153
|
+
data: JsonObject;
|
|
2094
2154
|
driverParam: string;
|
|
2095
2155
|
notNull: false;
|
|
2096
2156
|
hasDefault: false;
|
|
@@ -2102,7 +2162,7 @@ export declare const taskArchives: import("drizzle-orm/sqlite-core").SQLiteTable
|
|
|
2102
2162
|
identity: undefined;
|
|
2103
2163
|
generated: undefined;
|
|
2104
2164
|
}, {}, {
|
|
2105
|
-
$type:
|
|
2165
|
+
$type: JsonObject;
|
|
2106
2166
|
}>;
|
|
2107
2167
|
durationMs: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
2108
2168
|
name: "duration_ms";
|
|
@@ -5753,7 +5813,7 @@ export declare const oauthAccounts: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
5753
5813
|
tableName: "oauth_accounts";
|
|
5754
5814
|
dataType: "json";
|
|
5755
5815
|
columnType: "SQLiteTextJson";
|
|
5756
|
-
data:
|
|
5816
|
+
data: JsonObject;
|
|
5757
5817
|
driverParam: string;
|
|
5758
5818
|
notNull: false;
|
|
5759
5819
|
hasDefault: false;
|
|
@@ -5765,7 +5825,7 @@ export declare const oauthAccounts: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
5765
5825
|
identity: undefined;
|
|
5766
5826
|
generated: undefined;
|
|
5767
5827
|
}, {}, {
|
|
5768
|
-
$type:
|
|
5828
|
+
$type: JsonObject;
|
|
5769
5829
|
}>;
|
|
5770
5830
|
createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
5771
5831
|
name: "created_at";
|
|
@@ -6262,7 +6322,7 @@ export declare const userPreferences: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
6262
6322
|
tableName: "user_preferences";
|
|
6263
6323
|
dataType: "json";
|
|
6264
6324
|
columnType: "SQLiteTextJson";
|
|
6265
|
-
data:
|
|
6325
|
+
data: JsonObject;
|
|
6266
6326
|
driverParam: string;
|
|
6267
6327
|
notNull: false;
|
|
6268
6328
|
hasDefault: true;
|
|
@@ -6274,7 +6334,7 @@ export declare const userPreferences: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
6274
6334
|
identity: undefined;
|
|
6275
6335
|
generated: undefined;
|
|
6276
6336
|
}, {}, {
|
|
6277
|
-
$type:
|
|
6337
|
+
$type: JsonObject;
|
|
6278
6338
|
}>;
|
|
6279
6339
|
updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
6280
6340
|
name: "updated_at";
|
|
@@ -7327,7 +7387,7 @@ export declare const scheduledJobs: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
7327
7387
|
columnType: "SQLiteTextJson";
|
|
7328
7388
|
data: {
|
|
7329
7389
|
type: "webhook" | "ticket" | "file" | "github";
|
|
7330
|
-
config:
|
|
7390
|
+
config: JsonObject;
|
|
7331
7391
|
} | null;
|
|
7332
7392
|
driverParam: string;
|
|
7333
7393
|
notNull: false;
|
|
@@ -7342,7 +7402,7 @@ export declare const scheduledJobs: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
7342
7402
|
}, {}, {
|
|
7343
7403
|
$type: {
|
|
7344
7404
|
type: "webhook" | "ticket" | "file" | "github";
|
|
7345
|
-
config:
|
|
7405
|
+
config: JsonObject;
|
|
7346
7406
|
} | null;
|
|
7347
7407
|
}>;
|
|
7348
7408
|
jobType: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
@@ -7369,7 +7429,7 @@ export declare const scheduledJobs: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
7369
7429
|
tableName: "scheduled_jobs";
|
|
7370
7430
|
dataType: "json";
|
|
7371
7431
|
columnType: "SQLiteTextJson";
|
|
7372
|
-
data:
|
|
7432
|
+
data: JsonObject;
|
|
7373
7433
|
driverParam: string;
|
|
7374
7434
|
notNull: true;
|
|
7375
7435
|
hasDefault: false;
|
|
@@ -7381,7 +7441,7 @@ export declare const scheduledJobs: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
7381
7441
|
identity: undefined;
|
|
7382
7442
|
generated: undefined;
|
|
7383
7443
|
}, {}, {
|
|
7384
|
-
$type:
|
|
7444
|
+
$type: JsonObject;
|
|
7385
7445
|
}>;
|
|
7386
7446
|
templateId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
7387
7447
|
name: "template_id";
|
|
@@ -8334,7 +8394,7 @@ export declare const deadLetterTasks: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
8334
8394
|
tableName: "dead_letter_tasks";
|
|
8335
8395
|
dataType: "json";
|
|
8336
8396
|
columnType: "SQLiteTextJson";
|
|
8337
|
-
data:
|
|
8397
|
+
data: JsonObject;
|
|
8338
8398
|
driverParam: string;
|
|
8339
8399
|
notNull: true;
|
|
8340
8400
|
hasDefault: true;
|
|
@@ -8346,7 +8406,7 @@ export declare const deadLetterTasks: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
8346
8406
|
identity: undefined;
|
|
8347
8407
|
generated: undefined;
|
|
8348
8408
|
}, {}, {
|
|
8349
|
-
$type:
|
|
8409
|
+
$type: JsonObject;
|
|
8350
8410
|
}>;
|
|
8351
8411
|
createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
8352
8412
|
name: "created_at";
|
|
@@ -8579,7 +8639,7 @@ export declare const jobRunHistory: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
8579
8639
|
tableName: "job_run_history";
|
|
8580
8640
|
dataType: "json";
|
|
8581
8641
|
columnType: "SQLiteTextJson";
|
|
8582
|
-
data:
|
|
8642
|
+
data: JsonObject;
|
|
8583
8643
|
driverParam: string;
|
|
8584
8644
|
notNull: false;
|
|
8585
8645
|
hasDefault: false;
|
|
@@ -8591,7 +8651,7 @@ export declare const jobRunHistory: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
8591
8651
|
identity: undefined;
|
|
8592
8652
|
generated: undefined;
|
|
8593
8653
|
}, {}, {
|
|
8594
|
-
$type:
|
|
8654
|
+
$type: JsonObject;
|
|
8595
8655
|
}>;
|
|
8596
8656
|
};
|
|
8597
8657
|
dialect: "sqlite";
|
|
@@ -8760,7 +8820,7 @@ export declare const jobTemplates: import("drizzle-orm/sqlite-core").SQLiteTable
|
|
|
8760
8820
|
tableName: "job_templates";
|
|
8761
8821
|
dataType: "json";
|
|
8762
8822
|
columnType: "SQLiteTextJson";
|
|
8763
|
-
data:
|
|
8823
|
+
data: JsonObject;
|
|
8764
8824
|
driverParam: string;
|
|
8765
8825
|
notNull: true;
|
|
8766
8826
|
hasDefault: false;
|
|
@@ -8772,7 +8832,7 @@ export declare const jobTemplates: import("drizzle-orm/sqlite-core").SQLiteTable
|
|
|
8772
8832
|
identity: undefined;
|
|
8773
8833
|
generated: undefined;
|
|
8774
8834
|
}, {}, {
|
|
8775
|
-
$type:
|
|
8835
|
+
$type: JsonObject;
|
|
8776
8836
|
}>;
|
|
8777
8837
|
suggestedCron: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
8778
8838
|
name: "suggested_cron";
|
|
@@ -9159,7 +9219,7 @@ export declare const agentSessions: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
9159
9219
|
tableName: "agent_sessions";
|
|
9160
9220
|
dataType: "json";
|
|
9161
9221
|
columnType: "SQLiteTextJson";
|
|
9162
|
-
data:
|
|
9222
|
+
data: JsonObject;
|
|
9163
9223
|
driverParam: string;
|
|
9164
9224
|
notNull: false;
|
|
9165
9225
|
hasDefault: false;
|
|
@@ -9171,7 +9231,7 @@ export declare const agentSessions: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
9171
9231
|
identity: undefined;
|
|
9172
9232
|
generated: undefined;
|
|
9173
9233
|
}, {}, {
|
|
9174
|
-
$type:
|
|
9234
|
+
$type: JsonObject;
|
|
9175
9235
|
}>;
|
|
9176
9236
|
stopReason: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
9177
9237
|
name: "stop_reason";
|
|
@@ -9303,7 +9363,7 @@ export declare const agentSessions: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
9303
9363
|
tableName: "agent_sessions";
|
|
9304
9364
|
dataType: "json";
|
|
9305
9365
|
columnType: "SQLiteTextJson";
|
|
9306
|
-
data:
|
|
9366
|
+
data: JsonObject;
|
|
9307
9367
|
driverParam: string;
|
|
9308
9368
|
notNull: false;
|
|
9309
9369
|
hasDefault: true;
|
|
@@ -9315,7 +9375,7 @@ export declare const agentSessions: import("drizzle-orm/sqlite-core").SQLiteTabl
|
|
|
9315
9375
|
identity: undefined;
|
|
9316
9376
|
generated: undefined;
|
|
9317
9377
|
}, {}, {
|
|
9318
|
-
$type:
|
|
9378
|
+
$type: JsonObject;
|
|
9319
9379
|
}>;
|
|
9320
9380
|
};
|
|
9321
9381
|
dialect: "sqlite";
|
|
@@ -9584,7 +9644,7 @@ export declare const sessionMessages: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
9584
9644
|
tableName: "session_messages";
|
|
9585
9645
|
dataType: "json";
|
|
9586
9646
|
columnType: "SQLiteTextJson";
|
|
9587
|
-
data:
|
|
9647
|
+
data: JsonObject;
|
|
9588
9648
|
driverParam: string;
|
|
9589
9649
|
notNull: true;
|
|
9590
9650
|
hasDefault: false;
|
|
@@ -9596,7 +9656,7 @@ export declare const sessionMessages: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
9596
9656
|
identity: undefined;
|
|
9597
9657
|
generated: undefined;
|
|
9598
9658
|
}, {}, {
|
|
9599
|
-
$type:
|
|
9659
|
+
$type: JsonObject;
|
|
9600
9660
|
}>;
|
|
9601
9661
|
priority: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
9602
9662
|
name: "priority";
|
|
@@ -10182,4 +10242,5 @@ export declare const costHistory: import("drizzle-orm/sqlite-core").SQLiteTableW
|
|
|
10182
10242
|
};
|
|
10183
10243
|
dialect: "sqlite";
|
|
10184
10244
|
}>;
|
|
10245
|
+
export {};
|
|
10185
10246
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Re-routes summary operations to the persistent storage module.
|
|
5
5
|
*/
|
|
6
6
|
import { getStorage } from '../storage/index.js';
|
|
7
|
+
import { createContextualLogger } from '../utils/logger.js';
|
|
8
|
+
const log = createContextualLogger('Summaries');
|
|
7
9
|
import { getEmbeddingService } from '../ai/embedding-service.js';
|
|
8
10
|
import { logger } from '../utils/logger.js';
|
|
9
11
|
import { randomUUID } from 'crypto';
|
|
@@ -96,6 +98,6 @@ export async function deleteSummary(id) {
|
|
|
96
98
|
*/
|
|
97
99
|
export async function clearAllSummaries() {
|
|
98
100
|
// Not implemented in production storage for safety
|
|
99
|
-
|
|
101
|
+
log.warn('clearAllSummaries called but not implemented for persistent storage');
|
|
100
102
|
}
|
|
101
103
|
//# sourceMappingURL=storage.js.map
|
package/dist/tickets/index.js
CHANGED
|
@@ -80,7 +80,7 @@ export async function createTicket(input) {
|
|
|
80
80
|
estimate: parsed.estimate,
|
|
81
81
|
estimateUnit: parsed.estimateUnit,
|
|
82
82
|
};
|
|
83
|
-
|
|
83
|
+
const ticketRow = {
|
|
84
84
|
id: ticket.id,
|
|
85
85
|
sequence: ticket.sequence,
|
|
86
86
|
projectId: ticket.projectId,
|
|
@@ -99,11 +99,12 @@ export async function createTicket(input) {
|
|
|
99
99
|
aiAgent: ticket.aiAgent,
|
|
100
100
|
aiSessionId: ticket.aiSessionId,
|
|
101
101
|
aiTaskId: ticket.aiTaskId,
|
|
102
|
-
startDate: ticket.startDate,
|
|
103
|
-
dueDate: ticket.dueDate,
|
|
102
|
+
startDate: ticket.startDate ? new Date(ticket.startDate) : undefined,
|
|
103
|
+
dueDate: ticket.dueDate ? new Date(ticket.dueDate) : undefined,
|
|
104
104
|
estimate: ticket.estimate,
|
|
105
105
|
estimateUnit: ticket.estimateUnit,
|
|
106
|
-
}
|
|
106
|
+
};
|
|
107
|
+
await db.insert(tickets).values(ticketRow);
|
|
107
108
|
// Record creation in history
|
|
108
109
|
await recordHistory(id, "created", undefined, "created", {
|
|
109
110
|
type: parsed.createdBy || "human",
|
|
@@ -1132,7 +1133,7 @@ export async function createTicketFromSync(ticket, link) {
|
|
|
1132
1133
|
id,
|
|
1133
1134
|
sequence,
|
|
1134
1135
|
};
|
|
1135
|
-
|
|
1136
|
+
const ticketRow = {
|
|
1136
1137
|
id: newTicket.id,
|
|
1137
1138
|
sequence: newTicket.sequence,
|
|
1138
1139
|
title: newTicket.title,
|
|
@@ -1150,11 +1151,12 @@ export async function createTicketFromSync(ticket, link) {
|
|
|
1150
1151
|
aiAgent: newTicket.aiAgent,
|
|
1151
1152
|
aiSessionId: newTicket.aiSessionId,
|
|
1152
1153
|
aiTaskId: newTicket.aiTaskId,
|
|
1153
|
-
startDate: newTicket.startDate,
|
|
1154
|
-
dueDate: newTicket.dueDate,
|
|
1154
|
+
startDate: newTicket.startDate ? new Date(newTicket.startDate) : undefined,
|
|
1155
|
+
dueDate: newTicket.dueDate ? new Date(newTicket.dueDate) : undefined,
|
|
1155
1156
|
estimate: newTicket.estimate,
|
|
1156
1157
|
estimateUnit: newTicket.estimateUnit,
|
|
1157
|
-
}
|
|
1158
|
+
};
|
|
1159
|
+
await db.insert(tickets).values(ticketRow);
|
|
1158
1160
|
// Create external link
|
|
1159
1161
|
await createExternalLink(id, link);
|
|
1160
1162
|
// Record creation in history
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* until the service has time to recover.
|
|
7
7
|
*/
|
|
8
8
|
import { AppError, ErrorCategory, ErrorSeverity } from '../types/errors.js';
|
|
9
|
+
import { createContextualLogger } from './logger.js';
|
|
10
|
+
const log = createContextualLogger('CircuitBreaker');
|
|
9
11
|
/**
|
|
10
12
|
* Circuit breaker states
|
|
11
13
|
*/
|
|
@@ -129,9 +131,12 @@ export class CircuitBreaker {
|
|
|
129
131
|
this.transitionTo(CircuitState.OPEN);
|
|
130
132
|
}
|
|
131
133
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
log.error('Failure recorded', error instanceof Error ? error : new Error(String(error)), {
|
|
135
|
+
name: this.config.name,
|
|
136
|
+
failureCount: this.failures.length,
|
|
137
|
+
threshold: this.config.failureThreshold,
|
|
138
|
+
state: this.state,
|
|
139
|
+
});
|
|
135
140
|
}
|
|
136
141
|
/**
|
|
137
142
|
* Transition to a new state
|
|
@@ -161,7 +166,7 @@ export class CircuitBreaker {
|
|
|
161
166
|
}
|
|
162
167
|
}, this.config.resetTimeout);
|
|
163
168
|
}
|
|
164
|
-
|
|
169
|
+
log.info('State changed', { name: this.config.name, from: oldState, to: newState });
|
|
165
170
|
}
|
|
166
171
|
/**
|
|
167
172
|
* Get current statistics
|
|
@@ -189,7 +194,7 @@ export class CircuitBreaker {
|
|
|
189
194
|
this.successCount = 0;
|
|
190
195
|
this.failures = [];
|
|
191
196
|
this.stateChangedAt = new Date();
|
|
192
|
-
|
|
197
|
+
log.info('Manually reset', { name: this.config.name });
|
|
193
198
|
}
|
|
194
199
|
/**
|
|
195
200
|
* Manually open the circuit breaker
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export interface LoggerConfig {
|
|
|
46
46
|
pretty: boolean;
|
|
47
47
|
/** Include timestamps */
|
|
48
48
|
includeTimestamp: boolean;
|
|
49
|
+
/** Output stream for log entries */
|
|
50
|
+
stream: 'stdout' | 'stderr';
|
|
49
51
|
/** Additional context to include in all logs */
|
|
50
52
|
defaultContext?: LogContext;
|
|
51
53
|
}
|
|
@@ -95,6 +97,8 @@ export declare class Logger {
|
|
|
95
97
|
* Get current configuration
|
|
96
98
|
*/
|
|
97
99
|
getConfig(): LoggerConfig;
|
|
100
|
+
private writeLine;
|
|
101
|
+
private formatValue;
|
|
98
102
|
}
|
|
99
103
|
/**
|
|
100
104
|
* Default logger instance
|
|
@@ -129,7 +133,7 @@ export declare function getCorrelationMetadata(): Record<string, unknown> | unde
|
|
|
129
133
|
/**
|
|
130
134
|
* Create a logger that automatically includes correlation context
|
|
131
135
|
*/
|
|
132
|
-
export declare function createContextualLogger(name?: string): Logger;
|
|
136
|
+
export declare function createContextualLogger(name?: string, config?: Partial<LoggerConfig>): Logger;
|
|
133
137
|
/**
|
|
134
138
|
* Performance timing utility
|
|
135
139
|
*/
|
package/dist/utils/logger.js
CHANGED
|
@@ -36,6 +36,7 @@ export class Logger {
|
|
|
36
36
|
level: process.env.LOG_LEVEL || LogLevel.INFO,
|
|
37
37
|
pretty: process.env.NODE_ENV !== 'production',
|
|
38
38
|
includeTimestamp: true,
|
|
39
|
+
stream: 'stdout',
|
|
39
40
|
...config,
|
|
40
41
|
};
|
|
41
42
|
}
|
|
@@ -139,19 +140,19 @@ export class Logger {
|
|
|
139
140
|
if (entry.context?.correlationId) {
|
|
140
141
|
output += ` ${color}[${entry.context.correlationId}]${reset}`;
|
|
141
142
|
}
|
|
142
|
-
|
|
143
|
+
this.writeLine(output);
|
|
143
144
|
// Print context
|
|
144
145
|
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
145
146
|
const { correlationId: _correlationId, ...otherContext } = entry.context;
|
|
146
147
|
if (Object.keys(otherContext).length > 0) {
|
|
147
|
-
|
|
148
|
+
this.writeLine(` Context: ${this.formatValue(otherContext)}`);
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
// Print error details
|
|
151
152
|
if (entry.error) {
|
|
152
|
-
|
|
153
|
+
this.writeLine(` ${color}Error:${reset} ${entry.error.message}`);
|
|
153
154
|
if (entry.error.stack) {
|
|
154
|
-
|
|
155
|
+
this.writeLine(` Stack: ${entry.error.stack}`);
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
}
|
|
@@ -159,7 +160,7 @@ export class Logger {
|
|
|
159
160
|
* JSON print for production
|
|
160
161
|
*/
|
|
161
162
|
jsonPrint(entry) {
|
|
162
|
-
|
|
163
|
+
this.writeLine(JSON.stringify(entry));
|
|
163
164
|
}
|
|
164
165
|
/**
|
|
165
166
|
* Update logger configuration
|
|
@@ -173,6 +174,21 @@ export class Logger {
|
|
|
173
174
|
getConfig() {
|
|
174
175
|
return { ...this.config };
|
|
175
176
|
}
|
|
177
|
+
writeLine(message) {
|
|
178
|
+
const stream = this.config.stream === 'stderr' ? process.stderr : process.stdout;
|
|
179
|
+
stream.write(`${message}\n`);
|
|
180
|
+
}
|
|
181
|
+
formatValue(value) {
|
|
182
|
+
if (typeof value === 'string') {
|
|
183
|
+
return value;
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
return JSON.stringify(value);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return String(value);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
176
192
|
}
|
|
177
193
|
/**
|
|
178
194
|
* Default logger instance
|
|
@@ -211,9 +227,9 @@ export function getCorrelationMetadata() {
|
|
|
211
227
|
/**
|
|
212
228
|
* Create a logger that automatically includes correlation context
|
|
213
229
|
*/
|
|
214
|
-
export function createContextualLogger(name) {
|
|
230
|
+
export function createContextualLogger(name, config) {
|
|
215
231
|
const baseContext = name ? { component: name } : {};
|
|
216
|
-
const contextualLogger = new Logger({ defaultContext: baseContext });
|
|
232
|
+
const contextualLogger = new Logger({ ...config, defaultContext: baseContext });
|
|
217
233
|
const mergeContext = (context) => {
|
|
218
234
|
const correlationId = getCorrelationId();
|
|
219
235
|
const metadata = getCorrelationMetadata();
|