@devflow-tools/database 0.17.7 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -2
  3. package/dist/data/LocalDataProvider.d.ts +63 -0
  4. package/dist/data/LocalDataProvider.js +332 -0
  5. package/dist/data/default-enforcer-rules.d.ts +3 -0
  6. package/dist/data/default-enforcer-rules.js +170 -0
  7. package/dist/data/devflow-schema.d.ts +2 -0
  8. package/dist/data/devflow-schema.js +80 -0
  9. package/dist/database.d.ts +45 -7
  10. package/dist/database.js +583 -125
  11. package/dist/index.d.ts +8 -4
  12. package/dist/index.js +11 -5
  13. package/dist/retrieval-ledger.d.ts +16 -1
  14. package/dist/retrieval-ledger.js +6 -0
  15. package/dist/retrieval-runtime.d.ts +39 -0
  16. package/dist/retrieval-runtime.js +2 -0
  17. package/dist/task-aggregate.d.ts +49 -0
  18. package/dist/task-aggregate.js +2 -0
  19. package/dist/task-semantic-control.d.ts +8 -1
  20. package/dist/task-semantic-control.js +2 -4
  21. package/package.json +15 -3
  22. package/CHANGELOG.md +0 -836
  23. package/__tests__/database.failure-category.test.ts +0 -44
  24. package/__tests__/database.host-actions.test.ts +0 -405
  25. package/__tests__/database.learning-candidates.test.ts +0 -93
  26. package/__tests__/database.memory-turn-receipts.test.ts +0 -98
  27. package/__tests__/database.retrieval-ledger.test.ts +0 -68
  28. package/__tests__/database.retrieval-sessions.test.ts +0 -79
  29. package/__tests__/database.semantic-resolution.test.ts +0 -87
  30. package/__tests__/database.skill-executions.test.ts +0 -456
  31. package/__tests__/database.task-runtime.test.ts +0 -73
  32. package/__tests__/database.test.ts +0 -177
  33. package/__tests__/database.work-queue.test.ts +0 -274
  34. package/__tests__/database.workflow-workers.test.ts +0 -60
  35. package/__tests__/node-sqlite.test.ts +0 -68
  36. package/src/database.ts +0 -5853
  37. package/src/host-actions.ts +0 -211
  38. package/src/index.ts +0 -153
  39. package/src/learning-candidates.ts +0 -181
  40. package/src/node-sqlite.ts +0 -60
  41. package/src/obligation-ledger.ts +0 -57
  42. package/src/retrieval-ledger.ts +0 -35
  43. package/src/retrieval-sessions.ts +0 -196
  44. package/src/semantic-resolution.ts +0 -181
  45. package/src/task-runtime.ts +0 -169
  46. package/src/task-semantic-control.ts +0 -270
  47. package/src/types.ts +0 -17
  48. package/src/work-queue.ts +0 -123
  49. package/src/workflow-workers.ts +0 -198
  50. package/tsconfig.json +0 -19
  51. package/tsconfig.tsbuildinfo +0 -1
  52. package/vitest.config.ts +0 -41
package/dist/index.d.ts CHANGED
@@ -1,20 +1,24 @@
1
1
  export { DevFlowDatabase, getGlobalDevFlowDbPath, openGlobalDevFlowDatabase, openGlobalDevFlowReadOnlyDatabase, } from './database';
2
+ export { LocalDataProvider } from './data/LocalDataProvider';
3
+ export { DEVFLOW_SCHEMA_SQL, DEVFLOW_TABLE_NAMES } from './data/devflow-schema';
4
+ export { DEFAULT_ENFORCER_RULES, seedDefaultEnforcerRules } from './data/default-enforcer-rules';
2
5
  export type { BenchmarkReportMetaRecord, BenchmarkReportRecord, FeedbackRecord, GovernanceAuditRecord, GovernanceRuleRecord, HookFallbackRecord, HookReceiptRecord, ContextReceiptRecord, ContextSelectionEventRecord, PolicyVerificationBaselineRecord, MemoryDistillCheckpointRecord, MemoryTurnRecord, MemoryTurnStatus, TelemetryFailureRecord, } from './database';
3
6
  export type { EnqueueWorkInput, LeaseWorkInput, RequestSessionClosureInput, SessionClosureRecord, SessionClosureState, WorkError, WorkItemRecord, WorkKind, WorkQueueHealth, WorkState, ProjectMutationLeaseRecord, } from './work-queue';
4
- export type { RetrievalLedgerEventRecord, RetrievalLedgerSourceType, RetrievalLedgerStage, } from './retrieval-ledger';
7
+ export type { RetrievalLedgerEventRecord, RetrievalLedgerSourceType, RetrievalLedgerStage, VerifyReceiptBoundRetrievalInput, VerifyReceiptBoundRetrievalResult, } from './retrieval-ledger';
8
+ export { retrievalLedgerTransitionId } from './retrieval-ledger';
5
9
  export { hostActionReportsEqual, isHostActionState, mapHostActionRow, serializeHostActionReport, } from './host-actions';
6
10
  export { RETRIEVAL_MAX_CYCLES, isRetrievalSessionState } from './retrieval-sessions';
7
11
  export type { AppendRetrievalCycleInput, CreateRetrievalSessionInput, RetrievalCycleRecord, RetrievalGapKind, RetrievalGapRecord, RetrievalSessionRecord, RetrievalSessionState, } from './retrieval-sessions';
12
+ export type { AppendRetrievalCycleV2Input, CreateRetrievalSessionV2Input, RetrievalSessionV2Record, } from './retrieval-runtime';
8
13
  export type { FailHostActionInput, HostActionRecord, HostActionState, ReportHostActionInput, RequestHostActionInput, StartHostActionInput, VerifyHostActionInput, } from './host-actions';
9
14
  export { mapSessionObligationRow, normalizeTurnId, } from './obligation-ledger';
10
15
  export { assertTaskIdentity, mapChannelQueryPlanRow, mapTaskIntentArtifactRow, mapTerminalTransitionRow, mapToolNameResolutionRow, mapTranscriptCheckpointRow, stableSemanticJson, } from './task-semantic-control';
11
16
  export { mapTaskRuntimeEventRow, mapTaskRuntimeSnapshotRow, stableTaskRuntimeHash, stableTaskRuntimeJson, } from './task-runtime';
17
+ export type { AppendTaskAggregateInput, AppendTaskAggregateResult, LeaseTaskOutboxInput, TaskAggregateRecord, TaskOutboxRecord, } from './task-aggregate';
12
18
  export type { TaskRuntimeChannelRecord, TaskRuntimeChannelRequirement, TaskRuntimeChannelStatus, TaskRuntimeEventRecord, TaskRuntimeIdentityRecord, TaskRuntimeObligationRecord, TaskRuntimeObligationState, TaskRuntimeSnapshotRecord, } from './task-runtime';
13
- export type { ChannelQueryPlanRecord, TaskIdentityRecord, TaskIntentArtifactRecord, TerminalTransitionRecord, ToolNameResolutionRecord, ToolNameResolutionStatus, TranscriptCheckpointRecord, } from './task-semantic-control';
19
+ export type { CanonicalSemanticTaskWrite, ChannelQueryPlanRecord, TaskIdentityRecord, TaskIntentArtifactRecord, TerminalTransitionRecord, ToolNameResolutionRecord, ToolNameResolutionStatus, TranscriptCheckpointRecord, } from './task-semantic-control';
14
20
  export { LEGAL_WORKFLOW_WORKER_TRANSITIONS, TERMINAL_WORKFLOW_WORKER_STATES, mapWorkflowMergeRow, mapWorkflowWorkerEventRow, mapWorkflowWorkerRow, } from './workflow-workers';
15
21
  export type { CreateWorkflowWorkerInput, EnqueueWorkflowMergeInput, TransitionWorkflowWorkerInput, WorkflowMergeRecord, WorkflowMergeState, WorkflowWorkerEventRecord, WorkflowWorkerRecord, WorkflowWorkerState, } from './workflow-workers';
16
22
  export { mapLearningCandidateRow, mapLearningEvidenceRow, mapLearningVersionRow, stableLearningJson, } from './learning-candidates';
17
23
  export type { AddLearningCandidateEvidenceInput, LearningCandidateEvidenceRecord, LearningCandidateKind, LearningCandidateRecord, LearningCandidateState, LearningCandidateVersionRecord, LearningEvidencePolarity, LearningOutcomeState, TransitionLearningCandidateInput, UpsertLearningCandidateInput, } from './learning-candidates';
18
24
  export type { SessionObligationKind, SessionObligationRecord, SessionObligationState, } from './obligation-ledger';
19
- export { assertSemanticResolutionRecord, mapSemanticResolutionRow, stableSemanticResolutionJson, } from './semantic-resolution';
20
- export type { PersistedSemanticGeneratedBy, PersistedSemanticResolutionState, SemanticResolutionRecord, } from './semantic-resolution';
package/dist/index.js CHANGED
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stableSemanticResolutionJson = exports.mapSemanticResolutionRow = exports.assertSemanticResolutionRecord = exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
3
+ exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.retrievalLedgerTransitionId = exports.seedDefaultEnforcerRules = exports.DEFAULT_ENFORCER_RULES = exports.DEVFLOW_TABLE_NAMES = exports.DEVFLOW_SCHEMA_SQL = exports.LocalDataProvider = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
4
4
  var database_1 = require("./database");
5
5
  Object.defineProperty(exports, "DevFlowDatabase", { enumerable: true, get: function () { return database_1.DevFlowDatabase; } });
6
6
  Object.defineProperty(exports, "getGlobalDevFlowDbPath", { enumerable: true, get: function () { return database_1.getGlobalDevFlowDbPath; } });
7
7
  Object.defineProperty(exports, "openGlobalDevFlowDatabase", { enumerable: true, get: function () { return database_1.openGlobalDevFlowDatabase; } });
8
8
  Object.defineProperty(exports, "openGlobalDevFlowReadOnlyDatabase", { enumerable: true, get: function () { return database_1.openGlobalDevFlowReadOnlyDatabase; } });
9
+ var LocalDataProvider_1 = require("./data/LocalDataProvider");
10
+ Object.defineProperty(exports, "LocalDataProvider", { enumerable: true, get: function () { return LocalDataProvider_1.LocalDataProvider; } });
11
+ var devflow_schema_1 = require("./data/devflow-schema");
12
+ Object.defineProperty(exports, "DEVFLOW_SCHEMA_SQL", { enumerable: true, get: function () { return devflow_schema_1.DEVFLOW_SCHEMA_SQL; } });
13
+ Object.defineProperty(exports, "DEVFLOW_TABLE_NAMES", { enumerable: true, get: function () { return devflow_schema_1.DEVFLOW_TABLE_NAMES; } });
14
+ var default_enforcer_rules_1 = require("./data/default-enforcer-rules");
15
+ Object.defineProperty(exports, "DEFAULT_ENFORCER_RULES", { enumerable: true, get: function () { return default_enforcer_rules_1.DEFAULT_ENFORCER_RULES; } });
16
+ Object.defineProperty(exports, "seedDefaultEnforcerRules", { enumerable: true, get: function () { return default_enforcer_rules_1.seedDefaultEnforcerRules; } });
17
+ var retrieval_ledger_1 = require("./retrieval-ledger");
18
+ Object.defineProperty(exports, "retrievalLedgerTransitionId", { enumerable: true, get: function () { return retrieval_ledger_1.retrievalLedgerTransitionId; } });
9
19
  var host_actions_1 = require("./host-actions");
10
20
  Object.defineProperty(exports, "hostActionReportsEqual", { enumerable: true, get: function () { return host_actions_1.hostActionReportsEqual; } });
11
21
  Object.defineProperty(exports, "isHostActionState", { enumerable: true, get: function () { return host_actions_1.isHostActionState; } });
@@ -41,7 +51,3 @@ Object.defineProperty(exports, "mapLearningCandidateRow", { enumerable: true, ge
41
51
  Object.defineProperty(exports, "mapLearningEvidenceRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningEvidenceRow; } });
42
52
  Object.defineProperty(exports, "mapLearningVersionRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningVersionRow; } });
43
53
  Object.defineProperty(exports, "stableLearningJson", { enumerable: true, get: function () { return learning_candidates_1.stableLearningJson; } });
44
- var semantic_resolution_1 = require("./semantic-resolution");
45
- Object.defineProperty(exports, "assertSemanticResolutionRecord", { enumerable: true, get: function () { return semantic_resolution_1.assertSemanticResolutionRecord; } });
46
- Object.defineProperty(exports, "mapSemanticResolutionRow", { enumerable: true, get: function () { return semantic_resolution_1.mapSemanticResolutionRow; } });
47
- Object.defineProperty(exports, "stableSemanticResolutionJson", { enumerable: true, get: function () { return semantic_resolution_1.stableSemanticResolutionJson; } });
@@ -1,4 +1,4 @@
1
- export type RetrievalLedgerStage = 'eligible' | 'candidate' | 'selected' | 'exposed' | 'adopted' | 'consumed' | 'verified' | 'positive_outcome' | 'negative_outcome' | 'unknown' | 'unknown_outcome' | 'rejected';
1
+ export type RetrievalLedgerStage = 'eligible' | 'candidate' | 'selected' | 'consumed' | 'verified' | 'positive_outcome' | 'negative_outcome' | 'unknown_outcome' | 'rejected';
2
2
  export type RetrievalLedgerSourceType = 'code' | 'memory' | 'knowledge' | 'action';
3
3
  export interface RetrievalLedgerEventRecord {
4
4
  schemaVersion?: 'retrieval-ledger-event.v1';
@@ -29,3 +29,18 @@ export interface RetrievalLedgerEventRecord {
29
29
  payload: Record<string, unknown>;
30
30
  createdAt: number;
31
31
  }
32
+ export interface VerifyReceiptBoundRetrievalInput {
33
+ projectRoot: string;
34
+ sessionId: string;
35
+ executionId: string;
36
+ contextReceipt: string;
37
+ toolUseId: string;
38
+ verificationReceipt: string;
39
+ verifiedAt: number;
40
+ }
41
+ export interface VerifyReceiptBoundRetrievalResult {
42
+ selected: number;
43
+ consumed: number;
44
+ verified: number;
45
+ }
46
+ export declare function retrievalLedgerTransitionId(sourceEventId: string, stage: RetrievalLedgerStage, provenance: string): string;
@@ -1,2 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retrievalLedgerTransitionId = retrievalLedgerTransitionId;
4
+ const node_crypto_1 = require("node:crypto");
5
+ function retrievalLedgerTransitionId(sourceEventId, stage, provenance) {
6
+ return `retrieval:${(0, node_crypto_1.createHash)('sha256')
7
+ .update(`${sourceEventId}\0${stage}\0${provenance}`).digest('hex')}`;
8
+ }
@@ -0,0 +1,39 @@
1
+ import type { CanonicalTaskIdentity, RetrievalCycleReceiptV1, RetrievalSufficiencyStatus } from '@devflow-tools/sdk';
2
+ export interface RetrievalSessionV2Record {
3
+ id: string;
4
+ identity: CanonicalTaskIdentity;
5
+ taskRevision: number;
6
+ factsHash: string;
7
+ planHash: string;
8
+ activationSnapshotHash: string;
9
+ coordinatorVersion: string;
10
+ state: 'open' | RetrievalSufficiencyStatus;
11
+ cycle: number;
12
+ noGainCount: number;
13
+ maxCycles: 3;
14
+ initialTokenBudget: number;
15
+ remainingTokenBudget: number;
16
+ finalReceiptHash?: string;
17
+ createdAt: number;
18
+ updatedAt: number;
19
+ expiresAt: number;
20
+ }
21
+ export interface CreateRetrievalSessionV2Input {
22
+ id: string;
23
+ identity: CanonicalTaskIdentity;
24
+ taskRevision: number;
25
+ factsHash: string;
26
+ planHash: string;
27
+ activationSnapshotHash: string;
28
+ coordinatorVersion: string;
29
+ tokenBudget: number;
30
+ expiresAt: number;
31
+ createdAt?: number;
32
+ }
33
+ export interface AppendRetrievalCycleV2Input {
34
+ sessionId: string;
35
+ projectRoot: string;
36
+ taskSessionId: string;
37
+ receipt: RetrievalCycleReceiptV1;
38
+ remainingTokenBudget: number;
39
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,49 @@
1
+ import type { CanonicalTaskIdentity, TaskAggregateEventV1, TaskDefinitionV1, TaskRuntimeSnapshotV2 } from '@devflow-tools/sdk';
2
+ export interface TaskAggregateRecord {
3
+ identity: CanonicalTaskIdentity;
4
+ revision: number;
5
+ definitionHash: string;
6
+ activationSnapshotHash: string;
7
+ lastEventSequence: number;
8
+ snapshot: TaskRuntimeSnapshotV2;
9
+ updatedAt: number;
10
+ }
11
+ export interface TaskOutboxRecord {
12
+ operationId: string;
13
+ eventId: string;
14
+ projectRoot: string;
15
+ sessionId: string;
16
+ turnId: string;
17
+ revision: number;
18
+ kind: string;
19
+ payload: Record<string, unknown>;
20
+ state: 'pending' | 'leased' | 'completed' | 'dead_letter';
21
+ leaseOwner?: string;
22
+ leaseExpiresAt?: number;
23
+ fencingToken: number;
24
+ attempts: number;
25
+ createdAt: number;
26
+ updatedAt: number;
27
+ }
28
+ export interface AppendTaskAggregateInput {
29
+ definition?: TaskDefinitionV1;
30
+ event: TaskAggregateEventV1;
31
+ snapshot: TaskRuntimeSnapshotV2;
32
+ outbox?: {
33
+ operationId: string;
34
+ kind: string;
35
+ payload: Record<string, unknown>;
36
+ };
37
+ }
38
+ export interface AppendTaskAggregateResult {
39
+ event: TaskAggregateEventV1;
40
+ snapshot: TaskRuntimeSnapshotV2;
41
+ replayed: boolean;
42
+ }
43
+ export interface LeaseTaskOutboxInput {
44
+ projectRoot: string;
45
+ owner: string;
46
+ limit: number;
47
+ leaseMs: number;
48
+ now?: number;
49
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -5,7 +5,7 @@ export interface TaskIdentityRecord {
5
5
  sessionId: string;
6
6
  turnId: string;
7
7
  requestId: string;
8
- executionId?: string;
8
+ executionId: string;
9
9
  }
10
10
  export interface TaskIntentArtifactRecord extends TaskIdentityRecord {
11
11
  version: number;
@@ -36,6 +36,12 @@ export interface ChannelQueryPlanRecord extends TaskIdentityRecord {
36
36
  degradation?: Record<string, unknown>;
37
37
  createdAt: number;
38
38
  }
39
+ export interface CanonicalSemanticTaskWrite {
40
+ revision: number;
41
+ activation: RuntimeActivationSnapshotV1;
42
+ context: SemanticExecutionContext;
43
+ definition: TaskDefinitionV1;
44
+ }
39
45
  export type ToolNameResolutionStatus = 'canonical' | 'alias' | 'unsupported';
40
46
  export interface ToolNameResolutionRecord extends TaskIdentityRecord {
41
47
  id: string;
@@ -77,3 +83,4 @@ export declare function mapToolNameResolutionRow(row: Record<string, unknown>):
77
83
  export declare function mapTerminalTransitionRow(row: Record<string, unknown>): TerminalTransitionRecord;
78
84
  export declare function mapTranscriptCheckpointRow(row: Record<string, unknown>): TranscriptCheckpointRecord;
79
85
  export declare function assertTaskIdentity(record: TaskIdentityRecord): void;
86
+ import type { RuntimeActivationSnapshotV1, SemanticExecutionContext, TaskDefinitionV1 } from '@devflow-tools/sdk';
@@ -102,14 +102,12 @@ function assertTaskIdentity(record) {
102
102
  sessionId: record.sessionId,
103
103
  turnId: record.turnId,
104
104
  requestId: record.requestId,
105
+ executionId: record.executionId,
105
106
  })) {
106
107
  if (typeof value !== 'string' || value.trim().length === 0) {
107
108
  throw new Error(`TASK_IDENTITY_INVALID:${field}`);
108
109
  }
109
110
  }
110
- if (record.executionId !== undefined && record.executionId.trim().length === 0) {
111
- throw new Error('TASK_IDENTITY_INVALID:executionId');
112
- }
113
111
  }
114
112
  function mapTaskIdentityRow(row) {
115
113
  return {
@@ -119,7 +117,7 @@ function mapTaskIdentityRow(row) {
119
117
  sessionId: requiredString(row.session_id, 'session_id'),
120
118
  turnId: requiredString(row.turn_id, 'turn_id'),
121
119
  requestId: requiredString(row.request_id, 'request_id'),
122
- executionId: optionalString(row.execution_id),
120
+ executionId: requiredString(row.execution_id, 'execution_id'),
123
121
  };
124
122
  }
125
123
  function canonicalize(value) {
package/package.json CHANGED
@@ -1,17 +1,29 @@
1
1
  {
2
2
  "name": "@devflow-tools/database",
3
- "version": "0.17.7",
4
- "description": "DevFlow SQLite database package",
3
+ "version": "0.18.0",
4
+ "description": "SQLite persistence primitives shared by DevFlow runtime packages.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
7
10
  "scripts": {
8
11
  "build": "tsc",
9
12
  "test": "vitest run"
10
13
  },
14
+ "dependencies": {
15
+ "@devflow-tools/sdk": "0.18.0"
16
+ },
11
17
  "devDependencies": {
12
18
  "@types/node": "^22.15.0",
13
19
  "typescript": "^5.5.0",
14
20
  "vitest": "^2.0.0"
15
21
  },
16
- "gitHead": "560fe8a097aa9d398fdcfec409134cc94d26f92f"
22
+ "gitHead": "940c6c004c0ebb59abad3da9bc67137fa2d2a666",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/shilongfeicool/dev-flow.git"
27
+ },
28
+ "homepage": "https://github.com/shilongfeicool/dev-flow#readme"
17
29
  }